将具有角色的bo​​t命令列入黑名单?

时间:2018-10-15 12:44:08

标签: python python-3.x discord discord.py discord.py-rewrite

您好,无论如何,您可以按角色将某人从使用所有漫游器命令中列入黑名单?我目前正在寻找一种方法来解决我的机器人,该机器人位于Discord重写分支上。

谢谢

2 个答案:

答案 0 :(得分:1)

使用name装饰器(如果可能使用global check的最简单方法)。以下内容基于角色id进行操作,但是您可以使用from discord.utils import get @bot.check async def globally_blacklist_roles(self, ctx): blacklist = ["BAD_ROLE_1", "BAD_ROLE_2"] # Role names return not any(get(ctx.guild.roles, name=name) in ctx.author.roles for name in blacklist) 编写等效版本:

Role

例如,可以通过为列入黑名单的角色缓存__global_check_once对象来实现某些加速。

如果您使用的是嵌齿轮,则可以通过指定特殊名称__global_check__global_check_once来表示希望将协程作为全局检查。这是documented here。您似乎正在寻找class Blacklisted(commands.CheckFailure): pass class YourCog: def __init__(self, bot): self.bot = bot def __global_check_once(self, ctx): blacklist = ["BAD_ROLE_1", "BAD_ROLE_2"] # Role names if any(get(ctx.guild.roles, name=name) in ctx.author.roles for name in blacklist): raise Blacklisted() else: return True async def on_command_error(self, ctx, error): if isinstance(error, Blacklisted): await ctx.send("You cannot use this command.") ,但您可能想尝试一下。我认为唯一的区别是在子命令中使用命令组时调用了多少次

{{1}}

答案 1 :(得分:0)

def __global_check_once(self, ctx):
    blacklist = ["Blacklisted", "Blacklist"]  # Role names
    return not any(get(ctx.guild.roles, name=name) in ctx.author.roles for name in blacklist)

async def __global_check_once_error(ctx, error):
    if isinstance(error, __global_check_once):
        await ctx.send('You cannot use that command!')