From b18b1843baf5493f5d80e2cf5e3348c2312e66e7 Mon Sep 17 00:00:00 2001 From: Catalyst4 <84055084+Catalyst4222@users.noreply.github.com> Date: Sun, 26 Jun 2022 00:34:48 -0400 Subject: [PATCH] feat: create and implement IDMixin to compare/hash models that have ids --- interactions/api/models/channel.py | 4 ++-- interactions/api/models/channel.pyi | 8 +++++--- interactions/api/models/guild.py | 13 ++++++------ interactions/api/models/guild.pyi | 23 +++++++++++++-------- interactions/api/models/gw.py | 11 +++++----- interactions/api/models/gw.pyi | 20 +++++++++++-------- interactions/api/models/member.py | 4 ++-- interactions/api/models/member.pyi | 9 +++++---- interactions/api/models/message.py | 14 ++++++------- interactions/api/models/message.pyi | 31 +++++++++++++++++++---------- interactions/api/models/misc.py | 19 ++++++++++++++++++ interactions/api/models/misc.pyi | 22 ++++++++++++++++++-- interactions/api/models/role.py | 4 ++-- interactions/api/models/role.pyi | 6 ++++-- interactions/api/models/team.py | 6 +++--- interactions/api/models/team.pyi | 9 ++++++--- interactions/api/models/user.py | 4 ++-- interactions/api/models/user.pyi | 6 +++--- interactions/api/models/webhook.py | 4 ++-- interactions/api/models/webhook.pyi | 12 ++++++----- 20 files changed, 149 insertions(+), 80 deletions(-) diff --git a/interactions/api/models/channel.py b/interactions/api/models/channel.py index b323f6401..31564bfba 100644 --- a/interactions/api/models/channel.py +++ b/interactions/api/models/channel.py @@ -11,7 +11,7 @@ define, field, ) -from .misc import File, Overwrite, Snowflake +from .misc import File, IDMixin, Overwrite, Snowflake from .user import User from .webhook import Webhook @@ -88,7 +88,7 @@ class ThreadMember(ClientSerializerMixin): @define() -class Channel(ClientSerializerMixin): +class Channel(ClientSerializerMixin, IDMixin): """ A class object representing all types of channels. diff --git a/interactions/api/models/channel.pyi b/interactions/api/models/channel.pyi index 4fc90e99f..7761f6b0f 100644 --- a/interactions/api/models/channel.pyi +++ b/interactions/api/models/channel.pyi @@ -2,13 +2,14 @@ from datetime import datetime from enum import IntEnum from typing import Any, Callable, List, Optional, Union -from ... import ActionRow, Button, SelectMenu from .attrs_utils import ClientSerializerMixin, define from .guild import Invite, InviteTargetType from .message import Embed, Message, MessageInteraction -from .misc import File, Overwrite, Snowflake +from .misc import File, IDMixin, Overwrite, Snowflake from .user import User from .webhook import Webhook +from ... import ActionRow, Button, SelectMenu + class ChannelType(IntEnum): GUILD_TEXT: int @@ -40,8 +41,9 @@ class ThreadMember(ClientSerializerMixin): muted: bool mute_config: Optional[Any] + @define() -class Channel(ClientSerializerMixin): +class Channel(ClientSerializerMixin, IDMixin): type: ChannelType id: Snowflake guild_id: Optional[Snowflake] diff --git a/interactions/api/models/guild.py b/interactions/api/models/guild.py index 8dcbc0bc9..87341058d 100644 --- a/interactions/api/models/guild.py +++ b/interactions/api/models/guild.py @@ -18,6 +18,7 @@ AutoModAction, AutoModTriggerMetadata, AutoModTriggerType, + IDMixin, Image, Overwrite, Snowflake, @@ -164,7 +165,7 @@ class WelcomeScreen(DictSerializerMixin): @define() -class StageInstance(DictSerializerMixin): +class StageInstance(DictSerializerMixin, IDMixin): """ A class object representing an instance of a stage channel in a guild. @@ -185,7 +186,7 @@ class StageInstance(DictSerializerMixin): @define() -class UnavailableGuild(DictSerializerMixin): +class UnavailableGuild(DictSerializerMixin, IDMixin): """ A class object representing how a guild that is unavailable. @@ -204,7 +205,7 @@ class UnavailableGuild(DictSerializerMixin): @define() -class Guild(ClientSerializerMixin): +class Guild(ClientSerializerMixin, IDMixin): """ A class object representing how a guild is registered. @@ -2272,7 +2273,7 @@ def discovery_splash_url(self) -> Optional[str]: @define() -class GuildPreview(DictSerializerMixin): +class GuildPreview(DictSerializerMixin, IDMixin): """ A class object representing the preview of a guild. @@ -2301,7 +2302,7 @@ class GuildPreview(DictSerializerMixin): @define() -class Integration(DictSerializerMixin): +class Integration(DictSerializerMixin, IDMixin): """ A class object representing an integration in a guild. @@ -2382,7 +2383,7 @@ class EventMetadata(DictSerializerMixin): @define() -class ScheduledEvents(DictSerializerMixin): +class ScheduledEvents(DictSerializerMixin, IDMixin): """ A class object representing the scheduled events of a guild. diff --git a/interactions/api/models/guild.pyi b/interactions/api/models/guild.pyi index a61a2835c..86f389568 100644 --- a/interactions/api/models/guild.pyi +++ b/interactions/api/models/guild.pyi @@ -2,18 +2,19 @@ from datetime import datetime from enum import Enum, IntEnum from typing import Any, Dict, List, Optional, Union -from .attrs_utils import ClientSerializerMixin, DictSerializerMixin, define, MISSING +from .attrs_utils import ClientSerializerMixin, DictSerializerMixin, MISSING, define from .channel import Channel, ChannelType, Thread from .gw import AutoModerationRule from .member import Member from .message import Emoji, Sticker -from .misc import Image, Overwrite, Snowflake, AutoModTriggerType, AutoModAction, AutoModTriggerMetadata +from .misc import AutoModAction, AutoModTriggerMetadata, AutoModTriggerType, IDMixin, Image, Overwrite, Snowflake from .presence import PresenceActivity from .role import Role from .team import Application from .user import User from .webhook import Webhook + class VerificationLevel(IntEnum): NONE: int LOW: int @@ -80,8 +81,9 @@ class WelcomeScreen(DictSerializerMixin): description: Optional[str] welcome_channels: Optional[List[WelcomeChannels]] + @define() -class StageInstance(DictSerializerMixin): +class StageInstance(DictSerializerMixin, IDMixin): id: Snowflake guild_id: Snowflake channel_id: Snowflake @@ -89,13 +91,15 @@ class StageInstance(DictSerializerMixin): privacy_level: int discoverable_disabled: bool + @define() -class UnavailableGuild(DictSerializerMixin): +class UnavailableGuild(DictSerializerMixin, IDMixin): id: Snowflake unavailable: bool + @define() -class Guild(ClientSerializerMixin): +class Guild(ClientSerializerMixin, IDMixin): id: Snowflake name: str icon: Optional[str] @@ -430,8 +434,9 @@ class Guild(ClientSerializerMixin): @property def discovery_splash_url(self) -> Optional[str]: ... + @define() -class GuildPreview(DictSerializerMixin): +class GuildPreview(DictSerializerMixin, IDMixin): id: Snowflake emojis: Optional[List[Emoji]] name: str @@ -443,8 +448,9 @@ class GuildPreview(DictSerializerMixin): approximate_presence_count: int description: Optional[str] + @define() -class Integration(DictSerializerMixin): +class Integration(DictSerializerMixin, IDMixin): id: Snowflake name: str type: str @@ -499,8 +505,9 @@ class GuildTemplate(DictSerializerMixin): class EventMetadata(DictSerializerMixin): location: Optional[str] + @define() -class ScheduledEvents(DictSerializerMixin): +class ScheduledEvents(DictSerializerMixin, IDMixin): id: Snowflake guild_id: Snowflake channel_id: Optional[Snowflake] diff --git a/interactions/api/models/gw.py b/interactions/api/models/gw.py index 27550adbe..59d33c822 100644 --- a/interactions/api/models/gw.py +++ b/interactions/api/models/gw.py @@ -21,6 +21,7 @@ AutoModTriggerType, ClientStatus, File, + IDMixin, Snowflake, ) from .presence import PresenceActivity @@ -84,7 +85,7 @@ class AutoModerationAction(DictSerializerMixin): @define() -class AutoModerationRule(DictSerializerMixin): +class AutoModerationRule(DictSerializerMixin, IDMixin): """ A class object representing the gateway events ``AUTO_MODERATION_RULE_CREATE``, ``AUTO_MODERATION_RULE_UPDATE``, and ``AUTO_MODERATION_RULE_DELETE`` @@ -121,7 +122,7 @@ class AutoModerationRule(DictSerializerMixin): @define() -class ApplicationCommandPermissions(ClientSerializerMixin): +class ApplicationCommandPermissions(ClientSerializerMixin, IDMixin): """ A class object representing the gateway event ``APPLICATION_COMMAND_PERMISSIONS_UPDATE``. @@ -590,7 +591,7 @@ class GuildStickers(DictSerializerMixin): @define() -class GuildScheduledEvent(ClientSerializerMixin): +class GuildScheduledEvent(ClientSerializerMixin, IDMixin): """ A class object representing gateway events ``GUILD_SCHEDULED_EVENT_CREATE``, ``GUILD_SCHEDULED_EVENT_UPDATE``, ``GUILD_SCHEDULED_EVENT_DELETE``. @@ -650,7 +651,7 @@ class GuildScheduledEventUser(DictSerializerMixin): @define() -class Integration(DictSerializerMixin): +class Integration(DictSerializerMixin, IDMixin): """ A class object representing the gateway events ``INTEGRATION_CREATE``, ``INTEGRATION_UPDATE`` and ``INTEGRATION_DELETE``. @@ -794,7 +795,7 @@ class ThreadList(DictSerializerMixin): @define() -class ThreadMembers(DictSerializerMixin): +class ThreadMembers(DictSerializerMixin, IDMixin): """ A class object representing the gateway event ``THREAD_MEMBERS_UPDATE``. diff --git a/interactions/api/models/gw.pyi b/interactions/api/models/gw.pyi index b3765fcf5..500e0ad08 100644 --- a/interactions/api/models/gw.pyi +++ b/interactions/api/models/gw.pyi @@ -1,17 +1,17 @@ from datetime import datetime -from typing import Any, Dict, List, Optional, Union +from typing import Any, List, Optional, Union -from ...client.models.component import ActionRow, Button, SelectMenu from .attrs_utils import ClientSerializerMixin, DictSerializerMixin, define from .channel import Channel, ThreadMember from .guild import EventMetadata from .member import Member from .message import Embed, Emoji, Message, MessageInteraction, Sticker -from .misc import AutoModAction, ClientStatus, File, Snowflake, AutoModTriggerMetadata +from .misc import AutoModAction, AutoModTriggerMetadata, ClientStatus, File, IDMixin, Snowflake from .presence import PresenceActivity from .role import Role from .team import Application from .user import User +from ...client.models.component import ActionRow, Button, SelectMenu class AutoModerationAction(DictSerializerMixin): @@ -26,7 +26,8 @@ class AutoModerationAction(DictSerializerMixin): matched_keyword: Optional[str] matched_content: Optional[str] -class AutoModerationRule(DictSerializerMixin): + +class AutoModerationRule(DictSerializerMixin, IDMixin): _json: dict id: Snowflake guild_id: Snowflake @@ -42,7 +43,7 @@ class AutoModerationRule(DictSerializerMixin): @define() -class ApplicationCommandPermissions(ClientSerializerMixin): +class ApplicationCommandPermissions(ClientSerializerMixin, IDMixin): application_id: Snowflake guild_id: Snowflake id: Snowflake @@ -149,8 +150,9 @@ class GuildStickers(DictSerializerMixin): guild_id: Snowflake stickers: List[Sticker] + @define() -class GuildScheduledEvent(ClientSerializerMixin): +class GuildScheduledEvent(ClientSerializerMixin, IDMixin): id: Snowflake guild_id: Snowflake channel_id: Optional[Snowflake] @@ -174,8 +176,9 @@ class GuildScheduledEventUser(DictSerializerMixin): user_id: Snowflake guild_id: Snowflake + @define() -class Integration(DictSerializerMixin): +class Integration(DictSerializerMixin, IDMixin): id: Snowflake name: str type: str @@ -220,8 +223,9 @@ class ThreadList(DictSerializerMixin): threads: List[Channel] members: List[ThreadMember] + @define() -class ThreadMembers(DictSerializerMixin): +class ThreadMembers(DictSerializerMixin, IDMixin): id: Snowflake guild_id: Snowflake member_count: int diff --git a/interactions/api/models/member.py b/interactions/api/models/member.py index 4f2874a8b..6435389c6 100644 --- a/interactions/api/models/member.py +++ b/interactions/api/models/member.py @@ -5,7 +5,7 @@ from .attrs_utils import MISSING, ClientSerializerMixin, convert_int, define, field from .channel import Channel from .flags import Permissions -from .misc import File, Snowflake +from .misc import File, IDMixin, Snowflake from .role import Role from .user import User @@ -13,7 +13,7 @@ @define() -class Member(ClientSerializerMixin): +class Member(ClientSerializerMixin, IDMixin): """ A class object representing the user of a guild, known as a "member." diff --git a/interactions/api/models/member.pyi b/interactions/api/models/member.pyi index eda9ffebb..6bed9d61b 100644 --- a/interactions/api/models/member.pyi +++ b/interactions/api/models/member.pyi @@ -1,17 +1,18 @@ from datetime import datetime from typing import Any, List, Optional, Union -from ... import ActionRow, Button, SelectMenu from .attrs_utils import ClientSerializerMixin, define +from .channel import Channel from .flags import Permissions as Permissions from .message import Embed, Message, MessageInteraction -from .misc import File, Snowflake +from .misc import File, IDMixin, Snowflake from .role import Role as Role from .user import User as User -from .channel import Channel +from ... import ActionRow, Button, SelectMenu + @define() -class Member(ClientSerializerMixin): +class Member(ClientSerializerMixin, IDMixin): user: Optional[User] nick: Optional[str] roles: List[int] diff --git a/interactions/api/models/message.py b/interactions/api/models/message.py index 3a5e929c9..0f4f47e19 100644 --- a/interactions/api/models/message.py +++ b/interactions/api/models/message.py @@ -15,7 +15,7 @@ ) from .channel import Channel from .member import Member -from .misc import File, Snowflake +from .misc import File, IDMixin, Snowflake from .role import Role from .team import Application from .user import User @@ -113,7 +113,7 @@ class MessageReference(DictSerializerMixin): @define() -class Attachment(ClientSerializerMixin): +class Attachment(ClientSerializerMixin, IDMixin): """ A class object representing an attachment in a message. @@ -149,7 +149,7 @@ class Attachment(ClientSerializerMixin): @define() -class MessageInteraction(ClientSerializerMixin): +class MessageInteraction(ClientSerializerMixin, IDMixin): """ A class object that resembles the interaction used to generate the associated message. @@ -168,7 +168,7 @@ class MessageInteraction(ClientSerializerMixin): @define() -class ChannelMention(DictSerializerMixin): +class ChannelMention(DictSerializerMixin, IDMixin): """ A class object that resembles the mention of a channel in a guild. @@ -737,7 +737,7 @@ def set_thumbnail( @define() -class PartialSticker(DictSerializerMixin): +class PartialSticker(DictSerializerMixin, IDMixin): """ Partial object for a Sticker. @@ -752,7 +752,7 @@ class PartialSticker(DictSerializerMixin): @define() -class Sticker(PartialSticker): +class Sticker(PartialSticker, IDMixin): """ A class object representing a full sticker apart from a partial. @@ -799,7 +799,7 @@ class ReactionObject(DictSerializerMixin): @define() -class Message(ClientSerializerMixin): +class Message(ClientSerializerMixin, IDMixin): """ A class object representing a message. diff --git a/interactions/api/models/message.pyi b/interactions/api/models/message.pyi index 1c1117def..9e2558bfe 100644 --- a/interactions/api/models/message.pyi +++ b/interactions/api/models/message.pyi @@ -2,16 +2,17 @@ from datetime import datetime from enum import IntEnum from typing import List, Optional, Union -from ... import ActionRow, Button, Component, SelectMenu -from ..http.client import HTTPClient -from .attrs_utils import MISSING, ClientSerializerMixin, DictSerializerMixin, define +from .attrs_utils import ClientSerializerMixin, DictSerializerMixin, MISSING, define from .channel import Channel as Channel from .guild import Guild from .member import Member as Member -from .misc import File, Snowflake +from .misc import File, IDMixin, Snowflake from .role import Role as Role from .team import Application as Application from .user import User as User +from ..http.client import HTTPClient +from ... import ActionRow, Button, Component, SelectMenu + class MessageType(IntEnum): DEFAULT: int @@ -50,8 +51,9 @@ class MessageReference(DictSerializerMixin): guild_id: Optional[Snowflake] fail_if_not_exists: Optional[bool] + @define() -class Attachment(DictSerializerMixin): +class Attachment(DictSerializerMixin, IDMixin): id: Snowflake filename: str content_type: Optional[str] @@ -62,22 +64,25 @@ class Attachment(DictSerializerMixin): width: Optional[int] ephemeral: Optional[bool] + @define() -class MessageInteraction(ClientSerializerMixin): +class MessageInteraction(ClientSerializerMixin, IDMixin): id: Snowflake type: int name: str user: User + @define() -class ChannelMention(DictSerializerMixin): +class ChannelMention(DictSerializerMixin, IDMixin): id: Snowflake guild_id: Snowflake type: int name: str + @define() -class Emoji(ClientSerializerMixin): +class Emoji(ClientSerializerMixin, IDMixin): id: Optional[Snowflake] = None name: Optional[str] = None roles: Optional[List[Role]] = None @@ -86,6 +91,7 @@ class Emoji(ClientSerializerMixin): managed: Optional[bool] = None animated: Optional[bool] = None available: Optional[bool] = None + @classmethod async def get( cls, @@ -193,14 +199,16 @@ class Embed(DictSerializerMixin): width: Optional[int] = ..., ) -> None: ... + @define() -class PartialSticker(DictSerializerMixin): +class PartialSticker(DictSerializerMixin, IDMixin): id: Snowflake name: str format_type: int + @define() -class Sticker(PartialSticker): +class Sticker(PartialSticker, IDMixin): id: Snowflake pack_id: Optional[Snowflake] name: str @@ -220,8 +228,9 @@ class ReactionObject(DictSerializerMixin): me: bool emoji: Emoji + @define() -class Message(ClientSerializerMixin): +class Message(ClientSerializerMixin, IDMixin): id: Snowflake channel_id: Snowflake guild_id: Optional[Snowflake] diff --git a/interactions/api/models/misc.py b/interactions/api/models/misc.py index d703a3557..f2d7c2062 100644 --- a/interactions/api/models/misc.py +++ b/interactions/api/models/misc.py @@ -27,6 +27,7 @@ "Snowflake", "Color", "ClientStatus", + "IDMixin", "Image", "File", "Overwrite", @@ -162,6 +163,24 @@ def __repr__(self): return f"{self.__class__.__name__}({self._snowflake})" +class IDMixin: + """A mixin to implement equality and hashing for models that have an id.""" + + id: Snowflake + + def __eq__(self, other): + return ( + self.id is not None + and isinstance( + other, IDMixin + ) # different classes can't share ids, covers cases like Member/User + and self.id == other.id + ) + + def __hash__(self): + return hash(self.id) + + @define() class AutoModMetaData(DictSerializerMixin): """ diff --git a/interactions/api/models/misc.pyi b/interactions/api/models/misc.pyi index 7954bcf59..b0dd852b6 100644 --- a/interactions/api/models/misc.pyi +++ b/interactions/api/models/misc.pyi @@ -1,8 +1,8 @@ import datetime +from enum import IntEnum from io import FileIO, IOBase from logging import Logger -from typing import Optional, Union, List -from enum import IntEnum +from typing import List, Optional, Union from interactions.api.models.attrs_utils import DictSerializerMixin, define @@ -55,22 +55,40 @@ class Snowflake: def increment(self) -> int: ... @property def worker_id(self) -> int: ... + @property def process_id(self) -> int: ... + @property def epoch(self) -> float: ... + @property def timestamp(self) -> datetime.datetime: ... + def __hash__(self): ... + def __eq__(self, other): ... + +class IDMixin: + """A mixin to implement equality and hashing for models that have an id.""" + id: Snowflake + + def __eq__(self, other): ... + + def __hash__(self): ... + + class Color: @property def blurple(self) -> hex: ... + @property def green(self) -> hex: ... + @property def yellow(self) -> hex: ... + @property def fuchsia(self) -> hex: ... @property diff --git a/interactions/api/models/role.py b/interactions/api/models/role.py index 8d54a5faf..5626d8fc7 100644 --- a/interactions/api/models/role.py +++ b/interactions/api/models/role.py @@ -2,7 +2,7 @@ from ..error import LibraryException from .attrs_utils import MISSING, ClientSerializerMixin, DictSerializerMixin, define, field -from .misc import Image, Snowflake +from .misc import IDMixin, Image, Snowflake __all__ = ( "Role", @@ -28,7 +28,7 @@ class RoleTags(DictSerializerMixin): @define() -class Role(ClientSerializerMixin): +class Role(ClientSerializerMixin, IDMixin): """ A class object representing a role. diff --git a/interactions/api/models/role.pyi b/interactions/api/models/role.pyi index 96edef78b..541fb3df2 100644 --- a/interactions/api/models/role.pyi +++ b/interactions/api/models/role.pyi @@ -1,7 +1,8 @@ from typing import Any, List, Optional, Union from .attrs_utils import ClientSerializerMixin, DictSerializerMixin, define -from .misc import Snowflake +from .misc import IDMixin, Snowflake + @define() class RoleTags(DictSerializerMixin): @@ -9,8 +10,9 @@ class RoleTags(DictSerializerMixin): integration_id: Optional[Snowflake] premium_subscriber: Optional[Any] + @define() -class Role(ClientSerializerMixin): +class Role(ClientSerializerMixin, IDMixin): id: Snowflake name: str color: int diff --git a/interactions/api/models/team.py b/interactions/api/models/team.py index 9184d0e81..74e8765e0 100644 --- a/interactions/api/models/team.py +++ b/interactions/api/models/team.py @@ -2,7 +2,7 @@ from .attrs_utils import ClientSerializerMixin, convert_list, define, field from .flags import AppFlags -from .misc import Snowflake +from .misc import IDMixin, Snowflake from .user import User __all__ = ( @@ -34,7 +34,7 @@ class TeamMember(ClientSerializerMixin): @define() -class Team(ClientSerializerMixin): +class Team(ClientSerializerMixin, IDMixin): """ A class object representing a team. @@ -53,7 +53,7 @@ class Team(ClientSerializerMixin): @define() -class Application(ClientSerializerMixin): +class Application(ClientSerializerMixin, IDMixin): """ A class object representing an application. diff --git a/interactions/api/models/team.pyi b/interactions/api/models/team.pyi index 0eb3ca790..46cc8668f 100644 --- a/interactions/api/models/team.pyi +++ b/interactions/api/models/team.pyi @@ -2,9 +2,10 @@ from typing import Any, List, Optional from .attrs_utils import ClientSerializerMixin, define from .flags import AppFlags as AppFlags -from .misc import Snowflake +from .misc import IDMixin, Snowflake from .user import User as User + @define() class TeamMember(ClientSerializerMixin): membership_state: int @@ -12,16 +13,18 @@ class TeamMember(ClientSerializerMixin): team_id: Snowflake user: User + @define() -class Team(ClientSerializerMixin): +class Team(ClientSerializerMixin, IDMixin): icon: Optional[str] id: Snowflake members: List[TeamMember] name: str owner_user_id: int + @define() -class Application(ClientSerializerMixin): +class Application(ClientSerializerMixin, IDMixin): id: Snowflake name: str icon: Optional[str] diff --git a/interactions/api/models/user.py b/interactions/api/models/user.py index 292f2b133..84e608ded 100644 --- a/interactions/api/models/user.py +++ b/interactions/api/models/user.py @@ -2,13 +2,13 @@ from .attrs_utils import ClientSerializerMixin, define, field from .flags import UserFlags -from .misc import Snowflake +from .misc import IDMixin, Snowflake __all__ = ("User",) @define() -class User(ClientSerializerMixin): +class User(ClientSerializerMixin, IDMixin): """ A class object representing a user. diff --git a/interactions/api/models/user.pyi b/interactions/api/models/user.pyi index f72cfb0e7..4ddaa00ed 100644 --- a/interactions/api/models/user.pyi +++ b/interactions/api/models/user.pyi @@ -1,12 +1,12 @@ from typing import Optional, Union from attrs_utils import ClientSerializerMixin, define - from .flags import UserFlags as UserFlags -from .misc import Snowflake +from .misc import IDMixin, Snowflake + @define() -class User(ClientSerializerMixin): +class User(ClientSerializerMixin, IDMixin): id: Snowflake username: str discriminator: str diff --git a/interactions/api/models/webhook.py b/interactions/api/models/webhook.py index c034395f7..4a9812561 100644 --- a/interactions/api/models/webhook.py +++ b/interactions/api/models/webhook.py @@ -3,7 +3,7 @@ from ..error import LibraryException from .attrs_utils import MISSING, ClientSerializerMixin, define, field -from .misc import File, Image, Snowflake +from .misc import File, IDMixin, Image, Snowflake from .user import User __all__ = ( @@ -19,7 +19,7 @@ class WebhookType(IntEnum): @define() -class Webhook(ClientSerializerMixin): +class Webhook(ClientSerializerMixin, IDMixin): """ A class object representing a Webhook. diff --git a/interactions/api/models/webhook.pyi b/interactions/api/models/webhook.pyi index 720037a31..d52f74181 100644 --- a/interactions/api/models/webhook.pyi +++ b/interactions/api/models/webhook.pyi @@ -1,22 +1,24 @@ from enum import IntEnum from typing import Any, List, Optional, Union -from ...client.models.component import ActionRow, Button, SelectMenu -from ..http.client import HTTPClient -from .attrs_utils import MISSING, ClientSerializerMixin, define +from .attrs_utils import ClientSerializerMixin, MISSING, define from .channel import Channel from .guild import Guild from .message import Embed, Message -from .misc import File, Image, Snowflake +from .misc import File, IDMixin, Image, Snowflake from .user import User +from ..http.client import HTTPClient +from ...client.models.component import ActionRow, Button, SelectMenu + class WebhookType(IntEnum): Incoming: int Channel_Follower: int Application: int + @define() -class Webhook(ClientSerializerMixin): +class Webhook(ClientSerializerMixin, IDMixin): id: Snowflake type: Union[WebhookType, int] guild_id: Optional[Snowflake]