diff options
| author | Rapptz <[email protected]> | 2020-12-11 02:32:51 -0500 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2020-12-11 02:32:51 -0500 |
| commit | 52d587d286fe52e04fe4e458ed7e9dbc83af3453 (patch) | |
| tree | e83092b945649abe70cf8f369a2624c97122cdf8 | |
| parent | Export to_message_reference_dict to make PartialMessage.reply work (diff) | |
| download | discord.py-52d587d286fe52e04fe4e458ed7e9dbc83af3453.tar.xz discord.py-52d587d286fe52e04fe4e458ed7e9dbc83af3453.zip | |
Allow PartialMessage to work with DM channels as well
| -rw-r--r-- | discord/channel.py | 22 | ||||
| -rw-r--r-- | discord/message.py | 18 |
2 files changed, 31 insertions, 9 deletions
diff --git a/discord/channel.py b/discord/channel.py index 00d96835..2bac8b1a 100644 --- a/discord/channel.py +++ b/discord/channel.py @@ -1096,6 +1096,28 @@ class DMChannel(discord.abc.Messageable, Hashable): base.manage_messages = False return base + def get_partial_message(self, message_id): + """Creates a :class:`PartialMessage` from the message ID. + + This is useful if you want to work with a message and only have its ID without + doing an unnecessary API call. + + .. versionadded:: 1.6 + + Parameters + ------------ + message_id: :class:`int` + The message ID to create a partial message for. + + Returns + --------- + :class:`PartialMessage` + The partial message. + """ + + from .message import PartialMessage + return PartialMessage(channel=self, id=message_id) + class GroupChannel(discord.abc.Messageable, Hashable): """Represents a Discord group channel. diff --git a/discord/message.py b/discord/message.py index 6a811745..e2a5a07c 100644 --- a/discord/message.py +++ b/discord/message.py @@ -1318,7 +1318,7 @@ class PartialMessage(Hashable): There are two ways to construct this class. The first one is through the constructor itself, and the second is via - :meth:`TextChannel.get_partial_message`. + :meth:`TextChannel.get_partial_message` or :meth:`DMChannel.get_partial_message`. Note that this class is trimmed down and has no rich attributes. @@ -1340,13 +1340,13 @@ class PartialMessage(Hashable): Attributes ----------- - channel: :class:`TextChannel` - The text channel associated with this partial message. + channel: Union[:class:`TextChannel`, :class:`DMChannel`] + The channel associated with this partial message. id: :class:`int` The message ID. """ - __slots__ = ('channel', 'id', '_state') + __slots__ = ('channel', 'id', '_cs_guild', '_state') _exported_names = ( 'jump_url', @@ -1365,8 +1365,8 @@ class PartialMessage(Hashable): ) def __init__(self, *, channel, id): - if channel.type not in (ChannelType.text, ChannelType.news): - raise TypeError('Expected TextChannel not %r' % type(channel)) + if channel.type not in (ChannelType.text, ChannelType.news, ChannelType.private): + raise TypeError('Expected TextChannel or DMChannel not %r' % type(channel)) self.channel = channel self._state = channel._state @@ -1389,10 +1389,10 @@ class PartialMessage(Hashable): """:class:`datetime.datetime`: The partial message's creation time in UTC.""" return utils.snowflake_time(self.id) - @property + @utils.cached_slot_property('_cs_guild') def guild(self): - """:class:`Guild`: The guild that the partial message belongs to.""" - return self.channel.guild + """Optional[:class:`Guild`]: The guild that the partial message belongs to, if applicable.""" + return getattr(self.channel, 'guild', None) async def fetch(self): """|coro| |