Не срабатывает хендлер aiogram
Прочитал документацию aiogram по состояниям, сделал структуру базовую, но почему-то не работает 2 хендлер. В состояниях еще не сильно разбираюсь)
Вот код:
@dp.message_handler(content_types=types.ContentTypes.TEXT, state='*')
async def text_handler(message: types.Message, state : FSMContext):
if message.text == labels.USER_MENU_BTN_1:
await state.update_data(user_id=message.from_user.id)
await message.reply(labels.CATEGORY_CHOOSE_MSG, reply=False, reply_markup=keyboards.question_category_list())
await Form.category.set()
elif message.text == labels.BACK_BTN:
await message.reply(labels.BACK_MSG, reply=False, reply_markup=keyboards.user_menu())
await state.reset_state()
await state.reset_data()
@dp.message_handler(content_types=types.ContentTypes.TEXT, state=Form.category)
async def category_set(message: types.Message, state: FSMContext):
if message.text == labels.CATEGORY_BTN_1:
await message.reply(labels.CATEGORY_CHOSEN_MSG.format(category=message.text), reply=False,
reply_markup=keyboards.back_keyboard())
elif message.text == labels.CATEGORY_BTN_2:
await message.reply(labels.CATEGORY_CHOSEN_MSG.format(category=message.text), reply=False,
reply_markup=keyboards.back_keyboard())
elif message.text == labels.CATEGORY_BTN_3:
await message.reply(labels.CATEGORY_CHOSEN_MSG.format(category=message.text), reply=False,
reply_markup=keyboards.back_keyboard())
await state.update_data(category=message.text)
await message.reply(labels.QUESTION_TEXT_MSG, reply=False, reply_markup=keyboards.back_keyboard())
await Form.next()
Код файла states, который импортируется так from states import Form:
from aiogram.dispatcher.filters.state import State, StatesGroup
class Form(StatesGroup):
user_id = State()
category = State()
text = State()
Если еще что-то нужно добавлю.
Ответы (1 шт):
Штош. Фикситься это в пару кликов. Берешь нижний хендлер, вырезаешь его и вставляешь над хендлером который сейчас выше.
Не срабатывает он по довольно просто причине: хендлеры проверяются по порядку сверху внизу. То есть если где-то условие подходит, то следующие хендлеры игнорируются.
В твоём случае @dp.message_handler(content_types=types.ContentTypes.TEXT, state='*')
срабатывает на все что является текстом и с любым стейтом (то есть хоть None, хоть какой-то определенный стейт) потому второй и не срабатывает.