Чтобы понять, почему состояние не записывается, давайте рассмотрим несколько возможных причин и решений:
Проверка правильности использования FSMContext:
Убедитесь, что вы правильно импортировали и используете FSMContext. Также убедитесь, что состояние и данные обновляются корректно.
Проверка правильности определения состояний:
Убедитесь, что состояния Choice.choice_I и Quest_5.quest_II правильно определены и импортированы.
Проверка логики обновления состояния:
Убедитесь, что логика обновления состояния и данных корректна. В вашем коде есть несколько мест, где состояние и данные обновляются, но не проверяется результат этих операций.
Проверка корректности списка list_5:
Убедитесь, что список list_5 определен и содержит нужные элементы.
Проверка корректности клавиатуры Kb.main_kb:
Убедитесь, что клавиатура Kb.main_kb определена и корректно используется.
Вот пример, как можно улучшить ваш код с дополнительными проверками и отладочной информацией:
from aiogram import Router, F
from aiogram.types import Message
from aiogram.dispatcher import FSMContext
import random
router = Router()
list_5 = ["Question 1", "Question 2"] # Пример списка вопросов
Kb = ... # Определите вашу клавиатуру здесь
class Choice:
choice_I = "choice_I"
class Quest_5:
quest_II = "quest_II"
@router.message(F.text == '№5', Choice.choice_I)
async def numb_5(message: Message, state: FSMContext):
await message.answer('Подбираю...')
Question_5 = random.choice(list_5)
await message.answer(text=Question_5, reply_markup=Kb.main_kb)
if Question_5 == list_5[0]:
await state.update_data(quest_II=message.text)
await state.set_state(Quest_5.quest_II)
print('True_0')
state_data = await state.get_data()
current_state = await state.get_state()
print(f"Current state: {current_state}, State data: {state_data}")
if current_state == Quest_5.quest_II:
print('Its work')
else:
print('No')
elif Question_5 == list_5[1]:
print('True_1')
await state.update_data(quest_II=message.text)
await state.set_state(Quest_5.quest_II)
state_data = await state.get_data()
current_state = await state.get_state()
print(f"Current state: {current_state}, State data: {state_data}")
if current_state == Quest_5.quest_II:
print('Its work')
else:
print('No')
В этом примере добавлены дополнительные отладочные сообщения, чтобы проверить текущее состояние и данные состояния после их обновления. Это поможет вам понять, где может быть проблема.