[嘿,我有一个不和谐的机器人,我想为某些命令设置“权限”,例如职员命令,具有给定角色甚至最低级别的命令都可以使用。
所以我尝试将每个命令放在类中:
class class_test:
def __init__(self):
self.minimal_level = 0
self.minimal_role_name = "valid_member"
self.reset_time = 5
self.pass_role = 0
self.last_execution = 0
self.executions = 0
self.ban_members = []
self.ban_role_name = ["mute", "warn 1", "warn 2"]
@bot.command()
async def __call__(self, ctx, *args, **kwargs):
try:
if self.minimal_role in ctx.author.roles :
await ctx.send("do somthing")
else:
await ctx.send("This role no able to do this command !")
except Exception as exception:
await ctx.send(f"an error as occurs : ```{exception}```")
但是它根本不起作用。然后我发现了齿轮,但是如果我在每个命令中都使用它们,我将无法按staff_commands,game_economy,game_fight,game_utils,设置等部分进行区分,...
我还想为每个命令在我的Cog类中使用self.function_foo_perm = {minimal_level : 0, minimal_rol......}
做一个变量,但这真的是一个很好的解决方案吗?
最后,我考虑过要设立一个特别类来争取许可。
但是最好的方法是什么?还是更好?
感谢您的帮助!
不相关:您正在滥用课程。您正在做的事情“有效”,但却难以置信。
discord.py库中有许多检查修饰符,可以满足您的许多需求:https://discordpy.readthedocs.io/en/rewrite/ext/commands/api.html?highlight=has_role#checks
如果您担任的角色,]:>
@commands.has_role("rolename"/roleid) @commands.has_any_role("rolename"/roleid,"rolename"/roleid,"rolename"/roleid ...) @bot.command() async def ...
自定义检查可以按照以下方式实施:
def check_if_it_is_me(ctx):
return ctx.message.author.id == 85309593344815104
@bot.command()
@commands.check(check_if_it_is_me)
async def only_for_me(ctx):
await ctx.send('I know you!')