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.
This commit is contained in:
Rapptz
2021-04-11 22:00:28 -04:00
parent 0f3f2cbeea
commit 7bdaa793f6
2 changed files with 22 additions and 5 deletions

View File

@ -338,10 +338,10 @@ class ConnectionState:
if len(self._private_channels) > 128:
_, to_remove = self._private_channels.popitem(last=False)
if isinstance(to_remove, DMChannel):
if isinstance(to_remove, DMChannel) and to_remove.recipient:
self._private_channels_by_user.pop(to_remove.recipient.id, None)
if isinstance(channel, DMChannel):
if isinstance(channel, DMChannel) and channel.recipient:
self._private_channels_by_user[channel.recipient.id] = channel
def add_dm_channel(self, data):
@ -371,7 +371,7 @@ class ConnectionState:
try:
guild = self._get_guild(int(data['guild_id']))
except KeyError:
channel = self.get_channel(channel_id)
channel = DMChannel._from_message(self, channel_id, data)
guild = None
else:
channel = guild and guild.get_channel(channel_id)