Skip to content

Commit 2b228a0

Browse files
authored
refactor: move Emoji to own module (#978)
* refactor: separate Emoji to own module * fix imports * rename imports in http * change brackets * ci: pre-commit * fix: fix incorrect role converts in Emoji * ref: remove Role import
1 parent 78c4966 commit 2b228a0

File tree

12 files changed

+138
-122
lines changed

12 files changed

+138
-122
lines changed

interactions/api/http/emoji.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
from typing import List, Optional
22

33
from ...api.cache import Cache
4-
from ...api.models.guild import Emoji, Guild
5-
from ...api.models.misc import Snowflake
4+
from ..models.emoji import Emoji
5+
from ..models.guild import Guild
6+
from ..models.misc import Snowflake
67
from .request import _Request
78
from .route import Route
89

interactions/api/http/invite.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from .request import _Request
55
from .route import Route
66

7-
__all__ = ["InviteRequest"]
7+
__all__ = ("InviteRequest",)
88

99

1010
class InviteRequest:

interactions/api/http/member.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
from typing import List, Optional
22

33
from ...api.cache import Cache
4-
from ...api.models.guild import Guild
5-
from ...api.models.member import Member
6-
from ...api.models.misc import Snowflake
4+
from ..models.guild import Guild
5+
from ..models.member import Member
6+
from ..models.misc import Snowflake
77
from .request import _Request
88
from .route import Route
99

interactions/api/models/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from .attrs_utils import * # noqa: F401 F403
99
from .audit_log import * # noqa: F401 F403
1010
from .channel import * # noqa: F401 F403
11+
from .emoji import * # noqa: F401 F403
1112
from .flags import * # noqa: F401 F403
1213
from .guild import * # noqa: F401 F403
1314
from .gw import * # noqa: F401 F403

interactions/api/models/emoji.py

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
from typing import TYPE_CHECKING, List, Optional, Union
2+
3+
from ..error import LibraryException
4+
from .attrs_utils import ClientSerializerMixin, convert_list, define, field
5+
from .misc import Snowflake
6+
from .user import User
7+
8+
if TYPE_CHECKING:
9+
from ..http import HTTPClient
10+
from .guild import Guild
11+
12+
__all__ = ("Emoji",)
13+
14+
15+
@define()
16+
class Emoji(ClientSerializerMixin):
17+
"""
18+
A class objecting representing an emoji.
19+
20+
:ivar Optional[Snowflake] id?: Emoji id
21+
:ivar Optional[str] name?: Emoji name.
22+
:ivar Optional[List[int]] roles?: Roles allowed to use this emoji
23+
:ivar Optional[User] user?: User that created this emoji
24+
:ivar Optional[bool] require_colons?: Status denoting of this emoji must be wrapped in colons
25+
:ivar Optional[bool] managed?: Status denoting if this emoji is managed (by an integration)
26+
:ivar Optional[bool] animated?: Status denoting if this emoji is animated
27+
:ivar Optional[bool] available?: Status denoting if this emoji can be used. (Can be false via server boosting)
28+
"""
29+
30+
id: Optional[Snowflake] = field(converter=Snowflake, default=None)
31+
name: Optional[str] = field(default=None)
32+
roles: Optional[List[int]] = field(converter=convert_list(int), default=None)
33+
user: Optional[User] = field(converter=User, default=None)
34+
require_colons: Optional[bool] = field(default=None)
35+
managed: Optional[bool] = field(default=None)
36+
animated: Optional[bool] = field(default=None)
37+
available: Optional[bool] = field(default=None)
38+
39+
@classmethod
40+
async def get(
41+
cls,
42+
guild_id: Union[int, Snowflake, "Guild"],
43+
emoji_id: Union[int, Snowflake],
44+
client: "HTTPClient",
45+
) -> "Emoji":
46+
"""
47+
Gets an emoji.
48+
49+
:param guild_id: The id of the guild of the emoji
50+
:type guild_id: Union[int, Snowflake, "Guild"]
51+
:param emoji_id: The id of the emoji
52+
:type emoji_id: Union[int, Snowflake]
53+
:param client: The HTTPClient of your bot. Equals to ``bot._http``
54+
:type client: HTTPClient
55+
:return: The Emoji as object
56+
:rtype: Emoji
57+
"""
58+
59+
_guild_id = int(guild_id) if isinstance(guild_id, (int, Snowflake)) else int(guild_id.id)
60+
61+
res = await client.get_guild_emoji(guild_id=_guild_id, emoji_id=int(emoji_id))
62+
return cls(**res, _client=client)
63+
64+
@classmethod
65+
async def get_all_of_guild(
66+
cls,
67+
guild_id: Union[int, Snowflake, "Guild"],
68+
client: "HTTPClient",
69+
) -> List["Emoji"]:
70+
"""
71+
Gets all emoji of a guild.
72+
73+
:param guild_id: The id of the guild to get the emojis of
74+
:type guild_id: Union[int, Snowflake, "Guild"]
75+
:param client: The HTTPClient of your bot. Equals to ``bot._http``
76+
:type client: HTTPClient
77+
:return: The Emoji as list
78+
:rtype: List[Emoji]
79+
"""
80+
81+
_guild_id = int(guild_id) if isinstance(guild_id, (int, Snowflake)) else int(guild_id.id)
82+
83+
res = await client.get_all_emoji(guild_id=_guild_id)
84+
return [cls(**emoji, _client=client) for emoji in res]
85+
86+
async def delete(
87+
self,
88+
guild_id: Union[int, Snowflake, "Guild"],
89+
reason: Optional[str] = None,
90+
) -> None:
91+
"""
92+
Deletes the emoji.
93+
94+
:param guild_id: The guild id to delete the emoji from
95+
:type guild_id: Union[int, Snowflake, "Guild"]
96+
:param reason?: The reason of the deletion
97+
:type reason?: Optional[str]
98+
"""
99+
if not self._client:
100+
raise LibraryException(code=13)
101+
102+
_guild_id = int(guild_id) if isinstance(guild_id, (int, Snowflake)) else int(guild_id.id)
103+
104+
return await self._client.delete_guild_emoji(
105+
guild_id=_guild_id, emoji_id=int(self.id), reason=reason
106+
)
107+
108+
@property
109+
def url(self) -> str:
110+
"""
111+
Returns the emoji's URL.
112+
113+
:return: URL of the emoji
114+
:rtype: str
115+
"""
116+
url = f"https://cdn.discordapp.com/emojis/{self.id}"
117+
url += ".gif" if self.animated else ".png"
118+
return url

interactions/api/models/guild.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@
1313
)
1414
from .audit_log import AuditLogEvents, AuditLogs
1515
from .channel import Channel, ChannelType, Thread, ThreadMember
16+
from .emoji import Emoji
1617
from .member import Member
17-
from .message import Emoji, Sticker
18+
from .message import Sticker
1819
from .misc import (
1920
AutoModAction,
2021
AutoModTriggerMetadata,

interactions/api/models/gw.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@
1212
field,
1313
)
1414
from .channel import Channel, ThreadMember
15+
from .emoji import Emoji
1516
from .guild import EventMetadata
1617
from .member import Member
17-
from .message import Embed, Emoji, Message, MessageInteraction, Sticker
18+
from .message import Embed, Message, MessageInteraction, Sticker
1819
from .misc import (
1920
AutoModAction,
2021
AutoModTriggerMetadata,

interactions/api/models/message.py

Lines changed: 1 addition & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,15 @@
1515
field,
1616
)
1717
from .channel import Channel
18+
from .emoji import Emoji
1819
from .member import Member
1920
from .misc import File, IDMixin, Snowflake
20-
from .role import Role
2121
from .team import Application
2222
from .user import User
2323

2424
if TYPE_CHECKING:
2525
from ...client.models.component import ActionRow, Button, Component, SelectMenu
2626
from ..http import HTTPClient
27-
from .guild import Guild
2827

2928
__all__ = (
3029
"MessageType",
@@ -39,7 +38,6 @@
3938
"EmbedImageStruct",
4039
"EmbedField",
4140
"Attachment",
42-
"Emoji",
4341
"EmbedFooter",
4442
"ReactionObject",
4543
"PartialSticker",
@@ -188,112 +186,6 @@ class ChannelMention(DictSerializerMixin, IDMixin):
188186
name: str = field()
189187

190188

191-
@define()
192-
class Emoji(ClientSerializerMixin):
193-
"""
194-
A class objecting representing an emoji.
195-
196-
:ivar Optional[Snowflake] id?: Emoji id
197-
:ivar Optional[str] name?: Emoji name.
198-
:ivar Optional[List[Role]] roles?: Roles allowed to use this emoji
199-
:ivar Optional[User] user?: User that created this emoji
200-
:ivar Optional[bool] require_colons?: Status denoting of this emoji must be wrapped in colons
201-
:ivar Optional[bool] managed?: Status denoting if this emoji is managed (by an integration)
202-
:ivar Optional[bool] animated?: Status denoting if this emoji is animated
203-
:ivar Optional[bool] available?: Status denoting if this emoji can be used. (Can be false via server boosting)
204-
"""
205-
206-
id: Optional[Snowflake] = field(converter=Snowflake, default=None)
207-
name: Optional[str] = field(default=None)
208-
roles: Optional[List[Role]] = field(converter=convert_list(Role), default=None)
209-
user: Optional[User] = field(converter=User, default=None)
210-
require_colons: Optional[bool] = field(default=None)
211-
managed: Optional[bool] = field(default=None)
212-
animated: Optional[bool] = field(default=None)
213-
available: Optional[bool] = field(default=None)
214-
215-
@classmethod
216-
async def get(
217-
cls,
218-
guild_id: Union[int, Snowflake, "Guild"],
219-
emoji_id: Union[int, Snowflake],
220-
client: "HTTPClient",
221-
) -> "Emoji":
222-
"""
223-
Gets an emoji.
224-
225-
:param guild_id: The id of the guild of the emoji
226-
:type guild_id: Union[int, Snowflake, "Guild"]
227-
:param emoji_id: The id of the emoji
228-
:type emoji_id: Union[int, Snowflake]
229-
:param client: The HTTPClient of your bot. Equals to ``bot._http``
230-
:type client: HTTPClient
231-
:return: The Emoji as object
232-
:rtype: Emoji
233-
"""
234-
235-
_guild_id = int(guild_id) if isinstance(guild_id, (int, Snowflake)) else int(guild_id.id)
236-
237-
res = await client.get_guild_emoji(guild_id=_guild_id, emoji_id=int(emoji_id))
238-
return cls(**res, _client=client)
239-
240-
@classmethod
241-
async def get_all_of_guild(
242-
cls,
243-
guild_id: Union[int, Snowflake, "Guild"],
244-
client: "HTTPClient",
245-
) -> List["Emoji"]:
246-
"""
247-
Gets all emoji of a guild.
248-
249-
:param guild_id: The id of the guild to get the emojis of
250-
:type guild_id: Union[int, Snowflake, "Guild"]
251-
:param client: The HTTPClient of your bot. Equals to ``bot._http``
252-
:type client: HTTPClient
253-
:return: The Emoji as list
254-
:rtype: List[Emoji]
255-
"""
256-
257-
_guild_id = int(guild_id) if isinstance(guild_id, (int, Snowflake)) else int(guild_id.id)
258-
259-
res = await client.get_all_emoji(guild_id=_guild_id)
260-
return [cls(**emoji, _client=client) for emoji in res]
261-
262-
async def delete(
263-
self,
264-
guild_id: Union[int, Snowflake, "Guild"],
265-
reason: Optional[str] = None,
266-
) -> None:
267-
"""
268-
Deletes the emoji.
269-
270-
:param guild_id: The guild id to delete the emoji from
271-
:type guild_id: Union[int, Snowflake, "Guild"]
272-
:param reason?: The reason of the deletion
273-
:type reason?: Optional[str]
274-
"""
275-
if not self._client:
276-
raise LibraryException(code=13)
277-
278-
_guild_id = int(guild_id) if isinstance(guild_id, (int, Snowflake)) else int(guild_id.id)
279-
280-
return await self._client.delete_guild_emoji(
281-
guild_id=_guild_id, emoji_id=int(self.id), reason=reason
282-
)
283-
284-
@property
285-
def url(self) -> str:
286-
"""
287-
Returns the emoji's URL.
288-
289-
:return: URL of the emoji
290-
:rtype: str
291-
"""
292-
url = f"https://cdn.discordapp.com/emojis/{self.id}"
293-
url += ".gif" if self.animated else ".png"
294-
return url
295-
296-
297189
@define()
298190
class EmbedImageStruct(DictSerializerMixin):
299191
"""

interactions/api/models/presence.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
from enum import IntEnum
33
from typing import Any, List, Optional
44

5-
from ..models import StatusType
6-
from ..models.message import Emoji
75
from .attrs_utils import DictSerializerMixin, convert_list, define, field
6+
from .emoji import Emoji
7+
from .flags import StatusType
88
from .misc import Snowflake
99

1010
__all__ = (

interactions/client/get.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@
1414

1515
from ..api.error import LibraryException
1616
from ..api.http.client import HTTPClient
17+
from ..api.models.emoji import Emoji
1718
from ..api.models.guild import Guild
1819
from ..api.models.member import Member
19-
from ..api.models.message import Emoji, Message
20+
from ..api.models.message import Message
2021
from ..api.models.misc import Snowflake
2122
from ..api.models.role import Role
2223
from .bot import Client

0 commit comments

Comments
 (0)