Aiogram 2 и sqlite3. Вот часть кода:
from aiogram import types, executor, Bot, Dispatcher
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 ReplyKeyboardMarkup, KeyboardButton,InlineKeyboardMarkup, InlineKeyboardButton, ReplyKeyboardRemove #Remove удаление клавы
import sqlite3
import config
from database import database_start, create_user, edit_user, pay
import spk
conn = sqlite3.connect('profiles.db')
cursor = conn.cursor()
async def on_startup(_):
await database_start()
storage = MemoryStorage()
bot = Bot(config.token)
price = types.LabeledPrice(label="Подписка на бота", amount=199*100)
dp = Dispatcher(bot, storage=storage)
#Кнопки клавиатуры
def kb_1() -> ReplyKeyboardMarkup:
kb = ReplyKeyboardMarkup(resize_keyboard=True)
kb.add(KeyboardButton('Приступим!'))
return kb
def kb_2() -> ReplyKeyboardMarkup:
kb = ReplyKeyboardMarkup(resize_keyboard=True)
kb.add(KeyboardButton('Мужской'))
kb.add(KeyboardButton('Женский'))
return kb
def kb_3() -> ReplyKeyboardMarkup:
kb = ReplyKeyboardMarkup(resize_keyboard=True)
kb.add(KeyboardButton('Показать анкету и изменить данные'))
kb.add(KeyboardButton('Информация о тренере'))
kb.add(KeyboardButton('Расчёт суточной потребности калорий'))
kb.add(KeyboardButton('Оплатить подписку'))
kb.add(KeyboardButton('Лекционный материал по тренировкам и питанию'))
return kb
def kb_4() -> ReplyKeyboardMarkup:
kb = ReplyKeyboardMarkup(resize_keyboard=True)
kb.add(KeyboardButton('Сидячий образ жизни'))
kb.add(KeyboardButton('Небольшая активность'))
kb.add(KeyboardButton('Умеренная активность'))
kb.add(KeyboardButton('Высокая активность'))
kb.add(KeyboardButton('Очень высокая активность'))
kb.add(KeyboardButton('Назад'))
return kb
#Инлайновые кнопки
catalog_list = InlineKeyboardMarkup(row_width=2)
catalog_list.add(InlineKeyboardButton(text='⏲Изменить вес', callback_data='weight'),
InlineKeyboardButton(text='Изменить рост', callback_data='height'),
InlineKeyboardButton(text='Изменить возраст', callback_data='age'),
InlineKeyboardButton(text='⚤Изменить пол', callback_data='gender'),
InlineKeyboardButton(text='Изменить ФИО', callback_data='full_name'))
class ClientStates(StatesGroup):
fullname = State()
gender = State()
weight = State()
height = State()
age = State()
#Изменение данных анкеты (За new_weight принимает сообщение к которому привязана inline клавиатура)
@dp.callback_query_handler(lambda c: c.data == 'weight')
async def callback_query_keyboard(callback_query: types.CallbackQuery):
await bot.send_message(chat_id=callback_query.from_user.id, text='Напишите Ваш вес:')
new_weight = callback_query.message.text
user_id = callback_query.from_user.id
cursor.execute(f"Update users SET weight ='{new_weight}' where user_id={user_id}")
conn.commit()
cursor.close()
conn.close()
await bot.send_message(chat_id=callback_query.from_user.id, text="Вес успешно изменён!", parse_mode='html', reply_markup=kb_3())