Почему-то не передается переменная при использовании FSMContext

Рейтинг: 2Ответов: 1Опубликовано: 31.05.2023

Пытаюсь передать переменную с помощью хранилища машины состояний. Но на мое удивление она не передается. Вообще ничего не передается. Будто вторая функция совершенно не работает, ведь даже сообщения с обычным текстом он не отправляет. Может быть я слепой конечно и не вижу каких-то очевидных вещей. Буду рад вашей помощи!)

@dp.message_handler(state=GameCheck.name)
async def from_name_to_id(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        data['name'] = message.text
        name_game = data.get('name')
    try:
        game_id_value = check_id(f'{name_game}')
        await GameCheck.name_id.set()
        await state.update_data(game_id=game_id_value)
    except UnboundLocalError:
        await bot.send_message(message.from_user.id, text='Убедитесь в правильности написания названия вашей игры, '
                                                          'ведь по нашим данным, такой игры нет в Steam.')
        await state.finish()


@dp.message_handler(state=GameCheck.name_id)
async def id2_handler(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        game_id = data['game_id']
    await bot.send_message(message.from_user.id, text=game_id)

P.S. Я удостоверился в том, что функция id2_handler не срабатывает. Попытался сделать вывод в терминал, когда дело доходит до нее, но ничего. Прилагаю место, где регистрирую состояния

class GameCheck(StatesGroup):
    name = State()
    id = State()
    name_id = State()
    base = State()

Так же в дополнении в check_id(f'{name_game}') возвращается число типа integer, но к решению вопроса это не относится уже. Жду ваших предложений!

Ответы

▲ 0

Попробуй вместо

async with state.proxy() as data:
    game_id = data['game_id']

использовать

data = await state.get_data()
game_id = data["game_id"]

UPD: И в функции from_name_to_id пропиши await GameCheck.name_id.set() после await state.update_data(game_id=game_id_value)