discord.py-rewrite - 如何在 cogs 中使用自定义检查?

discord.py-rewrite - How to use custom checks in cogs?

因此,在我的 bot.py 主文件中,我有:

class Bot(commands.Bot):

    # BOT ATTRIBUTES

    class default_cooldown:
        maxcommands = ...
        seconds = ...
        mode = ...

    class my_exception(commmands.CommandError): pass

    def my_check(self):
        def predicate(ctx):
            if ctx.author in a_list: return True
            raise self.my_exception

bot = Bot(...)

现在我还有一个 cog 文件,我想在其中使用 Bot().my_check() 检查和我的 Bot().default_cooldown() class:

class Cog(commands.Cog):

    def __init__(self, bot):
        self.bot = bot

    @commands.command()
    @self.bot.my_check()
    @commands.cooldown(self.bot.default_cooldown().maxcommands, self.bot.default_cooldown().seconds, self.bot.default_cooldown().mode)
    async def a_command(self, ctx):
        pass

但是我得到一个错误,说 self 没有在我的检查和冷却时间中定义。谁能帮我解决这个问题?

方法在创建 class 对象时创建一次,而不是针对每个实例单独创建。您有几个选择:

  1. 将需要出现在这两个地方的代码提取到只包含该代码的第三个模块中,然后将其导入到您的其他两个文件中
  2. 将您的 Bot 定义从您的 bot 的执行移到一个单独的模块中,并使 my_check 成为 staticmethod。然后你可以通过 Bot.my_check 而不是通过特定实例访问它。
  3. setup 中定义您的 cog,以便 class 在创建时知道 bot 实例。