Skip to content
This repository has been archived by the owner on Mar 13, 2023. It is now read-only.

feat: add listener shortcut to event objects #611

Merged
merged 1 commit into from
Aug 20, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 28 additions & 1 deletion naff/api/events/internal.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,12 @@ def on_guild_join(event):

"""
import re
from typing import TYPE_CHECKING, Any, Optional
from typing import TYPE_CHECKING, Any, Optional, Callable, Coroutine

from naff.client.const import MISSING
from naff.models.discord.snowflake import to_snowflake
from naff.client.utils.attr_utils import define, field, docs
import naff.models as models

__all__ = (
"BaseEvent",
Expand Down Expand Up @@ -70,6 +71,32 @@ def resolved_name(self) -> str:
name = self.override_name or self.__class__.__name__
return _event_reg.sub("_", name).lower()

@classmethod
def listen(cls, coro: Callable[..., Coroutine], client: "Client") -> "models.Listener":
"""
A shortcut for creating a listener for this event

Args:
coro: The coroutine to call when the event is triggered.
client: The client instance to listen to.


??? Hint "Example Usage:"
```python
class SomeClass:
def __init__(self, bot: Client):
Ready.listen(self.some_func, bot)

async def some_func(self, event):
print(f"{event.resolved_name} triggered")
```
Returns:
A listener object.
"""
listener = models.Listener.create(cls().resolved_name)(coro)
client.add_listener(listener)
return listener


@define(slots=False, kw_only=False)
class GuildEvent:
Expand Down