state handler не слушает сообщения
Я создал StatesGroup
:
class SendNotificationState(StatesGroup):
text = State()
group = State()
form_of_education = State()
confirmation = State()
И, соответственно, создал хендлеры для того, чтобы слушать сообщения в ответ на мои State
, вот один из них:
@dp.message(Command("send_notification"))
async def send_notification_handler(message: Message, state: FSMContext):
logging.debug("the send_notification_handler has worked now")
await state.clear()
await state.set_state(SendNotificationState.message)
await state.update_data({"user_id": message.from_user.id})
await message.answer("")
@dp.message(SendNotificationState.message)
async def send_notification_message_handler(message: Message, state: FSMContext):
logging.debug("the send_notification_message_handler has worked now")
await state.update_data({"message": message.text})
await state.set_state(SendNotificationState.group)
keyboard_builder = ReplyKeyboardBuilder().add(KeyboardButton(text="1")).add(KeyboardButton(text="2")).add(KeyboardButton(text="3"))
await message.answer(
"",
reply_markup=keyboard_builder.as_markup())
Исходя из логов, после ввода команды /send_notification
человек получает нужный state
(SendNotificationState.message
), но при этом, когда я ввожу сообщения, нужный хендлер не работает. Нет, ошибки нет, он просто не срабатывает (я не вижу лога по началу его работы).
При этом если ввести /cancel
в чат и в хендлере команды вывести в нём текущий state
, state
будет на месте (SendNotificationState:message
).
Если просмотреть все хендлеры dispatcher
'a при помощи такой незамысловатой конструкции:
handlers = dispatcher.message.handlers
for handler in handlers:
print(f"Хендлер: {handler.callback.__name__}, Фильтры: {dp}")
то я увижу все хендлеры (то есть они есть).
В чём же дело?
Ответы (1 шт):
В вашем примере кода в SendNotificationState
отсутствует стейт message
, к которому вы обращаетесь в await state.set_state(SendNotificationState.message)
и в хенделере.
Если же мы меняем несуществующий стейт на какой-либо другой, то всё прекрасно работает.
Если и это не поможет, то тогда скорее всего проблема не в той части кода, которую вы приложили.