async def convert(self, ctx, argument): bot = ctx.bot match = self._get_id_match(argument) or re.match( r'<@!?([0-9]+)>$', argument) guild = ctx.guild result = None 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) if urlparse(argument).scheme in ["http", "https"]: result = argument if result is None: raise BadArgument( f"{argument} is neither a Member nor a valid URL") return result
async def convert(self, ctx, argument) -> List[discord.Member]: bot = ctx.bot match = self._get_id_match(argument) or re.match(r"<@!?([0-9]+)>$", argument) guild = ctx.guild result = [] if match is None: # Not a mention if guild: for m in guild.members: if argument.lower() in unidecode.unidecode(m.display_name.lower()): # display_name so we can get the nick of the user first # without being NoneType and then check username if that matches # what we're expecting result.append(m) continue if argument.lower() in unidecode.unidecode(m.name.lower()): result.append(m) continue else: user_id = int(match.group(1)) if guild: result.append(guild.get_member(user_id)) else: result.append(_get_from_guilds(bot, "get_member", user_id)) if not result: raise BadArgument('Member "{}" not found'.format(argument)) return result
async def convert(self, ctx: commands.Context, argument: str) -> List[discord.Member]: bot = ctx.bot match = self._get_id_match(argument) or re.match(r"<@!?([0-9]+)>$", argument) guild = ctx.guild result = [] if match is None: # Not a mention if guild: for m in process.extract( argument, {m: unidecode(m.name) for m in guild.members}, limit=None, score_cutoff=75, ): result.append(m[2]) for m in process.extract( argument, {m: unidecode(m.nick) for m in guild.members if m.nick and m not in result}, limit=None, score_cutoff=75, ): result.append(m[2]) else: user_id = int(match.group(1)) if guild: result.append(guild.get_member(user_id)) else: result.append(_get_from_guilds(bot, "get_member", user_id)) if not result or result == [None]: raise BadArgument('Member "{}" not found'.format(argument)) return result
def convert(self, ctx, argument): message = ctx.message bot = ctx.bot match = self._id_regex.match(argument) or re.match(r'<@!?([0-9]+)>$', argument) guild = message.guild result = None 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) if result is None: raise BadArgument('Member "{}" not found'.format(argument)) return result
async def convert(self, ctx, argument): bot = ctx.bot match = self._get_id_match(argument) or re.match(r"<#([0-9]+)>$", argument) result = None guild = ctx.guild if match is None: order = [ (discord.TextChannel, guild.text_channels), (discord.VoiceChannel, guild.voice_channels), (discord.CategoryChannel, guild.categories), ] # not a mention for c_types in order: if guild: result = discord.utils.get(c_types[1], name=argument) if result is not None: break else: def check(c): return isinstance(c, c_types[0]) and c.name == argument result = discord.utils.find(check, bot.get_all_channels()) if result is not None: break else: channel_id = int(match.group(1)) if guild: result = guild.get_channel(channel_id) else: result = converter._get_from_guilds(bot, "get_channel", channel_id) if not isinstance(result, (discord.TextChannel, discord.VoiceChannel, discord.CategoryChannel)): raise BadArgument('Channel "{}" not found.'.format(argument)) return result
async def convert(self, ctx, argument): bot = ctx.bot match = self._get_id_match(argument) or re.match( r'<@!?([0-9]+)>$', argument) guild = ctx.guild result = None argument = argument.lower() def get_from_guild( guild: discord.Guild, argument: Union[str, int]) -> Optional[discord.Member]: for member in guild.members: if (member.name.lower() == argument or member.nick and member.nick.lower() == argument): return member # This is a really ugly re-purposing of the original MemberConverter if match is None: if guild: result = get_from_guild(guild, argument) else: for guild in bot.guilds: result = get_from_guild(guild, argument) if result: break 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) if result is None: raise BadArgument(f"No member named '{argument}'") return result