diff --git a/mipac/models/emoji.py b/mipac/models/emoji.py index 0ba1606..45a69d9 100644 --- a/mipac/models/emoji.py +++ b/mipac/models/emoji.py @@ -3,7 +3,7 @@ from __future__ import annotations from typing import TYPE_CHECKING from mipac.models.lite.emoji import PartialCustomEmoji -from mipac.types.emoji import ICustomEmoji +from mipac.types.emoji import ICustomEmoji, IEmojiDetailed, IEmojiSimple if TYPE_CHECKING: from mipac.client import ClientManager @@ -41,3 +41,87 @@ class CustomEmoji(PartialCustomEmoji): def __ne__(self, __value: object) -> bool: return not self.__eq__(__value) + + +class EmojiSimple: + def __init__(self, raw_emoji_simple: IEmojiSimple, *, client: ClientManager): + self.__raw_emoji_simple: IEmojiSimple = raw_emoji_simple + self.__client: ClientManager = client + + @property + def aliaces(self) -> list[str]: + return self.__raw_emoji_simple["aliaces"] + + @property + def name(self) -> str: + return self.__raw_emoji_simple["name"] + + @property + def category(self) -> str | None: + return self.__raw_emoji_simple["category"] + + @property + def url(self) -> str: + return self.__raw_emoji_simple["url"] + + @property + def is_sensitive(self) -> bool: + return self.__raw_emoji_simple.get("is_sensitive", False) + + @property + def role_ids_that_can_be_used_this_emoji_as_reaction(self) -> list[str]: + return self.__raw_emoji_simple.get("role_ids_that_can_be_used_this_emoji_as_reaction", []) + + def __eq__(self, __value: object) -> bool: + return isinstance(__value, EmojiSimple) and self.name == __value.name + + def __ne__(self, __value: object) -> bool: + return not self.__eq__(__value) + + +class EmojiDetailed: + def __init__(self, raw_emoji_detailed: IEmojiDetailed, *, client: ClientManager): + self.__raw_emoji_detailed: IEmojiDetailed = raw_emoji_detailed + self.__client: ClientManager = client + + @property + def id(self) -> str: + return self.__raw_emoji_detailed["id"] + + @property + def aliaces(self) -> list[str]: + return self.__raw_emoji_detailed["aliaces"] + + @property + def name(self) -> str: + return self.__raw_emoji_detailed["name"] + + @property + def category(self) -> str | None: + return self.__raw_emoji_detailed["category"] + + @property + def host(self) -> str | None: + return self.__raw_emoji_detailed["host"] + + @property + def url(self) -> str: + return self.__raw_emoji_detailed["url"] + + @property + def is_sensitive(self) -> bool: + return self.__raw_emoji_detailed["is_sensitive"] + + @property + def local_only(self) -> bool: + return self.__raw_emoji_detailed["local_only"] + + @property + def role_ids_that_can_be_used_this_emoji_as_reaction(self) -> list[str]: + return self.__raw_emoji_detailed["role_ids_that_can_be_used_this_emoji_as_reaction"] + + def __eq__(self, __value: object) -> bool: + return isinstance(__value, EmojiDetailed) and self.id == __value.id + + def __ne__(self, __value: object) -> bool: + return not self.__eq__(__value) diff --git a/mipac/types/emoji.py b/mipac/types/emoji.py index 01f6ddf..ee50f81 100644 --- a/mipac/types/emoji.py +++ b/mipac/types/emoji.py @@ -1,4 +1,4 @@ -from typing import Optional, TypedDict +from typing import NotRequired, Optional, TypedDict __all__ = ("EmojiPayload", "ICustomEmojiLite", "ICustomEmoji") @@ -27,3 +27,23 @@ class EmojiPayload(TypedDict): host: str | None url: str | None license: str | None # v13 only + +class IEmojiSimple(TypedDict): + aliaces: list[str] + name: str + category: str | None + url: str + is_sensitive: NotRequired[bool] + role_ids_that_can_be_used_this_emoji_as_reaction: NotRequired[list[str]] + +class IEmojiDetailed(TypedDict): + id: str + aliaces: list[str] + name: str + category: str | None + host: str | None + url: str + license: str | None + is_sensitive: bool + local_only: bool + role_ids_that_can_be_used_this_emoji_as_reaction: list[str] \ No newline at end of file