async def match_player(self, player, guild: discord.Guild, prompt=False, ctx=None, score_cutoff=20, claim=True): matches = fuzzy.extract_matches(player.name, [n.name for n in guild.members], score_cutoff=score_cutoff, scorer=fuzzy.partial_ratio, limit=9) if len(matches) == 0: return None if len(matches) == 1: user = guild.get_member_named(matches[0][0]) if prompt: m = await ctx.prompt( f'[auto-claim]: {player.name} ({player.tag}) ' f'to be claimed to {str(user)} ({user.id}). ' f'If already claimed, this will do nothing.') if m is True and claim is True: query = "UPDATE players SET user_id = $1 " \ "WHERE player_tag = $2 AND user_id IS NULL AND season_id = $3" await self.bot.pool.execute( query, user.id, player.tag, await self.bot.seasonconfig.get_season_id()) else: return False return user return [guild.get_member_named(n[0]) for n in matches]
def getDiscordMemberFromString( _cls: "PhaazebotDiscord", Guild: discord.Guild, search: Union[str, int], Message: Optional[discord.Message] = None) -> Optional[discord.Member]: """ Tries to get a member from a guild, the search input may be, the user name or his id. Returns first match, else None Also can take Message mentions in account if Message given """ # mention if Message: if Message.mentions: return Message.mentions[0] search: str = str(search) Member: Optional[discord.Member] # id if search.isdigit(): Member = Guild.get_member(int(search)) if Member: return Member # name Member = Guild.get_member_named(search) if Member: return Member return Member
def getMemberFromRef(uRef: str, dcGuild: Guild) -> Union[Member, None]: """Attempt to find a member of a given discord guild object from a string or integer. uRef can be one of: - A user mention <@123456> or <@!123456> - A user ID 123456 - A user name Carl - A user name and discriminator Carl#0324 If the passed user reference is none of the above, or a matching user cannot be found in the requested guild, None is returned. :param str uRef: A string or integer indentifying a user within dcGuild either by mention, ID, name, or name and discriminator :param discord.Guild dcGuild: A discord.guild in which to search for a member matching uRef :return: Either discord.member of a member belonging to dcGuild and matching uRef, or None if uRef is invalid or no matching user could be found :rtype: discord.Member or None """ # Handle user mentions if stringTyping.isMention(uRef): return dcGuild.get_member(int(uRef.lstrip("<@!").rstrip(">"))) # Handle IDs elif stringTyping.isInt(uRef): userAttempt = dcGuild.get_member(int(uRef)) # handle the case where uRef may be the username (without discrim) of a user whose name consists only of digits. if userAttempt is not None: return userAttempt # Handle user names and user name+discrim combinations return dcGuild.get_member_named(uRef)
def getDiscordMemberFromString(cls:"PhaazebotDiscord", Guild:discord.Guild, search:str or int, Message:discord.Message=None) -> discord.Member or None: """ Tryes to get a member from a guild, the search input may be, the user name or his id, else None is given Also can take Message mentions in account if Message given """ # mention if Message: if Message.mentions: return Message.mentions[0] search:str = str(search) Member:discord.Member = None # id if search.isdigit(): Member = Guild.get_member(int(search)) if Member: return Member # name Member = Guild.get_member_named(search) if Member: return Member
def get_user_closest_to_name(guild: discord.Guild, name: str): members = guild.members member_names = [] for i in members: member_names.append(i.display_name) closest = process.extractOne(name, member_names) if closest is None: return None return guild.get_member_named(closest[0])
async def construct_discord_name(cls, discord_name: str, guild: discord.Guild): playerobj = cls() playerobj.discord_user = guild.get_member_named(discord_name) if playerobj.discord_user is None: raise UnableToLookupUserException( f"Unable to lookup player {discord_name}") return playerobj
async def construct_discord_name(cls, discord_name: str, guild: discord.Guild): playerobj = cls() playerobj.discord_user = guild.get_member_named(discord_name) if playerobj.discord_user is None: raise UnableToLookupUserException(f"Unable to lookup player {discord_name}") playerobj.data = await models.SRLNick.get_or_none(discord_user_id=playerobj.discord_user.id) if playerobj.data is None: raise UnableToLookupUserException(f"Unable to pull nick data for {discord_name}") return playerobj
def get_user_and_intensity(self, guild: discord.Guild, target: str): target = target.strip() user = None intensity = 1 # mentions can be <@! or <@ user_ment = mention.match(target) user_ment_b = mention_bang.match(target) # try with no intensity specified and not a mention if not user_ment or not user_ment_b: user = guild.get_member_named(target) # has intensity, could be a mention/text if not user: try: args = target.split() intensity = int(args[-1]) name = " ".join(args[:-1]) # not a mention user = guild.get_member_named(name) # parse mention if not user: user_ment = mention.match(name) user_ment_b = mention_bang.match(name) except: pass if not user: if user_ment: user = guild.get_member(int(user_ment.group(1))) elif user_ment_b: user = guild.get_member(int(user_ment_b.group(1))) else: user = None return user, intensity
async def get_member(guild: discord.Guild, argument: str) -> discord.Member: match = re.match(r'([0-9]{15,21})$', argument) or re.match( r'<@!?([0-9]+)>$', argument) if match is None: # not a mention... if guild: result = guild.get_member_named(argument) else: result = _get_from_guilds(bot, 'get_member_named', argument) else: user_id = int(match.group(1)) if guild: result = guild.get_member(user_id) else: result = _get_from_guilds(bot, 'get_member', user_id) return result
def get_user_id_from_arbitrary_str(guild: discord.Guild, string: str): if string.isnumeric(): potential_uid = int(string) elif string.startswith("<@") and string.endswith(">"): potential_uid = int( string.replace("<@", "").replace(">", "").replace("!", "")) else: potential_user = guild.get_member_named(string) if potential_user is None: raise ValueError(f"No member by the name of {string} was found.") return potential_user.id # if guild.get_member(potential_uid) is None: # raise ValueError("Member ID {} (translated from {}) was not found. ".format(potential_uid, string)) return potential_uid
async def _resolve_member( candidate_guild: Guild, user_identifier: str) -> Tuple[Optional[Member], Optional[str]]: """ Attempts to resolve a member object from the given user identifier. First attempts to resolve by username, then attempts to resolve as if user_identifier is a snowflake. :param candidate_guild: the guild to search for the given user in :param user_identifier: the identifier to attempt to resolve from :return: Returns a tuple of (Member, None) on success, (None, Error Message) on failure """ try: user_obj = candidate_guild.get_member_named(user_identifier) except NotFound: user_obj = None try: user_snowflake = int(user_identifier) user_obj = candidate_guild.get_member(user_snowflake) except ValueError: pass if user_obj is None: return None, f'User {user_identifier} is not currently a Member!' return user_obj, None