From dad59267202ae744d2d0eeb621235e2cfee479e9 Mon Sep 17 00:00:00 2001 From: Arthur Jovart Date: Sun, 29 Aug 2021 00:20:38 +0200 Subject: [PATCH] Add try_member to guild. This also fix an omission in the fetch_member docs. fetch_member raises NotFound if the given user isn't in the guild. --- discord/guild.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/discord/guild.py b/discord/guild.py index 9ab81276..28ef0480 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -42,6 +42,7 @@ from typing import ( overload, ) +import discord from . import utils, abc from .role import Role from .member import Member, VoiceState @@ -1715,6 +1716,8 @@ class Guild(Hashable): You do not have access to the guild. HTTPException Fetching the member failed. + NotFound + A member with that ID does not exist. Returns -------- @@ -1724,6 +1727,34 @@ class Guild(Hashable): data = await self._state.http.get_member(self.id, member_id) return Member(data=data, state=self._state, guild=self) + async def try_member(self, member_id: int, /) -> Optional[Member]: + """|coro| + + Returns a member with the given ID. This uses the cache first, and if not found, it'll request using :meth:`fetch_member`. + + .. note:: + This method might result in an API call. + + Parameters + ----------- + member_id: :class:`int` + The ID to search for. + + Returns + -------- + Optional[:class:`Member`] + The member or ``None`` if not found. + """ + member = self.get_member(member_id) + + if member: + return member + else: + try: + return await self.fetch_member(member_id) + except discord.NotFound: + return None + async def fetch_ban(self, user: Snowflake) -> BanEntry: """|coro|