有没有一种方法可以通过在类中额外输入来动态更改命令名称?

时间:2020-04-09 18:23:04

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

这是我的代码:

    @commands.group(name=f'{prefix}stop', hidden=True)
    @commands.is_owner()
    async def stop(self, ctx):

        await ctx.message.add_reaction('\N{THUMBS UP SIGN}')
        await self.bot.logout()
        sys.exit()

我想知道命令名称中是否可以包含前缀。

我尝试在__init__中添加一个额外的输入,例如:__init__(self, bot, prefix='')可以管理是否需要前缀。然后,我尝试使用f'{self.prefix}stop'的名称,但是返回了NameError: name 'self' is not defined

1 个答案:

答案 0 :(得分:2)

不,您的group装饰器是在创建类时(而不是在实例创建时)进行评估的。但是,由于Cog.__new__为每个实例创建了组/命令的副本,因此我们可以在Cog.__init__内修改名称:

from discord.ext import commands

class MyCog(commands.Cog):
    def __init__(self, bot, prefix=''):
        self.stop.name = prefix + self.stop.name

    @commands.group(hidden=True)
    async def stop(self, ctx):
        await ctx.send(self.stop.name)