是否可以通过在类中添加额外的输入来动态更改命令的名称?

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

这是我的代码:

    @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

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

否,您的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)
© www.soinside.com 2019 - 2024. All rights reserved.