CallBack Data не обрабатывается в телеграм боте
Пишу бота для телеграм с aiogram. Сначала пользователь нажимает на кнопку "Промокод", а после сообщение бота обновляется и и появляется текст "Введите промокод:" с инлайн кнопкой назад, но так как начинает ожидаться текстовое сообщение, то call data перестает обрабатьваться и вернуться в меню невозможно. Можно как - то обьединить message и callback_query хэндлеры?
@dp.callback_query_handler(text='promo')
async def promosystem(call: types.CallbackQuery):
global msgid
await call.message.edit_text(f"Введите промокод:", reply_markup=ikb_back)
msgid = call.message.message_id
await promo.msgtext.set()
@dp.message_handler(state=promo.msgtext)
async def checkpromo(message: types.Message, state=FSMContext):
isex = OpenAIDB.isexistpromo(message.text)
await state.finish()
await message.delete()
Ответы (1 шт):
Автор решения: LovelyForest
→ Ссылка
Ответ на данный вопрос очень прост: перед вызовом message_handler мы вызываем еще один callback_query_handler с параметром "state = '*' и call.data кнопки:
@dp.callback_query_handler(text='promo')
async def promosystem(call: types.CallbackQuery):
global msgid
await call.message.edit_text(f"Введите промокод:", reply_markup=ikb_back)
msgid = call.message.message_id
await promo.msgtext.set()
@dp.callback_query_handler(text='back', state="*")
async def backprofile(call: types.CallbackQuery, state: FSMContext):
await state.finish()
profile = OpenAIDB.getprofile(call.from_user.id)
await call.message.edit_text(f'Ваше имя: {profile[1]}\nВаш ID: {profile[0]}\n\nСтатус подписки: неактивна \n\nКоличество оставшихся запросов: {profile[3]}\nКоличество использованных запросов: {profile[2]}', reply_markup=ikb_profile)
@dp.message_handler(state=promo.msgtext)
async def checkpromo(message: types.Message, state=FSMContext):
isex = OpenAIDB.isexistpromo(message.text)
await state.finish()
await message.delete()