aboutsummaryrefslogtreecommitdiff
path: root/discord/channel.py
diff options
context:
space:
mode:
authorRapptz <[email protected]>2021-04-11 22:00:28 -0400
committerRapptz <[email protected]>2021-04-11 22:09:10 -0400
commit7bdaa793f68ef5795960bad029357930f4903fc7 (patch)
treecf22b248363d943f04959cbb3c9bb13bc04cee75 /discord/channel.py
parentFix spelling error in utils.__all__ (diff)
downloaddiscord.py-7bdaa793f68ef5795960bad029357930f4903fc7.tar.xz
discord.py-7bdaa793f68ef5795960bad029357930f4903fc7.zip
Create temporary DMChannels from message create events
This allows for DMChannels to work without falling back to the Object error case since there is enough information to build a pseudo DMChannel object. This is a breaking change since it changes the type of DMChannel.recipient to Optional[User] for when this faux object is created.
Diffstat (limited to 'discord/channel.py')
-rw-r--r--discord/channel.py21
1 files changed, 19 insertions, 2 deletions
diff --git a/discord/channel.py b/discord/channel.py
index 314485d6..7c99c0cb 100644
--- a/discord/channel.py
+++ b/discord/channel.py
@@ -1195,8 +1195,10 @@ class DMChannel(discord.abc.Messageable, Hashable):
Attributes
----------
- recipient: :class:`User`
+ recipient: Optional[:class:`User`]
The user you are participating with in the direct message channel.
+ If this channel is received through the gateway, the recipient information
+ may not be always available.
me: :class:`ClientUser`
The user presenting yourself.
id: :class:`int`
@@ -1215,11 +1217,26 @@ class DMChannel(discord.abc.Messageable, Hashable):
return self
def __str__(self):
- return f'Direct Message with {self.recipient}'
+ if self.recipient:
+ return f'Direct Message with {self.recipient}'
+ return 'Direct Message with Unknown User'
def __repr__(self):
return f'<DMChannel id={self.id} recipient={self.recipient!r}>'
+ @classmethod
+ def _from_message(cls, state, channel_id, payload):
+ # The MESSAGE_CREATE payload no longer gives bots
+ # an appropriate CHANNEL_CREATE.
+ # However, it has enough data for us to pretend since
+ # bots can no longer be in a group DM.
+ self = cls.__new__(cls)
+ self._state = state
+ self.id = channel_id
+ self.recipient = None
+ self.me = state.user
+ return self
+
@property
def type(self):
""":class:`ChannelType`: The channel's Discord type."""