aiogram || Как доабвить формулу в бота?
Здравствйте. Пишу бот на aiogram. Хочу сделать так, чтобы после нажатия инлайн-кнопки, пользователь ввел значения, которые бот обчислит по формуле:
*A = int(input("Длина: ")) B = int(input("Ширина: "))
area = A * B;
print("Площадь прямоугольника: ", area)*
Как это сделать после нажатия инлайн-кнопки? Буду благодарен.
Ответы (1 шт):
Автор решения: oleksandrigo
→ Ссылка
Вот тебе код. Только не забудь наделать проверок на входящие данные, а то тебе текста кинут и бот исключением тебя одарит
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import StatesGroup, State
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
import config
bot = Bot(token=config.BOT_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
class MathInput(StatesGroup):
num1 = State()
num2 = State()
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
markup = InlineKeyboardMarkup().add(
InlineKeyboardButton('Площадь квадрата', callback_data='math_start'))
await message.answer("text", reply_markup=markup)
@dp.callback_query_handler(text="math_start")
async def math_start(call: types.CallbackQuery):
await call.answer()
await call.message.answer("Введи первое число")
await MathInput.num1.set()
@dp.message_handler(state=MathInput)
async def get_num(message: types.Message, state: FSMContext):
async with state.proxy() as data:
if (await state.get_state()).split(":")[1] == 'num1':
data['num1'] = message.text
await message.answer("Введи второе число")
await MathInput.num2.set()
else:
num1 = float(data['num1'])
num2 = float(message.text)
await message.answer(f"Площадь равна {num1 * num2}")
await state.finish()
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)