We can ignore the listeners when we use event() dispatching event, here is how to implement it.

The flow is very simple, passing ignore listeners when we called event, and then ignore it.

For example, I have a event with listeners:

class EventServiceProvider
{
	protected $listen = [
		UserCreated::class => [
			SentToAdmin::class,
			SentToManager::class,
			NotifyUser::class, // we want to ignore it by specify situation.
		]
	]
}
class UserController
{
	public function createByAdmin(Request $request)
	{
			$user = User::query()->create($request->validated());

			event((new UserCreated)->ignoreListeners([
				NotifyUser::class // listener
			]));

			....
	}
}

Creating IgnoreListeners of trait:

trait IgnoreListeners
{
    public $listeners = [];

    // semantic.
    public function ignoreListeners(array $listeners = [])
    {
        return $this->setListeners($listeners);
    }

    public function getListeners()
    {
        return $this->listeners;
    }

    public function setListeners(array $listeners = [])
    {
        $this->listeners = $listeners;

        return $this;
    }

    public function inIgnoreListeners(array $listeners = []): bool
    {
        return in_array(static::class, $listeners);
    }
}

Use in UserCreated event:

class UserCreated
{
	use IgnoreListeners;
}

And then make a condition in specific listener:

class NotifyUser {
	use IgnoreListeners;
	
	public function handle($event)
	{
	  if($this->inIgnoreListeners($event->listeners)) {
	    return;
	  }
	
	  echo self::class . PHP_EOL;
	}
}

I think it very simple implementation, it must have a better than it, if I find others great implementation I will update it.