mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-06-08 04:38:42 +00:00
parent
a5f1c2f592
commit
e79895d824
@ -48,7 +48,7 @@ from . import utils
|
|||||||
from .reaction import Reaction
|
from .reaction import Reaction
|
||||||
from .emoji import Emoji
|
from .emoji import Emoji
|
||||||
from .partial_emoji import PartialEmoji
|
from .partial_emoji import PartialEmoji
|
||||||
from .enums import MessageType, ChannelType, try_enum
|
from .enums import InteractionType, MessageType, ChannelType, try_enum
|
||||||
from .errors import HTTPException
|
from .errors import HTTPException
|
||||||
from .components import _component_factory
|
from .components import _component_factory
|
||||||
from .embeds import Embed
|
from .embeds import Embed
|
||||||
@ -74,6 +74,8 @@ if TYPE_CHECKING:
|
|||||||
MessageActivity as MessageActivityPayload,
|
MessageActivity as MessageActivityPayload,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from .types.interactions import MessageInteraction as MessageInteractionPayload
|
||||||
|
|
||||||
from .types.components import Component as ComponentPayload
|
from .types.components import Component as ComponentPayload
|
||||||
from .types.threads import ThreadArchiveDuration
|
from .types.threads import ThreadArchiveDuration
|
||||||
from .types.member import (
|
from .types.member import (
|
||||||
@ -100,6 +102,7 @@ __all__ = (
|
|||||||
'Attachment',
|
'Attachment',
|
||||||
'Message',
|
'Message',
|
||||||
'PartialMessage',
|
'PartialMessage',
|
||||||
|
'MessageInteraction',
|
||||||
'MessageReference',
|
'MessageReference',
|
||||||
'DeletedReferencedMessage',
|
'DeletedReferencedMessage',
|
||||||
)
|
)
|
||||||
@ -511,6 +514,65 @@ class MessageReference:
|
|||||||
to_message_reference_dict = to_dict
|
to_message_reference_dict = to_dict
|
||||||
|
|
||||||
|
|
||||||
|
class MessageInteraction(Hashable):
|
||||||
|
"""Represents the interaction that a :class:`Message` is a response to.
|
||||||
|
|
||||||
|
.. versionadded:: 2.0
|
||||||
|
|
||||||
|
.. container:: operations
|
||||||
|
|
||||||
|
.. describe:: x == y
|
||||||
|
|
||||||
|
Checks if two message interactions are equal.
|
||||||
|
|
||||||
|
.. describe:: x != y
|
||||||
|
|
||||||
|
Checks if two message interactions are not equal.
|
||||||
|
|
||||||
|
.. describe:: hash(x)
|
||||||
|
|
||||||
|
Returns the message interaction's hash.
|
||||||
|
|
||||||
|
Attributes
|
||||||
|
-----------
|
||||||
|
id: :class:`int`
|
||||||
|
The interaction ID.
|
||||||
|
type: :class:`InteractionType`
|
||||||
|
The interaction type.
|
||||||
|
name: :class:`str`
|
||||||
|
The name of the interaction.
|
||||||
|
user: Union[:class:`User`, :class:`Member`]
|
||||||
|
The user or member that invoked the interaction.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *, state: ConnectionState, guild: Optional[Guild], data: MessageInteractionPayload) -> None:
|
||||||
|
self.id: int = int(data['id'])
|
||||||
|
self.type: InteractionType = try_enum(InteractionType, data['type'])
|
||||||
|
self.name: str = data['name']
|
||||||
|
self.user: Union[User, Member] = MISSING
|
||||||
|
|
||||||
|
try:
|
||||||
|
payload = data['member']
|
||||||
|
except KeyError:
|
||||||
|
self.user = state.create_user(data['user'])
|
||||||
|
else:
|
||||||
|
if guild is None:
|
||||||
|
# This is an unfortunate data loss, but it's better than giving bad data
|
||||||
|
# This is also an incredibly rare scenario.
|
||||||
|
self.user = state.create_user(data['user'])
|
||||||
|
else:
|
||||||
|
payload['user'] = data['user']
|
||||||
|
self.user = Member(data=payload, guild=guild, state=state) # type: ignore
|
||||||
|
|
||||||
|
def __repr__(self) -> str:
|
||||||
|
return f'<MessageInteraction id={self.id} name={self.name!r} type={self.type!r} user={self.user!r}>'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def created_at(self) -> datetime.datetime:
|
||||||
|
""":class:`datetime.datetime`: The interaction's creation time in UTC."""
|
||||||
|
return utils.snowflake_time(self.id)
|
||||||
|
|
||||||
|
|
||||||
def flatten_handlers(cls: Type[Message]) -> Type[Message]:
|
def flatten_handlers(cls: Type[Message]) -> Type[Message]:
|
||||||
prefix = len('_handle_')
|
prefix = len('_handle_')
|
||||||
handlers = [
|
handlers = [
|
||||||
@ -1252,6 +1314,10 @@ class Message(PartialMessage, Hashable):
|
|||||||
components: List[:class:`Component`]
|
components: List[:class:`Component`]
|
||||||
A list of components in the message.
|
A list of components in the message.
|
||||||
|
|
||||||
|
.. versionadded:: 2.0
|
||||||
|
interaction: Optional[:class:`MessageInteraction`]
|
||||||
|
The interaction that this message is a response to.
|
||||||
|
|
||||||
.. versionadded:: 2.0
|
.. versionadded:: 2.0
|
||||||
guild: Optional[:class:`Guild`]
|
guild: Optional[:class:`Guild`]
|
||||||
The guild that the message belongs to, if applicable.
|
The guild that the message belongs to, if applicable.
|
||||||
@ -1286,6 +1352,7 @@ class Message(PartialMessage, Hashable):
|
|||||||
'activity',
|
'activity',
|
||||||
'stickers',
|
'stickers',
|
||||||
'components',
|
'components',
|
||||||
|
'interaction',
|
||||||
)
|
)
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
@ -1330,6 +1397,15 @@ class Message(PartialMessage, Hashable):
|
|||||||
except AttributeError:
|
except AttributeError:
|
||||||
self.guild = state._get_guild(utils._get_as_snowflake(data, 'guild_id'))
|
self.guild = state._get_guild(utils._get_as_snowflake(data, 'guild_id'))
|
||||||
|
|
||||||
|
self.interaction: Optional[MessageInteraction] = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
interaction = data['interaction']
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
self.interaction = MessageInteraction(state=state, guild=self.guild, data=interaction)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ref = data['message_reference']
|
ref = data['message_reference']
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@ -1529,6 +1605,9 @@ class Message(PartialMessage, Hashable):
|
|||||||
def _handle_components(self, components: List[ComponentPayload]):
|
def _handle_components(self, components: List[ComponentPayload]):
|
||||||
self.components = [_component_factory(d) for d in components]
|
self.components = [_component_factory(d) for d in components]
|
||||||
|
|
||||||
|
def _handle_interaction(self, data: MessageInteractionPayload):
|
||||||
|
self.interaction = MessageInteraction(state=self._state, guild=self.guild, data=data)
|
||||||
|
|
||||||
def _rebind_cached_references(self, new_guild: Guild, new_channel: Union[TextChannel, Thread]) -> None:
|
def _rebind_cached_references(self, new_guild: Guild, new_channel: Union[TextChannel, Thread]) -> None:
|
||||||
self.guild = new_guild
|
self.guild = new_guild
|
||||||
self.channel = new_channel
|
self.channel = new_channel
|
||||||
|
@ -235,7 +235,11 @@ class ModalSubmitInteraction(_BaseInteraction):
|
|||||||
Interaction = Union[PingInteraction, ApplicationCommandInteraction, MessageComponentInteraction, ModalSubmitInteraction]
|
Interaction = Union[PingInteraction, ApplicationCommandInteraction, MessageComponentInteraction, ModalSubmitInteraction]
|
||||||
|
|
||||||
|
|
||||||
class MessageInteraction(TypedDict):
|
class _MessageInteractionOptional(TypedDict, total=False):
|
||||||
|
member: Member
|
||||||
|
|
||||||
|
|
||||||
|
class MessageInteraction(_MessageInteractionOptional):
|
||||||
id: Snowflake
|
id: Snowflake
|
||||||
type: InteractionType
|
type: InteractionType
|
||||||
name: str
|
name: str
|
||||||
|
@ -37,6 +37,14 @@ InteractionMessage
|
|||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
|
|
||||||
|
MessageInteraction
|
||||||
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: MessageInteraction
|
||||||
|
|
||||||
|
.. autoclass:: MessageInteraction()
|
||||||
|
:members:
|
||||||
|
|
||||||
Component
|
Component
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user