Как вы создаете собственные декораторы для discord.py? - PullRequest
0 голосов
/ 18 февраля 2020

Я знаю, что задавал этот вопрос до , но новое обновление неожиданно сломало мой код. Вот что у меня есть:

def predicate(ctx):
    return Moderation.mod_role in ctx.author.roles


has_mod_role = commands.check(predicate)


class Moderation(commands.Cog):
    mod_role = None

    def __init__(self, bot: commands.Bot):
        self.bot = bot
        self.mod_role = ...

    @commands.command()
    @has_mod_role
    async def command(self, ctx):
        ...

Раньше это работало, но теперь Moderation.mod_role изменился с роли, определенной в функции, на None, поэтому команды не работают ни с кем, даже с если им нужна необходимая роль.

Я использую python 3.8 и discord.py 1.3.1.

1 Ответ

0 голосов
/ 19 февраля 2020

Я исправил проблему с помощью глобальных переменных. Вот мой код, если у кого-то еще есть эта проблема:

def has_mod_role():
    def predicate(ctx):
        return mod_role in ctx.author.roles
    return commands.check(predicate)


class Moderation(commands.Cog):
    mod_role = None

    def __init__(self, bot: commands.Bot):
        self.bot = bot
        global mod_role
        mod_role = ...

    @commands.command()
    @has_mod_role()
    async def command(self, ctx, ...):
        ...
...