Рандомайзер в Telegram боте

Пытаюсь засунуть рандомайзер в тг бота. Задавал вопросы мне сказали учи FSM.
Пошел учить FSM и смотрел гайды на ютубе, но не помогло.

Я не могу найти ответ на один вопрос вопрос:
Как это сделать в aiogram?

while True 
    num1 = input("введи первое число: ") 
    num2 = input("введи второе число: ") 
    result = random.randint(num1, num2) 
    print(result) 

код:

from aiogram import Dispatcher, Bot, types  
from aiogram.types import Message, message  
from aiogram.filters import Command, CommandStart  
from aiogram.fsm.context import FSMContext  
from aiogram.fsm.state import State, StatesGroup  
import asyncio  
import random 

bot = Bot(TOKEN) 
dp = Dispatcher() 

num1 = None 
num2 = None 
res = None 

@dp.message(Command('random')) 
async def num_input(message: Message): 
while True: 
await message.answer("введи первое число: ") 
global num1 
global num2 
global res 
num1 = int(message.text) 
await message.answer("введи второе число: ") 
num2 = int(message.text) 
res = random.randint(num1, num2) 
await message.answer(res)

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

Автор решения: diasporx

FSM поможет управлять состояниями чата (например, ожидание ввода первого или второго числа) и позволяет боту обрабатывать сообщения от юзера в зависимости от текущего состояния.

from aiogram import Bot, Dispatcher, executor, types
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters import Command
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
import random

TOKEN = "Укажите ваш токен здесь"

bot = Bot(token=TOKEN)
dp = Dispatcher(bot, storage=MemoryStorage())

class RandomGenerator(StatesGroup):
    waiting_for_num1 = State()
    waiting_for_num2 = State()

@dp.message_handler(commands=['random'], state='*')
async def cmd_random(message: types.Message):
    await RandomGenerator.waiting_for_num1.set()
    await message.answer("Введите первое число:")

@dp.message_handler(state=RandomGenerator.waiting_for_num1)
async def process_num1(message: types.Message, state: FSMContext):
    try:
        num1 = int(message.text)
        await state.update_data(num1=num1)
        await RandomGenerator.waiting_for_num2.set()
        await message.answer("Введите второе число:")
    except ValueError:
        await message.answer("Неправильный формат.")

@dp.message_handler(state=RandomGenerator.waiting_for_num2)
async def process_num2(message: types.Message, state: FSMContext):
    try:
        num2 = int(message.text)
        data = await state.get_data()
        num1 = data.get('num1')
        result = random.randint(num1, num2)
        await message.answer(f"Случайное число между {num1} и {num2}: {result}")
        await state.finish()
    except ValueError:
        await message.answer("Неправильный формат")

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)
→ Ссылка