Как в телеграмм боте на aiogram сделать чтобы бот реагировал на второе сообщение в условие?

У меня есть бот который решает задачи по геометрии.Например,пользователь введет площадь круга,бот отправляет ему сообщение "Напишите радиус круга",потом у меня возникает вопрос как взять этот радиус круга.Через if проверить я не могу, а как отдельную функцию тоже не получиться,потому что там не только площадь круга.

@dp.message_handler(content_types=types.ContentTypes.TEXT)
async def mess(message:types.Message, state: FSMContext):
     if message.text=="Площадь круга":
         await bot.send_message(message.chat.id,'Напишите радиус круга')
         user_data = await state.get_data()                                                    
         r=float(message.text)
         await message.answer(f"Площадь круга равна " + str(area_of_circle(r)))

Ответы (3 шт):

Автор решения: Hayk Sardaryan
import logging
from aiogram import Bot, Dispatcher, executor, types
from aiogram.dispatcher import FSMContext
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import State, StatesGroup

class DataInput(StatesGroup):
    r = State()

bot = Bot(token="#токен")
dp = Dispatcher(bot, storage=MemoryStorage())

@dp.message_handler(commands=['radius'])
async def hello(message: types.Message):
      await bot.send_message(message.from_user.id, 'Напишите радиус круга')
      await DataInput.r.set()

@dp.message_handler(state=DataInput.r)
async def radius(message: types.Message, state: FSMContext):
    r = message.text
    await message.answer(f"Площадь круга равна " + str(area_of_circle(r)))
    await state.finish()

if __name__ == '__main__':
    executor.start_polling(dp,skip_updates=True)
→ Ссылка
Автор решения: Edward Grachev

Я использую вложенную функцию на которую вещаю декоратор Когда срабатывает декоратор команды, вызывается функция которая задает вопрос пользователю, после чего ожидает ответа и работает декоратор сообщения, который ловит текст, после выполнения вложенной функции. будет выполнен return

@dispatcher.message_handler(commands=['convert_usd_rub'])
async def convert_usd_rub(message: types.Message):
    await bot.send_message(message.chat.id, 'Какую сумму вы хотите перевести из USD в RUB?')

    @dispatcher.message_handler()
    async def usd_rub(message: types.Message):
        r = requests.get('https://www.cbr-xml-daily.ru/daily_json.js')
        r = r.json()
        r = r.get('Valute')
        usd = r.get('USD')
        usd = usd.get('Value')
        usd = "%.2f" % usd
        number = re.search("\d+\.\d+", message.text, flags=0)
        try:
            if number is None:
                number = str(message.text + '.00')
                conver = float(usd) * float(number)
                now = datetime.datetime.now()
                date = now.strftime("%Y-%m-%d %H:%M")
                conver = "%.2f" % conver
                await bot.send_message(message.chat.id, f'Курс валют:  {number}$ это {conver}₽\nКурс актуален на {date}')
            else:
                conver = float(usd) * float(number.group())
                conver = "%.2f" % conver
                now = datetime.datetime.now()
                date = now.strftime("%Y-%m-%d %H:%M")
                await bot.send_message(message.chat.id, f'Курс валют:  {number.group()}$ это {conver}₽\nКурс актуален на {date}')
        except:
            await bot.send_message(message.chat.id,f'Введено не корректное значение: {message.text}')
    return
→ Ссылка
Автор решения: Edward Grachev

Если я правильно понял тебя и ты хочешь сделать через if то вот. После return бот больше не принимает команды. Все введенные данные будут сохраняться в список data который можно вернуть пользователю или распарсить как тебе нужно. После чего ты можешь вызвать класс и передать туда данные

@dispatcher.message_handler(commands=['match'])
async def match(message: types.Message):
        await  bot.send_message(message.chat.id, 'Какую команду выполнить?')
        data = []
        @dispatcher.message_handler()
        async def text(message: types.Message):
            if message.text == "1":
                data.append(1)
                await bot.send_message(message.chat.id,'Привет')
            elif message.text == "2":
                data.append(2)
                await bot.send_message(message.chat.id, "Пока")
            elif message.text == "3":
                class_a = a().aa(data)
                data.append(class_a)
                await bot.send_message(message.chat.id,data)
            else:
                return

class a():
    def aa(self, arr ):
        b = []
        for i in arr:
            b.append(str(i) + 'класс АААААА')
        return b
→ Ссылка