aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRapptz <[email protected]>2019-07-10 04:32:11 -0400
committerRapptz <[email protected]>2019-07-10 04:51:27 -0400
commitbbc50c92d006398496bfee098dad20087ea86b6f (patch)
tree8bc8e6c4c1260c1fc8174649268d0622c1a6f930
parentAdd VoiceChannel.voice_states low level helper. (diff)
downloaddiscord.py-bbc50c92d006398496bfee098dad20087ea86b6f.tar.xz
discord.py-bbc50c92d006398496bfee098dad20087ea86b6f.zip
Add upgraded Member to Message.mentions in case of no cache.
-rw-r--r--discord/member.py11
-rw-r--r--discord/message.py14
2 files changed, 20 insertions, 5 deletions
diff --git a/discord/member.py b/discord/member.py
index d7871066..bd65b237 100644
--- a/discord/member.py
+++ b/discord/member.py
@@ -193,6 +193,17 @@ class Member(discord.abc.Messageable, _BaseUser):
return cls(data=data, guild=message.guild, state=message._state)
@classmethod
+ def _try_upgrade(cls, *, data, guild, state):
+ # A User object with a 'member' key
+ try:
+ member_data = data.pop('member')
+ except KeyError:
+ return state.store_user(member_data)
+ else:
+ member_data['user'] = data
+ return cls(data=member_data, guild=guild, state=state)
+
+ @classmethod
def _from_presence_update(cls, *, data, guild, state):
clone = cls(data=data, guild=guild, state=state)
to_return = cls(data=data, guild=guild, state=state)
diff --git a/discord/message.py b/discord/message.py
index 3d7e5a0b..eb6ab5c7 100644
--- a/discord/message.py
+++ b/discord/message.py
@@ -412,16 +412,20 @@ class Message:
self.author = Member._from_message(message=self, data=member)
def _handle_mentions(self, mentions):
- self.mentions = []
- if self.guild is None:
- self.mentions = [self._state.store_user(m) for m in mentions]
+ self.mentions = r = []
+ guild = self.guild
+ state = self._state
+ if guild is None:
+ self.mentions = [state.store_user(m) for m in mentions]
return
for mention in filter(None, mentions):
id_search = int(mention['id'])
- member = self.guild.get_member(id_search)
+ member = guild.get_member(id_search)
if member is not None:
- self.mentions.append(member)
+ r.append(member)
+ else:
+ r.append(Member._try_upgrade(data=mention, guild=guild, state=state))
def _handle_mention_roles(self, role_mentions):
self.role_mentions = []