Example #1
0
    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
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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
Example #5
0
    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
Example #6
0
    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