Skip to content

Commit 380a9fa

Browse files
ChrisLoveringsebkuip
authored andcommitted
Get or fetch member when trying to reply
This fixes an issue where the member may not be in the cache
1 parent c1241d5 commit 380a9fa

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

bot.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,6 +640,16 @@ async def get_or_fetch_user(self, id: int) -> discord.User:
640640
"""
641641
return self.get_user(id) or await self.fetch_user(id)
642642

643+
@staticmethod
644+
async def get_or_fetch_member(guild: discord.Guild, member_id: int) -> typing.Optional[discord.Member]:
645+
"""
646+
Attempt to get a member from cache; on failure fetch from the API.
647+
648+
Returns:
649+
The :obj:`discord.Member` or :obj:`None` to indicate the member could not be found.
650+
"""
651+
return guild.get_member(member_id) or await guild.fetch_member(member_id)
652+
643653
async def retrieve_emoji(self) -> typing.Tuple[str, str]:
644654
sent_emoji = self.config["sent_emoji"]
645655
blocked_emoji = self.config["blocked_emoji"]

core/thread.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -823,7 +823,13 @@ async def reply(
823823
"""Returns List[user_dm_msg] and thread_channel_msg"""
824824
if not message.content and not message.attachments and not message.stickers:
825825
raise MissingRequiredArgument(DummyParam("msg"))
826-
if not any(g.get_member(self.id) for g in self.bot.guilds):
826+
for guild in self.bot.guilds:
827+
try:
828+
if await self.bot.get_or_fetch_member(guild, self.id):
829+
break
830+
except discord.NotFound:
831+
pass
832+
else:
827833
return await message.channel.send(
828834
embed=discord.Embed(
829835
color=self.bot.error_color,

0 commit comments

Comments
 (0)