В aiogram конфликт callback data и машины состояний
Пишу погодного бота. Хочу, чтобы была возможность функционала некого меню (инлайн кнопки выбора вариантов показа погоды и кнопки "меню" и "назад"). Но возникает следующая проблема: для отправки геолокации годится только обычная клавиатура и для отслеживания ее нажатия, соответственно нужно установить state по ее нажатию, но так же нужно добавить инлайн клавиатуру, с кнопками "назад" и "меню" в том же хендлере. В итоге получается, что как только пользователь получает предложение отправить свою геолокацию - устанавливается state, который не дает возможность по callback data от кнопки "назад" вернутся в предыдущее меню, пока не отправит свою геолокаю, тем самым закончив state. Может кто то сталкивался с таким и знает, как это решить?
Вот проблемный хендлер:
@dp.callback_query_handler(text="now")
async def by_geolocation_weather_now(call: CallbackQuery):
await call.answer()
await call.message.answer(text='Нажми кнопку "отправить геолокацию"', reply_markup=send_geolocation)
await call.message.answer(text="Для возвращения в предыдущее или главное меню нажмите:",
reply_markup=comeback_to_2_branchline)
await PushButton.get_geolocation_weather_now.set()
Хендлер, который ловит state и финиширует его:
@dp.message_handler(content_types=['location'], state=PushButton.get_geolocation_weather_now)
async def weather_by_location(message: types.Message, state: FSMContext):
lat = message.location.latitude
lon = message.location.longitude
text = new_weather(lat=lat, lon=lon, how_many_days=0)
await message.answer(text="Ищу погоду по вашей геолокации...")
await asyncio.sleep(3.0)
await message.answer(text=text, reply_markup=comeback_to_2_branchline)
await state.finish()