Делаю бота на VkBottle, написал свой декоратор для удобного подключения к функции, но пр использовании этого декоратора со встроенным декоратором от вкботтле вызывает ошибку.
То есть декоратор от vkbottle передает два аргумента: message и cmd, но когда я использую свой декоратор, то аргумент cmd до меня не доходит.
Код моего декоратора:
def db_active(func):
async def _wrapper(*args, **kwargs):
db = UserDB()
await db.connect()
try:
return await func(*args, **kwargs, db=db)
finally:
await db.close()
return _wrapper
Код самой функции
@db_active
@bp.on.message(text='/eval <cmd>')
async def eval_cmd(message: Message, cmd: str, db: UserDB) -> None:
if message.from_id == admin_id:
try:
result = eval(cmd)
await message.answer(str(result))
except Exception as ex:
await message.answer(f'Error!\n\n>> {ex}')
else:
await message.reply('Доступ закрыт.')
Вызывает ошибку в зависимости от того, какой декоратор я постаивл
первым:
Если первым стоит декоратор от vkbottle:
TypeError: eval_cmd() missing 1 required positional argument: 'cmd'
Если первым стоит декоратор от меня:
TypeError: eval_cmd() missing 1 required positional argument: 'db'