Не работает фильтр Command в aiogram
Начал писать очередного бота, сделал один хэндлер
from aiogram import types
async def restart(command: types.Message):
await command.reply('Какое-нибудь приветствие ¯\_(ツ)_/¯')
Дальше зарегистрировал его:
# тут все импорты
async def start():
dp = Dispatcher()
bot = Bot(API_TOKEN)
dp.message.register(restart, Command(commands=['start', 'stop', 'cancel'])
await dp.start_polling(bot)
if __name__ == '__main__':
asyncio.run(start())
Ну тут всё понятно, но когда запустил и проверил команду, то в логах обнаружилось вот это:
Cause exception while process update id=649896428 by bot id=6419449955
TypeError: restart() got multiple values for argument 'command'
Вообще никогда не сталкивался с таким, на форумах тоже ничего нет, помогите, пожалуйста
Ответы (2 шт):
Ошибка, с которой вы столкнулись, указывает на то, что функции restart() передается несколько значений для аргумента command.
Основная причина этой ошибки заключается в неправильном вызове register метода для регистрации хэндлера команды. Вы должны передать функцию restart без вызова или передачи аргументов.
В вашем случае, исправьте следующую строку:
dp.message.register(restart, Command(commands=['start', 'stop', 'cancel'])
на
dp.message.register(restart, commands=['start', 'stop', 'cancel'])
Таким образом, вы не будете передавать аргумент command в restart() функцию при регистрации хэндлера команды, и ошибка должна быть исправлена.
Не используй command для обозначения самого Message. Переименуй в message или msg. command используется для передачи команды в хендлер, потому у тебя возникает конфликт
from aiogram import types
from aiogram.filters import CommandObject
async def restart(message: types.Message, command: CommandObject):
await message.reply('Какое-нибудь приветствие ¯\_(ツ)_/¯')
CommandObject
Instance of this object is always has command and it prefix. Can be passed as keyword argument **command** to the handler