mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-06-05 11:27:13 +00:00
Added MessageReference.resolved attribute to get replied to message
This commit is contained in:
parent
1014bfcb63
commit
34f2fb36b1
@ -33,7 +33,7 @@ from .guild import Guild
|
|||||||
from .flags import *
|
from .flags import *
|
||||||
from .relationship import Relationship
|
from .relationship import Relationship
|
||||||
from .member import Member, VoiceState
|
from .member import Member, VoiceState
|
||||||
from .message import Message, MessageReference, Attachment
|
from .message import *
|
||||||
from .asset import Asset
|
from .asset import Asset
|
||||||
from .errors import *
|
from .errors import *
|
||||||
from .calls import CallMessage, GroupCall
|
from .calls import CallMessage, GroupCall
|
||||||
|
@ -46,6 +46,12 @@ from .mixins import Hashable
|
|||||||
from .mentions import AllowedMentions
|
from .mentions import AllowedMentions
|
||||||
from .sticker import Sticker
|
from .sticker import Sticker
|
||||||
|
|
||||||
|
__all__ = (
|
||||||
|
'Attachment',
|
||||||
|
'Message',
|
||||||
|
'MessageReference',
|
||||||
|
'DeletedReferencedMessage',
|
||||||
|
)
|
||||||
|
|
||||||
class Attachment:
|
class Attachment:
|
||||||
"""Represents an attachment from Discord.
|
"""Represents an attachment from Discord.
|
||||||
@ -211,6 +217,36 @@ class Attachment:
|
|||||||
data = await self.read(use_cached=use_cached)
|
data = await self.read(use_cached=use_cached)
|
||||||
return File(io.BytesIO(data), filename=self.filename, spoiler=spoiler)
|
return File(io.BytesIO(data), filename=self.filename, spoiler=spoiler)
|
||||||
|
|
||||||
|
class DeletedReferencedMessage:
|
||||||
|
"""A special sentinel type that denotes whether the
|
||||||
|
resolved message referenced message had since been deleted.
|
||||||
|
|
||||||
|
The purpose of this class is to separate referenced messages that could not be
|
||||||
|
fetched and those that were previously fetched but have since been deleted.
|
||||||
|
|
||||||
|
.. versionadded:: 1.6
|
||||||
|
"""
|
||||||
|
|
||||||
|
__slots__ = ('_parent')
|
||||||
|
|
||||||
|
def __init__(self, parent):
|
||||||
|
self._parent = parent
|
||||||
|
|
||||||
|
@property
|
||||||
|
def id(self):
|
||||||
|
""":class:`int`: The message ID of the deleted referenced message."""
|
||||||
|
return self._parent.message_id
|
||||||
|
|
||||||
|
@property
|
||||||
|
def channel_id(self):
|
||||||
|
""":class:`int`: The channel ID of the deleted referenced message."""
|
||||||
|
return self._parent.channel_id
|
||||||
|
|
||||||
|
@property
|
||||||
|
def guild_id(self):
|
||||||
|
"""Optional[:class:`int`]: The guild ID of the deleted referenced message."""
|
||||||
|
return self._parent.guild_id
|
||||||
|
|
||||||
|
|
||||||
class MessageReference:
|
class MessageReference:
|
||||||
"""Represents a reference to a :class:`~discord.Message`.
|
"""Represents a reference to a :class:`~discord.Message`.
|
||||||
@ -228,12 +264,23 @@ class MessageReference:
|
|||||||
The channel id of the message referenced.
|
The channel id of the message referenced.
|
||||||
guild_id: Optional[:class:`int`]
|
guild_id: Optional[:class:`int`]
|
||||||
The guild id of the message referenced.
|
The guild id of the message referenced.
|
||||||
|
resolved: Optional[Union[:class:`Message`, :class:`DeletedReferencedMessage`]
|
||||||
|
The message that this reference resolved to. If this is ``None``
|
||||||
|
then the original message was not fetched either due to the discord API
|
||||||
|
not attempting to resolve it or it not being available at the time of creation.
|
||||||
|
If the message was resolved at a prior point but has since been deleted then
|
||||||
|
this will be of type :class:`DeletedReferencedMessage`.
|
||||||
|
|
||||||
|
Currently, this is mainly the replied to message when a user replies to a message.
|
||||||
|
|
||||||
|
.. versionadded:: 1.6
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__slots__ = ('message_id', 'channel_id', 'guild_id', '_state')
|
__slots__ = ('message_id', 'channel_id', 'guild_id', 'resolved', '_state')
|
||||||
|
|
||||||
def __init__(self, *, message_id, channel_id, guild_id=None):
|
def __init__(self, *, message_id, channel_id, guild_id=None):
|
||||||
self._state = None
|
self._state = None
|
||||||
|
self.resolved = None
|
||||||
self.message_id = message_id
|
self.message_id = message_id
|
||||||
self.channel_id = channel_id
|
self.channel_id = channel_id
|
||||||
self.guild_id = guild_id
|
self.guild_id = guild_id
|
||||||
@ -245,6 +292,7 @@ class MessageReference:
|
|||||||
self.channel_id = int(data.pop('channel_id'))
|
self.channel_id = int(data.pop('channel_id'))
|
||||||
self.guild_id = utils._get_as_snowflake(data, 'guild_id')
|
self.guild_id = utils._get_as_snowflake(data, 'guild_id')
|
||||||
self._state = state
|
self._state = state
|
||||||
|
self.resolved = None
|
||||||
return self
|
return self
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -433,7 +481,22 @@ class Message(Hashable):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
self.reference = None
|
self.reference = None
|
||||||
else:
|
else:
|
||||||
self.reference = MessageReference.with_state(state, ref)
|
self.reference = ref = MessageReference.with_state(state, ref)
|
||||||
|
try:
|
||||||
|
resolved = data['referenced_message']
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
if resolved is None:
|
||||||
|
ref.resolved = DeletedReferencedMessage(ref)
|
||||||
|
else:
|
||||||
|
# Right now the channel IDs match but maybe in the future they won't.
|
||||||
|
if ref.channel_id == channel.id:
|
||||||
|
chan = channel
|
||||||
|
else:
|
||||||
|
chan, _ = state._get_guild_channel(resolved)
|
||||||
|
|
||||||
|
ref.resolved = self.__class__(channel=chan, data=resolved, state=state)
|
||||||
|
|
||||||
for handler in ('author', 'member', 'mentions', 'mention_roles', 'call', 'flags'):
|
for handler in ('author', 'member', 'mentions', 'mention_roles', 'call', 'flags'):
|
||||||
try:
|
try:
|
||||||
|
@ -2648,6 +2648,13 @@ Message
|
|||||||
.. autoclass:: Message()
|
.. autoclass:: Message()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
DeletedReferencedMessage
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. autoclass:: DeletedReferencedMessage()
|
||||||
|
:members:
|
||||||
|
|
||||||
|
|
||||||
Reaction
|
Reaction
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user