Discord Python:如何设置自定义参数以允许使用或不使用函数

问题描述 投票:0回答:1

[嘿,我有一个不和谐的机器人,我想为某些命令设置“权限”,例如职员命令,具有给定角色甚至最低级别的命令都可以使用。

所以我尝试将每个命令放在类中:

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......}做一个变量,但这真的是一个很好的解决方案吗?

最后,我考虑过要设立一个特别类来争取许可。

但是最好的方法是什么?还是更好?

感谢您的帮助!

python python-3.x discord discord.py
1个回答
0
投票

不相关:您正在滥用课程。您正在做的事情“有效”,但却难以置信。


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!')
© www.soinside.com 2019 - 2024. All rights reserved.