Как правильно работать с 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