From dad59267202ae744d2d0eeb621235e2cfee479e9 Mon Sep 17 00:00:00 2001 From: Arthur Jovart Date: Sun, 29 Aug 2021 00:20:38 +0200 Subject: [PATCH 1/2] 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| -- 2.47.2 From b8133b00aac7e5befa6fb76aa8d5a97845401999 Mon Sep 17 00:00:00 2001 From: Arthur Jovart Date: Sun, 29 Aug 2021 21:48:16 +0200 Subject: [PATCH 2/2] Optimize imports. --- discord/guild.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/discord/guild.py b/discord/guild.py index 28ef0480..1e2d6aa7 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -42,12 +42,11 @@ from typing import ( overload, ) -import discord from . import utils, abc from .role import Role from .member import Member, VoiceState from .emoji import Emoji -from .errors import InvalidData +from .errors import InvalidData, NotFound from .permissions import PermissionOverwrite from .colour import Colour from .errors import InvalidArgument, ClientException @@ -1752,7 +1751,7 @@ class Guild(Hashable): else: try: return await self.fetch_member(member_id) - except discord.NotFound: + except NotFound: return None async def fetch_ban(self, user: Snowflake) -> BanEntry: -- 2.47.2