[docs]classDispatchManager:""" The Dispatcher is responsible for dispatching events to the appropriate handlers. The method names are the event names. You can listen to events by adding the following to your client: Examples -------- >>> from discord.ext import commands >>> @commands.Cog.listener() >>> async def on_pylav_queue_end_event(self, event: queue.QueueEndEvent): >>> print(f"Queue ended: {event.player.guild.name}") >>> @commands.Cog.listener() >>> async def on_pylav_track_stuck_event(self, event: track.TrackStuckEvent): >>> print(f"Track got stuck: {event.track.encoded}") """__slots__=("_client","dispatcher","mapping")def__init__(self,client:Client)->None:self._client=clientself.dispatcher=client.bot.dispatchself.mapping:dict[type[base.PyLavEvent],str]={}self._update_mapper(player)self._update_mapper(node)self._update_mapper(queue)self._update_mapper(track)self._update_mapper(plugins)self._update_mapper(track_start)self._update_mapper(sponsorblock)self._update_mapper(api)def_update_mapper(self,module:node|player|queue|track)->None:# type: ignore"""Updates the mapping with the events from the given module."""self.mapping.update({c:get_event_name(c)for_,cininspect.getmembers(module,inspect.isclass)ifissubclass(c,base.PyLavEvent)andnotisinstance(c,base.PyLavEvent)})
[docs]asyncdefdispatch(self,event:base.PyLavEvent)->None:"""Dispatches an event to the appropriate handler"""event_name=self.mapping[type(event)]self.dispatcher(event_name,event)
[docs]defget_event_names(self)->set[str]:"""Returns a set of all event names Returns ------- set[str] A set of all event names prefixed with `pylav_` """returnset(self.mapping.values())
[docs]defsimple_event_names(self)->set[str]:"""Returns a set of all simple event names Returns ------- set[str] A set of all event names """return{get_simple_event_name(k)forkinself.mapping.keys()}