KeyBoard в aiogram. Вывод 3-ёх запросов. С присвоением значений в переменные
Не понимаю, как подвязать к кнопке "Добавить данные" функции пользовательского ввода, а после эти данные вывести сообщением.
from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import KeyboardButton, ReplyKeyboardMarkup
from aiogram.dispatcher import FSMContext
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import State, StatesGroup
import sqlite3
TOKEN = "6142380702:AAFA5Mih2v_01lneuyqVBbvdNeIZrgBtmTE"
bot = Bot(token=TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
db = sqlite3.connect('fio.db')
c = db.cursor()
btn_back = KeyboardButton('<--')
btn1 = KeyboardButton('Посмотреть данные')
btn2 = KeyboardButton('Добавить данные')
rp1 = ReplyKeyboardMarkup(resize_keyboard=True)
rp1.add(btn1, btn2)
btn3 = KeyboardButton('Фамилии на "А"')
btn4 = KeyboardButton('Имена на "А"')
btn5 = KeyboardButton('Отчество на "А"')
rp2 = ReplyKeyboardMarkup(resize_keyboard=True)
rp2.add(btn3, btn4, btn5, btn_back)
@dp.message_handler(commands=['start'])
async def start(a: types.Message):
await a.answer("Привет", reply_markup=rp1)
@dp.message_handler()
async def menu(a: types.Message):
if a.text == "Посмотреть данные":
await bot.send_message(a.chat.id, "Выберите функцию:", reply_markup=rp2)
elif a.text == "<--":
await bot.send_message(a.chat.id, "Выберите функцию:", reply_markup=rp1)
elif a.text == "Добавить данные":
await bot.send_message(a.chat.id, "Вводите свои данные.")
else:
await bot.send_message(a.chat.id, "Ошибка", reply_markup=rp1)
`
class UserState(StatesGroup):
user_name = State()
user_lname = State()
user_fname = State()
@dp.message_handler()
async def user_add_info(a: types.Message):
if a.text == "Вводите свои данные.":
await bot.send_message(a.chat.id, "Введите фамилию: ")
await UserState.user_lname.set()
@dp.message_handler(state=UserState.user_lname)
async def get_user_name(a: types.Message, s: FSMContext):
await s.update_data(user_lname=a.text)
await a.answer("Введите имя: ")
await UserState.next()
@dp.message_handler(state=UserState.user_name)
async def get_user_name(a: types.Message, s: FSMContext):
await s.update_data(user_name=a.text)
await a.answer("Введите отчество: ")
await UserState.next()
@dp.message_handler(state=UserState.user_fname)
async def get_iuser_fname(a: types.Message, s: FSMContext):
await s.update_data(user_fname=a.text)
data = await s.get_data()
await a.answer(f"Ваше ФИО: {data['user_lname'], data['user_name'], data['user_fname']}")
await s.finish()
`
if __name__ == "__main__":
executor.start_polling(dp, skip_updates=True)