async def query_member_by_id(self, bot: _Bot, guild: discord.Guild, user_id: int) -> Optional[discord.Member]: ws = bot._get_websocket(shard_id=guild.shard_id) cache = guild._state.member_cache_flags.joined if ws.is_ratelimited(): # If we're being rate limited on the WS, then fall back to using the HTTP API # So we don't have to wait ~60 seconds for the query to finish try: member = await guild.fetch_member(user_id) except discord.HTTPException: return None if cache: guild._add_member(member) return member # If we're not being rate limited then we can use the websocket to actually query members = await guild.query_members(limit=1, user_ids=[user_id], cache=cache) if not members: return None return members[0]
async def get_member_async(self, guild: discord.Guild, user_id: int) \ -> discord.Member: member = guild.get_member(user_id) if member: return member elif self.get_shard(guild.shard_id).is_ws_ratelimited(): # If we're being rate limited on the WS, then fall back to using # the HTTP API so we don't have to wait ~60 seconds for the query # to finish try: member = await guild.fetch_member(user_id) except discord.HTTPException: return None else: members = await guild.query_members(limit=1, user_ids=[user_id], cache=True) if members is None or len(members) != 1: return None member = next(iter(members)) guild._add_member(member, force=True) return member