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()
Пролистал всю документацию и обыскал все статьи ничего не было найдено ( Заранее всем спасибо )