Не работает фильтр 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 шт):

Автор решения: Aidar

Ошибка, с которой вы столкнулись, указывает на то, что функции restart() передается несколько значений для аргумента command.

Основная причина этой ошибки заключается в неправильном вызове register метода для регистрации хэндлера команды. Вы должны передать функцию restart без вызова или передачи аргументов.

В вашем случае, исправьте следующую строку:

dp.message.register(restart, Command(commands=['start', 'stop', 'cancel'])

на

dp.message.register(restart, commands=['start', 'stop', 'cancel'])

Таким образом, вы не будете передавать аргумент command в restart() функцию при регистрации хэндлера команды, и ошибка должна быть исправлена.

→ Ссылка
Автор решения: Kuro Angel

Не используй 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
→ Ссылка