aiorgam python обработка неизвестных комманд

Я разрабатываю Telegram-бота с использованием библиотеки aiogram. Бот должен обрабатывать сообщение "регистрация", запускать процесс регистрации и затем принимать ФИО пользователя. Однако, при вводе ФИО после запуска регистрации бот отвечает сообщением о том, что команда не распознана.

Из-за данного фрагмента кода он ловит все несуществующие команды, в том числе и фио:

@dp.message()
    async def error_mes(message: Message):
        await message.reply("команда не распознана")

Причем в логах он пишет как обработанный (is handled)

Starting the server...
INFO:bot.main:Запуск бота....
INFO:aiogram.dispatcher:Start polling
INFO:aiogram.dispatcher:Run polling for bot @Study116_Tele_bot id=7387336312 - 'TeleBotStudy'
INFO:aiogram.event:Update id=204031827 is handled. Duration 203 ms by bot id=7387336312
INFO:aiogram.event:Update id=204031828 is handled. Duration 78 ms by bot id=7387336312
INFO:aiogram.event:Update id=204031829 is handled. Duration 94 ms by bot id=7387336312

1.файл main.py:

  • Я настраиваю бота и диспетчер.
  • Регистрация обработчиков команд и сообщений.
  • Включение маршрутизатора для обработки состояний регистрации.

2.файл registration.py:

  • Определен класс состояний RegistrationState для обработки состояния ожидания ввода ФИО.
  • Класс Registration содержит методы для начала регистрации и обработки введенного ФИО.

Вопрос

Как сделать обработку несуществующих команд, чтобы например в регистрации бот писал что такой команды нет в регистрации а вне регистрации например такой команды у бота нет

main.py

from aiogram import Bot, Dispatcher, F
import logging
from aiogram.client.default import DefaultBotProperties
from aiogram.filters import ExceptionTypeFilter
from aiogram.fsm.context import FSMContext

from . import config
from aiogram.types import Message, ErrorEvent
from aiogram.filters.command import Command
from aiogram.enums import ParseMode
from .handlers.registration import Registration, router

from .utils.var import hello

logging.basicConfig(level=getattr(logging, config.LOGGING_LEVEL))
logger = logging.getLogger(__name__)


async def main():
    bot = Bot(
        token=config.TELEGRAM_TOKEN,
        default=DefaultBotProperties(
            parse_mode=ParseMode.HTML
        )
    )
    dp = Dispatcher()
    dp.include_router(router)

    @dp.message(Command('start'))
    async def send_welcome(message: Message):
        await message.reply("Привет! Я ваш Telegram-бот. Как я могу помочь?")  # дописать ответ на комманду /start

    @dp.message(F.text.in_(hello))
    async def hi_message(message: Message):
        await message.answer("Привет !")

    @dp.message(F.text.lower() == 'регистрация')
    async def handle_registration(message: Message, state: FSMContext):
        registration_handler = Registration()
        await registration_handler.start_registration(message, state)

    @dp.message()
    async def error_mes(message: Message):
        await message.reply("команда не распознана")




    logger.info("Запуск бота....")
    await dp.start_polling(bot)

registration.py

from aiogram.types import Message
from aiogram.fsm.context import FSMContext
from aiogram.filters.state import State, StatesGroup
from aiogram import Router

router = Router()

class RegistrationState(StatesGroup):
    waiting_for_fio = State()

class Registration:

    async def start_registration(self, message: Message, state: FSMContext):
        await message.answer("Введите ваше ФИО:")
        await state.set_state(RegistrationState.waiting_for_fio)

    @router.message(RegistrationState.waiting_for_fio)
    async def process_fio(message: Message, state: FSMContext):
        await state.update_data(waiting_for_fio=message.text)
        data = await state.get_data()
        await message.answer(f"Спасибо, ваше ФИО: {data['waiting_for_fio']} сохранено!")
        await state.clear()

Пролистал всю документацию и обыскал все статьи ничего не было найдено ( Заранее всем спасибо )


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