diff --git a/docs/migration.rst b/docs/migration.rst index 8dbc0a987..09d374869 100644 --- a/docs/migration.rst +++ b/docs/migration.rst @@ -232,3 +232,7 @@ your option name! Example: ~~~~~~~~~~~~~~~ The ``Color`` class was refactored into an enum. You may now access its contents via ``interactions.Color.COLOR``. +Due to `complaints `_ on str and repr magic methods, we have +decided to `remove all implementations of them in the model classes `_. +This affects the way you can send emojis. You can no longer use ``str(emoji)`` or ``f"{emoji}"``. +Instead you will have to use ``emoji.format`` or ``f"{emoji.format}"`` to transform an emoji into a send-able form. diff --git a/interactions/api/models/channel.py b/interactions/api/models/channel.py index 39a967238..adb457239 100644 --- a/interactions/api/models/channel.py +++ b/interactions/api/models/channel.py @@ -478,9 +478,6 @@ def __attrs_post_init__(self): # sourcery skip: last-if-guard if not self.recipients: self.recipients = channel.recipients - def __repr__(self) -> str: - return self.name - @property def typing(self) -> Union[Awaitable, ContextManager]: """ diff --git a/interactions/api/models/emoji.py b/interactions/api/models/emoji.py index 317a80b19..0bcfce1b8 100644 --- a/interactions/api/models/emoji.py +++ b/interactions/api/models/emoji.py @@ -12,7 +12,7 @@ __all__ = ("Emoji",) -@define(repr=False) +@define() class Emoji(ClientSerializerMixin): """ A class objecting representing an emoji. @@ -36,10 +36,17 @@ class Emoji(ClientSerializerMixin): animated: Optional[bool] = field(default=None) available: Optional[bool] = field(default=None) - def __repr__(self): + @property + def format(self) -> str: + """ + Formats the emoji into a send-able form. + :rtype: str + """ return ( f"<{'a' if self.animated else ''}:{self.name}:{self.id}>" if self.id is not None + else f":{self.name}:" + if self.require_colons else self.name ) diff --git a/interactions/api/models/guild.py b/interactions/api/models/guild.py index 5b0b65e67..d5cfe976e 100644 --- a/interactions/api/models/guild.py +++ b/interactions/api/models/guild.py @@ -482,9 +482,6 @@ def __attrs_post_init__(self): # sourcery skip: last-if-guard if not member._extras.get("guild_id"): member._extras["guild_id"] = self.id - def __repr__(self) -> str: - return self.name - async def ban( self, member_id: Union[int, Member, Snowflake], diff --git a/interactions/api/models/member.py b/interactions/api/models/member.py index fe27ce636..822027cbd 100644 --- a/interactions/api/models/member.py +++ b/interactions/api/models/member.py @@ -66,9 +66,6 @@ class Member(ClientSerializerMixin, IDMixin): ) # TODO: Investigate what this is for when documented by Discord. flags: int = field(repr=False) # TODO: Investigate what this is for when documented by Discord. - def __str__(self) -> str: - return self.name or "" - def __getattr__(self, name): # Forward any attributes the user has to make it easier for devs try: diff --git a/interactions/api/models/user.py b/interactions/api/models/user.py index 97a5b87cf..f39f1eb82 100644 --- a/interactions/api/models/user.py +++ b/interactions/api/models/user.py @@ -55,9 +55,6 @@ class User(ClientSerializerMixin, IDMixin): public_flags: Optional[UserFlags] = field(converter=UserFlags, default=None, repr=False) bio: Optional[str] = field(default=None) - def __str__(self) -> str: - return self.username - def has_public_flag(self, flag: Union[UserFlags, int]) -> bool: if self.public_flags == 0 or self.public_flags is None: return False