⚙️ Команды

Raito добавляет к хендлерам команд удобные возможности через флаги, middleware и автоматическую регистрацию.

  • @rt.description(...) добавляет описания для списка слэш-команд Telegram

  • @rt.hidden скрывает хендлеры из списка команд

  • @rt.params(...) извлекает и проверяет параметры команды

  • автоматический middleware для разбора параметров

  • автоматическая регистрация через raito.register_commands(...)


Описания

Используйте @rt.description(), чтобы прикрепить к команде локализованное (или обычное) описание.

from aiogram import Router
from aiogram.types import Message
from aiogram.filters import Command
from raito import rt

router = Router(name="ban")

@router.message(Command("ban"))
@rt.description("Ban a user by ID")
async def ban(message: Message):
    ...

Оно будет использовано при регистрации команд.


Скрытые команды

Используйте @rt.hidden, чтобы убрать хендлер из списка команд.

@router.message(Command("debug"))
@rt.hidden
async def debug(message: Message):
    ...

Разбор параметров

Используйте @rt.params(...), чтобы автоматически разбирать параметры из /command arg1 arg2.

@router.message(Command("ban"))
@rt.params(user_id=int)
async def ban(message: Message, user_id: int):
    await message.answer(f"🔨 User {user_id} banned.")

Поддерживаемые типы: str, int, bool, float

Если параметр отсутствует или некорректен, Raito либо покажет автоматически собранную подсказку (с description), либо вызовет пользовательское событие ошибки через raito.command_parameters_error.


Автоматическая регистрация

Как только вы используете флаги, просто вызовите:

await raito.register_commands(bot)

Это:

  • соберёт все хендлеры

  • использует их флаги (описание, роли, скрытость и т.д.)

  • зарегистрирует команды с учётом ролей и локалей

Ещё Raito сгруппирует команды по ролям, назначит разным пользователям разные наборы команд и добавит к описаниям эмодзи ролей (например, [👑] Ban a user).


Локализация

Описания поддерживают LazyProxy из aiogram.utils.i18n. Если вы используете контекст i18n:

@rt.description(__("Ban a user"))
def ...

Raito локализует это при регистрации команд для каждой локали.