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

→ Ссылка