⚙️ Команды¶
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.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 локализует это при регистрации команд для каждой локали.