Source code for wyvern.api.event_decos
from __future__ import annotations
import typing
from wyvern import events, types
from wyvern.api import event_handler as handler
[docs]class ImplementsEventDecos:
"""Interface for event decorators in :class:`.GatewayBot`,
this class is purely for the bot class to inherit from.
Example
-------
.. highlight:: python
.. code-block:: python
@bot.on_started()
async def started(event: wyvern.StartedEvent) -> None:
bot.logger.info(f"Logged in as {event.user.tag}")
"""
event_handler: handler.EventHandler
def _make_deco(
self, event: type[events.Event], **kwargs: typing.Any
) -> typing.Callable[[types.EventListenerCallbackT], handler.EventListener]:
def decorator(callable: types.EventListenerCallbackT) -> handler.EventListener:
self.event_handler.add_listener(lsnr := handler.EventListener(type=event, callback=callable, **kwargs))
return lsnr
return decorator
[docs] def on_starting(
self, **kwargs: typing.Any
) -> typing.Callable[[types.EventListenerCallbackT], handler.EventListener]:
"""Used to create a :class:`.StartingEvent` listener.
Returns
-------
EventListener
The listener that was created."""
return self._make_deco(events.StartingEvent, **kwargs)
[docs] def on_started(
self, **kwargs: typing.Any
) -> typing.Callable[[types.EventListenerCallbackT], handler.EventListener]:
"""Used to create a :class:`.StartedEvent` listener.
Returns
-------
EventListener
The listener that was created."""
return self._make_deco(events.StartedEvent, **kwargs)