diff options
| author | 2021-09-20 14:14:39 +0100 | |
|---|---|---|
| committer | 2021-09-29 20:53:23 +0100 | |
| commit | b9f41c5f54fc1f506561430cdafb07f14966cf68 (patch) | |
| tree | d20741ed8bdd7dea5c8f6718a3e64eaabe1dafcb | |
| parent | Merge pull request #1848 from python-discord/add-more-supported-symbols-to-otn (diff) | |
Add get_or_fetch_member util
This is now needed, as we're a large server it's not guaranteed that the member cache will always be fully populated.
Diffstat (limited to '')
| -rw-r--r-- | bot/utils/members.py | 24 | 
1 files changed, 24 insertions, 0 deletions
| diff --git a/bot/utils/members.py b/bot/utils/members.py new file mode 100644 index 000000000..302fe6d63 --- /dev/null +++ b/bot/utils/members.py @@ -0,0 +1,24 @@ +import logging +import typing as t + +import discord + +log = logging.getLogger(__name__) + + +async def get_or_fetch_member(guild: discord.Guild, member_id: int) -> t.Optional[discord.Member]: +    """ +    Attempt to get a member from cache; on failure fetch from the API. + +    Return `None` to indicate the member could not be found. +    """ +    if member := guild.get_member(member_id): +        log.trace("%s retrieved from cache.", member) +    else: +        try: +            member = await guild.fetch_member(member_id) +        except discord.errors.NotFound: +            log.trace("Failed to fetch %d from API.", member_id) +            return None +        log.trace("%s fetched from API.", member) +    return member | 
