Не получается достать сообщение из машины состояний в aiogram (Python)
Я отправляю пользователю inline-клаву и при нажатии на 1 кнопку прошу пользователя ввести город и пытаюсь сохранить этот город в машину состояний. А при попытке (при нажатии на 2 кнопку) достать сообщение из машины состояний и отправить ответ бот перестаёт работать.
@dp.message_handler(Command(["start", "help"]))
async def start(message: types.Message):
keyboard = InlineKeyboardMarkup(inline_keyboard=[
[
InlineKeyboardButton(
text="? Выбрать город ?",
callback_data="city"
),
InlineKeyboardButton(
text="?Узнать погоду?",
callback_data="weather"
)
]
])
await message.answer("Привет, это WeatherBot! Ты можешь узнать у меня погоду ?", reply_markup=keyboard)
@dp.callback_query_handler(text="city")
async def type_city(call: CallbackQuery):
await call.message.answer("Отправьте название города, погоду которого вы хотите узнать:")
await ChoiceCity.city.set()
await call.answer()
@dp.message_handler(state=ChoiceCity.city)
async def save_place(message: types.Message, state: FSMContext):
place = message.text
await state.update_data(plc1=place)
@dp.callback_query_handler(text="weather")
async def send_weather(call: CallbackQuery, state: FSMContext):
data = await state.get_data()
place = data.get("plc1")
mgr = config.owm.weather_manager()
observation = mgr.weather_at_place(place)
w = observation.weather
t = w.temperature("celsius")
await call.message.answer(f"В городе {place} {t['temp']}°, ощущается как {t['feels_like']}°")
states.py:
from aiogram.dispatcher.filters.state import StatesGroup, State
class ChoiceCity(StatesGroup):
city = State()
Ответы (1 шт):
Автор решения: lordcodes
→ Ссылка
Получается так, что ты нажимаешь на кнопку которая принимает state=None , а у текущее состояние (state) на данный момент у тебя ChoiceCity.city
Решение такое, нужно заменить эту строку:
@dp.callback_query_handler(text="weather", state='*')
Или
@dp.callback_query_handler(text="weather", state=ChoiceCity.city)