Aiogram 3 не устанавливает состояние

Устанавливаю состояние в aiogram 3, ошибок никаких нет. Но если проверить, установилось ли нужное состояние - оказывается, что ничего не произошло.

Вот файл с состояниями:

from aiogram.fsm.state import State, StatesGroup 
from aiogram.fsm.context import FSMContext 
from aiogram import types 
from aiogram.types import CallbackQuery 
from aiogram import Router 
import keyboards 

class math_weight(StatesGroup): 
weight_grifa = State() 

router = Router() 
@router.callback_query() 
async def start_math(callback: CallbackQuery, state: FSMContext): 
if callback.data == 'Подобрать блины ?️‍♂️': 
await callback.message.delete() 
await callback.message.answer_photo(photo='AgACAgIAAxkBAANHZec4DIHIUkAplxq3oKJrgkBmldkAAp3XMRsEbzhLv215ac4ipk0BAAMCAAN5AAM0BA', caption='`Выбери вес грифа...`', reply_markup=keyboards.weight_kb) 
await state.set_state(math_weight.weight_grifa) 

@router.callback_query(math_weight.weight_grifa) 
async def write_fullweight(callback: CallbackQuery, state: FSMContext): 
if callback.data == '20': 
#Для проверки ниже    
print("Вес 20 кг") 
weight_grifa = int(callback.data) 
await callback.answer(f'Вес грифа установлен: {weight_grifa} Кг')

Файл с клавиатурой:

from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
weight_kb = InlineKeyboardMarkup(inline_keyboard=[ 
[InlineKeyboardButton(text='20 КГ ?', callback_data='20')], 
[InlineKeyboardButton(text='12.5 КГ ✊', callback_data='12.5')] 
])

Ответы (1 шт):

Автор решения: Nikolai Kolupaev

Ваш код выглядит вполне правильно, и я вижу, что вы используете состояния в aiogram 3. Однако, чтобы убедиться, что состояние устанавливается корректно, давайте проверим несколько вещей:

Проверьте, что вы правильно настроили FSM (Finite State Machine) в вашем боте. Убедитесь, что вы создали экземпляр FSMContext и передали его в обработчики состояний. Убедитесь, что вы используете правильные имена состояний. В вашем случае, состояние называется weight_grifa, и вы его успешно устанавливаете в обработчике start_math. Проверьте, что обработчик write_fullweight вызывается после выбора веса грифа. Убедитесь, что вы нажимаете на кнопку с весом 20 КГ и что обработчик write_fullweight действительно вызывается. Посмотрите на логи. Если у вас есть какие-либо ошибки или предупреждения, они могут помочь выявить проблему. Если после проверки вышеуказанных пунктов проблема остается, попробуйте добавить дополнительные логи в обработчики, чтобы увидеть, что происходит внутри них. Например, вы можете добавить print-сообщения в обработчик write_fullweight, чтобы убедиться, что он вызывается и что значение веса грифа правильно устанавливается.

→ Ссылка