Issues (9)

ISA_bot/utils/converters.py (2 issues)

1
import discord
2
from discord.ext import commands
3
4
5
class BannedMember(commands.Converter):
6
    async def convert(self, ctx, argument):
7
        ban_list = await ctx.guild.bans()
8
        try:
9
            member_id = int(argument, base=10)
10
            entity = discord.utils.find(lambda u: u.user.id == member_id, ban_list)
11
        except ValueError:
12
            entity = discord.utils.find(lambda u: str(u.user) == argument, ban_list)
13
14
        if entity is None:
15
            raise commands.BadArgument("Not a valid previously-banned member.")
16
        return entity
17
18
19
def can_execute_action(ctx, user, target):
20
    return user.id == ctx.bot.owner_id or user == ctx.guild.owner or user.top_role > target.top_role
21
22
23
class MemberID(commands.Converter):
24
    async def convert(self, ctx, argument):
25
        try:
26
            m = await commands.MemberConverter().convert(ctx, argument)
27
        except commands.BadArgument:
28
            try:
29
                member_id = int(argument, base=10)
30
                m = await resolve_member(ctx.guild, member_id)
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable resolve_member does not seem to be defined.
Loading history...
31
            except ValueError:
32
                raise commands.BadArgument(f"{argument} is not a valid member or member ID.") from None
33
            except MemberNotFound:
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable MemberNotFound does not seem to be defined.
Loading history...
34
                # hackban case
35
                return type("_Hackban", (), {"id": member_id, "__str__": lambda s: f"Member ID {s.id}"},)()
36
37
        if not can_execute_action(ctx, ctx.author, m):
38
            raise commands.BadArgument("You cannot do this action on this user due to role hierarchy.")
39
        return m
40