Всем привет! Пытаюсь создать бота с фильмами и сериалами на питоне и в процессе создания возникла проблемка с выводом данных из бд
Суть бота такая, что сначала пользователь выбирает по кнопкам фильмы или сериалы, а затем ему выдаются жанры того что он выбрал и после выбора жанра из бд должен выдаваться
случайный фильм или сериал именно по
выбранному жанру .
Но тк на начальной стадии изучения данной тематики не могу понять как сделать вывод из бд при нажатии одного из жанров(При нажатии должно выходить фото, название, описание и дата)
from aiogram import Bot, Dispatcher, executor, types
from App import keyboards as kb
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.dispatcher import FSMContext
from dotenv import load_dotenv
import os
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from App import database as db
storage = MemoryStorage()
load_dotenv()
bot = Bot(os.getenv('TOKEN'))
dp = Dispatcher(bot=bot, storage=storage)
async def on_startup(_):
await db.db_start()
print('Бот запущен!')
@dp.message_handler(commands=['start'])
async def cmd_start(message: types.Message):
await db.cmd_start_db(message.from_user. id)
await message.answer_sticker('CAACAgIAAxkBAAMfZVnFYcTH_ot9mVSelHLMNxblcMgAAgUAA8A2TxP5al-agmtNdTME')
await message.answer(f'{message.from_user.first_name} приветствую тебя в боте с фильмами и сереалами БЕЗ КОДОВ!',
reply_markup=kb.main)
@dp.message_handler(commands=['id'])
async def cmd_id(message: types.Message):
await message.answer(f'{message.from_user.id}')
@dp.message_handler(text='Фильмы')
async def catalog(message: types.Message):
await message.answer(f'Выберете жанр фильма', reply_markup=kb.Film_list)
@dp.message_handler(text='Cериалы')
async def catalog(message: types.Message):
await message.answer(f'Выберете жанр сериала', reply_markup=kb.Series_list)
@dp.message_handler()
async def answer(message: types.Message):
await message.reply('К сожалению я тебя не понял :(')
@dp.callback_query_handler()
async def callback_query_keyboard(callback_query: types.CallbackQuery):
if callback_query.data == 'f-comedy':
await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Комедия')
elif callback_query.data == 'f-triller':
await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Триллер')
elif callback_query.data == 'f-fantasy':
await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Фэнтези')
elif callback_query.data == 'f-drama':
await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Драма')
elif callback_query.data == 'f-scream':
await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Ужасы')
elif callback_query.data == 'f-travel':
await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Приключения')
elif callback_query.data == 'f-fight':
await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Боевик')
elif callback_query.data == 'f-mult':
await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Мультфильм')
elif callback_query.data == 'f-detective':
await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Детектив')
elif callback_query.data == 's-comedy':
await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Комедия')
elif callback_query.data == 's-anime':
await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Аниме')
elif callback_query.data == 's-fantasy':
await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Фэнтези')
elif callback_query.data == 's-drama':
await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Драма')
elif callback_query.data == 's-detective':
await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Детектив')
elif callback_query.data == 's-fight':
await bot.send_message(chat_id=callback_query.from_user.id, text='Вы выбрали жанр Боевик')
if __name__ == '__main__':
executor.start_polling(dp, on_startup=on_startup, skip_updates=True)
Клавиатуры
from aiogram.types import ReplyKeyboardMarkup, InlineKeyboardButton, InlineKeyboardMarkup
main = ReplyKeyboardMarkup(resize_keyboard=True)
main.add('Фильмы').add('Cериалы')
Film_list = InlineKeyboardMarkup(row_width=2)
Film_list.add(InlineKeyboardButton(text='Комедия', callback_data='f-comedy'),
InlineKeyboardButton(text='Триллер', callback_data='f-triller'),
InlineKeyboardButton(text='Фэнтези', callback_data='f-fantasy'),
InlineKeyboardButton(text='Драма', callback_data='f-drama'),
InlineKeyboardButton(text='Ужасы', callback_data='f-scream'),
InlineKeyboardButton(text='Приключения', callback_data='f-travel'),
InlineKeyboardButton(text='Боевик', callback_data='f-fight'),
InlineKeyboardButton(text='Детектив', callback_data='f-detective'),
InlineKeyboardButton(text='Мультфильм', callback_data='f-mult'))
Series_list = InlineKeyboardMarkup(row_width=2)
Series_list.add(InlineKeyboardButton(text='Комедия', callback_data='s-comedy'),
InlineKeyboardButton(text='Фэнтези', callback_data='s-fantasy'),
InlineKeyboardButton(text='Драма', callback_data='s-drama'),
InlineKeyboardButton(text='Аниме', callback_data='s-anime'),
InlineKeyboardButton(text='Боевик', callback_data='s-fight'),
InlineKeyboardButton(text='Детектив', callback_data='s-detective'))
cancel = ReplyKeyboardMarkup(resize_keyboard=True)
cancel.add('Отмена')
И бд
import sqlite3 as sq
async def db_start():
global db, cur
db = sq.connect('tg.db')
cur = db.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS accounts("
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
"tg_id INTEGER, "
"cart_id TEXT)")
cur.execute("CREATE TABLE IF NOT EXISTS items("
"i_id INTEGER PRIMARY KEY AUTOINCREMENT, "
"name TEXT,"
"desc TEXT, "
"date TEXT, "
"photo TEXT, "
"genre TEXT)")
db.commit()
async def cmd_start_db(user_id):
user = cur.execute("SELECT * FROM accounts WHERE tg_id == {key}".format(key=user_id)).fetchone()
if not user:
cur.execute("INSERT INTO accounts (tg_id) VALUES ({key})".format(key=user_id))
db.commit()