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