Рандомайзер в 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)