将Discord.py中的角色列入黑名单

2024-09-24 22:19:56 发布

您现在位置:Python中文网/ 问答频道 /正文

在尝试了这么多东西之后,我想到了一个主意,就是邀请你们这些聪明的人!我想为一个命令黑名单3个角色。但我尝试的一切都失败了

以下是我编写的代码:

member = ctx.message.author
roleA = get(member.guild.roles, name="Rote Birdys")
roleB = get(member.guild.roles, name="Grüne Birdys")
roleC = get(member.guild.roles, name="Blaue Birdys")

if commands.has_any_role(roleA, roleB, roleC):
    return

没什么用,我又试了一些,但也没用。也许我真的很笨,但我需要在几个星期内完成这个项目,我被困在这里了

我希望你能帮助我:)


Tags: 代码name命令角色messageget主意member
1条回答
网友
1楼 · 发布于 2024-09-24 22:19:56

这只是has_any_role检查,但是向后的。我还创建了一个新错误,如MissingAnyRole

from discord.ext.commands import check, CheckFailure
import discord.utils

class HasForbiddenRole(CheckFailure):
    def __init__(self, forbidden_roles):
        self.forbidden_roles = forbidden_roles

        forbidden= ["'{}'".format(role) for role in forbidden_roles]

        if len(missing) > 2:
            fmt = '{}, or {}'.format(", ".join(forbidden[:-1]), forbidden[-1])
        else:
            fmt = ' or '.join(forbidden)

        message = "You have at least one of the forbidden roles: {}".format(fmt)
        super().__init__(message)

def lacks_every_role(*items):
    def predicate(ctx):
        if not isinstance(ctx.channel, discord.abc.GuildChannel):
            raise NoPrivateMessage()

        getter = functools.partial(discord.utils.get, ctx.author.roles)
        if not any(getter(id=item) is not None if isinstance(item, int) else getter(name=item) is not None for item in items):
            return True
        raise HasForbiddenRole(items)

    return check(predicate)

使用情况与任何其他检查一样:

@lacks_every_role("Rote Birdys", "Grüne Birdys", "Blaue Birdys")  # You could also use role ids
@bot.command()
async def comm(ctx):
    ...

相关问题 更多 >