Пользовательский декоратор не работает с командами discord.pyPython

Программы на Python
Anonymous
Пользовательский декоратор не работает с командами discord.py

Сообщение Anonymous »

Сейчас я работаю над своим ботом в discord.py 2.0. Каждый раз, когда я создаю новую команду, мне нужно проверять, зарегистрирован ли пользователь в боте. Если нет, то отправьте заявку на регистрацию. Раньше мне приходилось прописывать эту проверку в каждой новой команде. Я посчитал это неразумным дублированием кода и поставил эту проверку в декораторе. Но когда я назначаю команде декоратор, она не добавляется в бот. Ее просто не существует. Я никогда раньше не сталкивался с такой проблемой. Если кто-то сталкивался с такой проблемой или имеет представление, в чем может быть проблема, то буду очень признателен услышать об этом.
Это класс команд.

Код: Выделить всё

from discord.ext import commands

from main import db

from scr.phrases_func import dict_to_str
from scr.cfg import phrases
from scr.command_author_check import command_author_check

class GeneralCommands(commands.Cog):
def __init__(self, bot: commands.Bot):
self.bot = bot

@commands.command()
async def info(self, ctx):
auth = ctx.message.author
if db.check_user(auth):
if db.get_user(auth).permissions_level >= 20:
await auth.send(ctx.message.author.mention + phrases.master_greeting + dict_to_str(phrases.master_commands))
else:
await auth.send(ctx.message.author.mention + phrases.slaves_greeting + dict_to_str(phrases.slaves_commands))
else:
await auth.send(ctx.message.author.mention + phrases.general_greeting + dict_to_str(phrases.slaves_commands))

@commands.command()
@command_author_check()
async def test(self, ctx):
await ctx.send("ПОЛУЧИЛОСЬ")

async def setup(bot: commands.Bot):
await bot.add_cog(GeneralCommands(bot))
Это декоратор.

Код: Выделить всё

from main import db
from scr.cfg import phrases
from scr import phrases_func

def command_author_check(permissions_level: int = 1):
print("command_author_check")

def decorator(func):
print("decorator")

async def wrapper(ctx, *args, **kwargs):
print("wrapper")
auth = ctx.message.author
if db.check_user(auth):
if db.get_user(auth).permissions_level >= permissions_level:
return await func(ctx, *args, **kwargs)
else:
await auth.send(ctx.message.author.mention + phrases.slaves_greeting + phrases_func.dict_to_str(phrases.slaves_commands))
else:
await auth.send(ctx.message.author.mention + phrases.general_greeting + phrases_func.dict_to_str(phrases.slaves_commands))
return wrapper
return decorator
Я пытался вызвать в своем декораторе команду, уже оформленную декоратором discord.exe.command.commands, но это ни к чему не привело.


Подробнее здесь: https://stackoverflow.com/questions/786 ... y-commands

Вернуться в «Python»