diff --git a/disagreement/client.py b/disagreement/client.py index 8902cd0..497dbc0 100644 --- a/disagreement/client.py +++ b/disagreement/client.py @@ -529,15 +529,29 @@ class Client: print(f"Message: {message.content}") """ - def decorator( - coro: Callable[..., Awaitable[None]], - ) -> Callable[..., Awaitable[None]]: - if not asyncio.iscoroutinefunction(coro): - raise TypeError("Event registered must be a coroutine function.") - self._event_dispatcher.register(event_name.upper(), coro) - return coro - - return decorator + def decorator( + coro: Callable[..., Awaitable[None]], + ) -> Callable[..., Awaitable[None]]: + if not asyncio.iscoroutinefunction(coro): + raise TypeError("Event registered must be a coroutine function.") + self._event_dispatcher.register(event_name.upper(), coro) + return coro + + 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: """Internal listener to process messages for commands.""" diff --git a/docs/events.md b/docs/events.md index 08df6f5..810944d 100644 --- a/docs/events.md +++ b/docs/events.md @@ -1,7 +1,7 @@ # Events -Disagreement dispatches Gateway events to asynchronous callbacks. Handlers can be registered with `@client.event` or `client.on_event`. -Listeners may be removed later using `EventDispatcher.unregister(event_name, coro)`. +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 `client.remove_listener(event_name, coro)` or `EventDispatcher.unregister(event_name, coro)`. ## Raw Events