Задать вопрос
@MalblshProgrammist

FSM переход срабатывает не корректно, в чем может быть ошибка?

Необходимо осуществить переход от функции:
@router.message(FSMFillForm.fill_street)
async def process_street_sent(message: Message, state: FSMContext, address_result):
    await state.update_data(fill_list_street=address_result)
    data = await state.get_data()
    list_streets = data.get('fill_list_street', [])

    await message.answer(text=LEXICON_STREET['fill_street'], reply_markup=AddressesIKB.get_search_streets_ikb(list_streets))
    
    await state.set_state(FSMFillForm.fill_home)
    await state.storage.get_data()

К функции:
@router.callback_query((FSMFillForm.fill_home), F.data.startswith('search_streets_'))
async def process_home_sent(callback: CallbackQuery, state: FSMContext, step: int = None) -> None:
    await state.update_data(fill_street=callback.data.split('_')[-1])
    data = await state.get_data()
    street_id = data.get('fill_street')

    list_home = await Addresses.get_search_houses(street_id=street_id)

    await callback.message.edit_text(text=LEXICON_HOME['list_home'], 
                                          reply_markup=AddressesIKB.get_homes_ikb(list_home, offset=0, limit=12))
    
    await state.set_state(FSMFillForm.fill_address)


Если не добавлять строку await state.storage.get_data() то переход в функцию process_home_sent не осуществляется, при добавлении await state.storage.get_data() переход в функцию происходит (но с ошибками, это не верный подход для перехода в нужную функцию). Всё дело с FSM когда у функции process_home_sent убираю проверку на (FSMFillForm.fill_home) из роутера, тоже переход осуществляется нормально. Помогите пожалуйста разобраться с данной проблемой. Где может быть нарушена логика кода с моей стороны?

Опережая возможные варианты решений:
  • Это не связано с Асинхронной задержкой
  • Состояние FMS в функции process_street_sent действительно находится в ожидании состояния fill_home print(f"State after set_state: {await state.get_state()}")
  • Вопрос задан
  • 56 просмотров
Подписаться 1 Средний 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы