Есть ли способ динамически изменить имя команды с дополнительным вводом в классе? - PullRequest
0 голосов
/ 09 апреля 2020

Вот мой код:

    @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 Ответ

2 голосов
/ 09 апреля 2020

Нет, ваш 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)
...