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