FSM и open weather в телегам боте python
Задумка следующая: есть команда /weather
, при ее вводе идет запрос города, после чего идет запрос на open weather через библиотеку requests
. так понимаю, реализовать надо через FSM, но вот не понимаю сам принцип работа FSM/ вроде как должен быть всего один стейт на запрос города, не совсем понимаю как должно выглядеть на версии aiogram 3.x
, на второй версии все работает отлично. подскажите, пожалуйста за автоматы в третьей версии)
@weather_router.message(Command("weather"))
class Town(StatesGroup):
town = State()
async def town(message: Message, state: FSMContext):
await message.answer(f"{message.from_user.first_name}, введи город")
await state.set_state(Town.town)
async def townn(message: Message):
await message.answer(f"Ваш город\n{message.text}")
получаю ошибку Town() takes no arguments
Ответы (1 шт):
Автор решения: ZxNuClear
→ Ссылка
Если вкратце, то вот так:
class Town(StatesGroup):
town = State()
@router.message(Command("weather"))
async def town(message: Message, state: FSMContext):
await message.answer(f"{message.from_user.first_name}, введи город")
await state.set_state(Town.town)
@router.message(Town.town)
async def townn(message: Message, state: FSMContext):
await message.answer(f"Ваш город {message.text}")
ответ пользователя будет в message.text
в функции townn