mirror of
https://github.com/MelisaDev/melisa.git
synced 2024-09-22 19:22:01 +03:00
feat(interactions): Interaction Model
This commit is contained in:
parent
dc22ad5a41
commit
c3a4752a8c
1 changed files with 106 additions and 0 deletions
|
@ -45,6 +45,112 @@ class InteractionType(IntEnum):
|
|||
return self.value
|
||||
|
||||
|
||||
@dataclass(repr=False)
|
||||
class Interaction(APIModelBase):
|
||||
"""Interaction
|
||||
|
||||
Attributes
|
||||
----------
|
||||
id: :class:`~melisa.utils.types.snowflake.Snowflake`
|
||||
ID of the interaction
|
||||
application_id: :class:`~melisa.utils.types.snowflake.Snowflake`
|
||||
ID of the application this interaction is for
|
||||
type: :class:`~melisa.models.interactions.interactions.InteractionType`
|
||||
Type of interaction
|
||||
data: Optional[:class:`~melisa.models.interactions.interactions.ApplicationCommandData`]
|
||||
Interaction data payload
|
||||
guild_id: Optional[:class:`~melisa.utils.types.snowflake.Snowflake`]
|
||||
Guild that the interaction was sent from
|
||||
channel_id: Optional[:class:`~melisa.utils.types.snowflake.Snowflake`]
|
||||
Channel that the interaction was sent from
|
||||
member: Optional[:class:`~melisa.models.guild.member.GuildMember`]
|
||||
Guild member data for the invoking user, including permissions
|
||||
user: Optional[:class:`~melisa.models.user.user.User`]
|
||||
User object for the invoking user, if invoked in a DM
|
||||
token: str
|
||||
Continuation token for responding to the interaction
|
||||
version: int
|
||||
Read-only property, always 1
|
||||
message: Optional[:class:`~melisa.models.message.message.Message`]
|
||||
For components, the message they were attached to
|
||||
app_permissions: str
|
||||
Bitwise set of permissions the app or bot has within the channel the interaction was sent from
|
||||
locale: Optional[str]
|
||||
Selected language of the invoking user
|
||||
guild_locale: Optional[str]
|
||||
Guild's preferred locale, if invoked in a guild
|
||||
"""
|
||||
|
||||
id: Snowflake = None
|
||||
application_id: Snowflake = None
|
||||
type: InteractionType = None
|
||||
data: Optional[ApplicationCommandData] = None
|
||||
guild_id: Optional[Snowflake] = None
|
||||
channel_id: Optional[Snowflake] = None
|
||||
member: Optional[GuildMember] = None
|
||||
user: Optional[User] = None
|
||||
token: str = None
|
||||
version: int = None
|
||||
message: Optional[Message] = None
|
||||
app_permissions: str = None
|
||||
locale: Optional[str] = None
|
||||
guild_locale: Optional[str] = None
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, data: Dict[str, Any]):
|
||||
"""Generate a Interaction from the given data.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data: :class:`dict`
|
||||
The dictionary to convert into a Interaction.
|
||||
"""
|
||||
self: Interaction = super().__new__(cls)
|
||||
|
||||
self.id = Snowflake(data.get("id", 0))
|
||||
self.application_id = Snowflake(data.get("application_id", 0))
|
||||
self.type = (
|
||||
try_enum(ApplicationCommandType, data["type"])
|
||||
if data.get("type", None) is not None
|
||||
else None
|
||||
)
|
||||
self.data = (
|
||||
ApplicationCommandData.from_dict(data["data"])
|
||||
if data.get("data", None) is not None
|
||||
else None
|
||||
)
|
||||
self.guild_id = (
|
||||
Snowflake(data["guild_id"])
|
||||
if data.get("guild_id", None) is not None
|
||||
else None
|
||||
)
|
||||
self.channel_id = (
|
||||
Snowflake(data["channel_id"])
|
||||
if data.get("channel_id", None) is not None
|
||||
else None
|
||||
)
|
||||
self.member = (
|
||||
GuildMember.from_dict(data["member"])
|
||||
if data.get("member", None) is not None
|
||||
else None
|
||||
)
|
||||
self.user = (
|
||||
User.from_dict(data["user"]) if data.get("user", None) is not None else None
|
||||
)
|
||||
self.token = data.get("token")
|
||||
self.version = data.get("version")
|
||||
self.message = (
|
||||
Message.from_dict(data["message"])
|
||||
if data.get("message", None) is not None
|
||||
else None
|
||||
)
|
||||
self.app_permissions = data.get("app_permissions")
|
||||
self.locale = data.get("locale", None)
|
||||
self.guild_locale = data.get("guild_locale", None)
|
||||
|
||||
return self
|
||||
|
||||
|
||||
@dataclass(repr=False)
|
||||
class ResolvedData(APIModelBase):
|
||||
"""Resolved Data
|
||||
|
|
Loading…
Reference in a new issue