Как сделать переход по нажатию на кнопку в машину состояния inline button + FSM Telegram bot?
Использую inline button + FSM Telegram bot, я хочу при нажатии на инлайн кнопку под фото, чтобы я попал в машину состояний, совершил некоторые расчеты
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram import types, Dispatcher
from create_bot import dp, bot
from aiogram.types import ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
import requests
import telebot
import json
import os
class FSMYenPrice(StatesGroup):
Yena = State()
wait_for_number = State()
# Начало диалога
async def command_start(message: types.Message):
try:
keyboardStart = types.ReplyKeyboardMarkup(resize_keyboard=True)
buttonbPriceCheck = ["Расчитать стоимость"]
keyboardStart.add(*buttonbPriceCheck)
inline_button_test = InlineKeyboardButton("Test", callback_data="test")
inline_keyboard = InlineKeyboardMarkup().add(inline_button_test)
img = open('img/menuimg.png', 'rb')
await bot.send_photo(message.from_user.id, img, 'Нажми кнопку для выполнения команды test',reply_markup=inline_keyboard, disable_notification=True)
except:
await bot.send_message(message.from_user.id, "ОШибка")
# Обработчик инлайн-кнопки
async def test_callback_handler(query: types.CallbackQuery, state: FSMContext):
# Переходим в состояние ожидания числа
await FSMYenPrice.wait_for_number.set()
# Отправляем сообщение с просьбой ввести число
await bot.answer_callback_query(query.id)
await bot.send_message(query.from_user.id, "Введите число:")
# Обработчик ввода числа
async def handle_number(message: types.Message, state: FSMContext):
try:
# Получаем число из сообщения
number = float(message.text)
# Выполняем расчет
result = number * 0.65
# Отправляем результат пользователю
await bot.send_message(message.from_user.id, f"Результат: {result}")
except ValueError:
await bot.send_message(message.from_user.id, "Некорректный ввод. Пожалуйста, введите число.")
# Завершаем машину состояний
await state.finish()
# Регистрация обработчиков
def register_handlers_client(dp: Dispatcher):
dp.register_message_handler(command_start, commands=['start','help'])
dp.register_callback_query_handler(test_callback_handler, lambda c: c.data == 'test', state=FSMYenPrice.Yena)
dp.register_message_handler(handle_number, state=FSMYenPrice.wait_for_number)