Add listener helpers (#69)
Some checks failed
Deploy MkDocs / deploy (push) Has been cancelled

This commit is contained in:
Slipstream 2025-06-11 18:24:18 -06:00 committed by GitHub
parent e693f00abe
commit 7c7bebc95a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 25 additions and 11 deletions

View File

@ -529,15 +529,29 @@ class Client:
print(f"Message: {message.content}") print(f"Message: {message.content}")
""" """
def decorator( def decorator(
coro: Callable[..., Awaitable[None]], coro: Callable[..., Awaitable[None]],
) -> Callable[..., Awaitable[None]]: ) -> Callable[..., Awaitable[None]]:
if not asyncio.iscoroutinefunction(coro): if not asyncio.iscoroutinefunction(coro):
raise TypeError("Event registered must be a coroutine function.") raise TypeError("Event registered must be a coroutine function.")
self._event_dispatcher.register(event_name.upper(), coro) self._event_dispatcher.register(event_name.upper(), coro)
return coro return coro
return decorator return decorator
def add_listener(
self, event_name: str, coro: Callable[..., Awaitable[None]]
) -> None:
"""Register ``coro`` to listen for ``event_name``."""
self._event_dispatcher.register(event_name, coro)
def remove_listener(
self, event_name: str, coro: Callable[..., Awaitable[None]]
) -> None:
"""Remove ``coro`` from ``event_name`` listeners."""
self._event_dispatcher.unregister(event_name, coro)
async def _process_message_for_commands(self, message: "Message") -> None: async def _process_message_for_commands(self, message: "Message") -> None:
"""Internal listener to process messages for commands.""" """Internal listener to process messages for commands."""

View File

@ -1,7 +1,7 @@
# Events # Events
Disagreement dispatches Gateway events to asynchronous callbacks. Handlers can be registered with `@client.event` or `client.on_event`. Disagreement dispatches Gateway events to asynchronous callbacks. Handlers can be registered with `@client.event`, `client.on_event`, or `client.add_listener(event_name, coro)`.
Listeners may be removed later using `EventDispatcher.unregister(event_name, coro)`. Listeners may be removed later using `client.remove_listener(event_name, coro)` or `EventDispatcher.unregister(event_name, coro)`.
## Raw Events ## Raw Events