Как правильно работать с Command в Aiogramm?

Вот мой код и в нем выдает ошибку о том, что неверно использовано Command, до меня вообще не доходит:

import random

from aiogram import Router, F
from aiogram.types import Message
from aiogram.filters import Command, CommandObject, CommandStart

from keybord import reply

router = Router()

@router.message(F.text.in_('hello'))
async def start(message: Message):
    await message.answer('Hello', reply_markup=reply.main)

@router.message(Command(['rn', 'random-number'])) 
async def get_rabdom_number(message: Message, command: CommandObject):
    a, b = [int(n) for n in command.args.split('-')]
    rnum = random.randint(a, b)

    await message.reply(f'Random number: {rnum}') 

Ответы (1 шт):

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

Command немного не так используется, оно может принимать только одну команду за раз. Если ты хочешь использовать один роутер для 2 команд, надо разбить их на 2 блока. В твоём случае это будет выглядеть так:

@router.message(Command('rn')) 
    async def get_rabdom_number(message: Message, command: CommandObject):
        a, b = [int(n) for n in command.args.split('-')]
        rnum = random.randint(a, b)
    
        await message.reply(f'Random number: {rnum}')
    
@router.message(Command('random-number')) 
    async def get_rabdom_number(message: Message, command: CommandObject):
        a, b = [int(n) for n in command.args.split('-')]
        rnum = random.randint(a, b)
    
        await message.reply(f'Random number: {rnum}')

Оно будет работать на один роутер, но для каждой команды свой отдельный алгоритм выполнения. Кстати, если не указать фильтр F.text

@router.message(F.text, Command('rn')) 

то router сработает даже на картинку с подписью /rn

→ Ссылка