90 lines
3.8 KiB
Python
90 lines
3.8 KiB
Python
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
||
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
|
||
from typing import List, Tuple
|
||
|
||
|
||
def get_auth_menu() -> InlineKeyboardMarkup:
|
||
"""Меню авторизации для неавторизованных пользователей"""
|
||
builder = InlineKeyboardBuilder()
|
||
builder.button(text="🔐 Войти", callback_data="login")
|
||
builder.button(text="📝 Зарегистрироваться", callback_data="register")
|
||
builder.adjust(1)
|
||
return builder.as_markup()
|
||
|
||
|
||
def get_main_menu() -> InlineKeyboardMarkup:
|
||
"""Главное меню для авторизованных пользователей"""
|
||
builder = InlineKeyboardBuilder()
|
||
builder.button(text="📚 Все книги", callback_data="books_all")
|
||
builder.button(text="⭐ Избранное", callback_data="favorites")
|
||
builder.button(text="🔍 Поиск по жанру", callback_data="search_genre")
|
||
builder.button(text="👤 Мой профиль", callback_data="profile")
|
||
builder.adjust(2, 2)
|
||
return builder.as_markup()
|
||
|
||
|
||
def get_book_keyboard(book_id: int, is_favorite: bool = False, page: int = 0, total_pages: int = 1) -> InlineKeyboardMarkup:
|
||
"""Клавиатура для отдельной книги с пагинацией"""
|
||
builder = InlineKeyboardBuilder()
|
||
|
||
# Кнопка добавления/удаления из избранного
|
||
if is_favorite:
|
||
builder.button(text="❌ Удалить из избранного", callback_data=f"remove_fav:{book_id}")
|
||
else:
|
||
builder.button(text="❤️ В избранное", callback_data=f"add_fav:{book_id}")
|
||
|
||
# Кнопки пагинации
|
||
nav_buttons = []
|
||
if page > 0:
|
||
nav_buttons.append(InlineKeyboardButton(text="⬅️ Назад", callback_data=f"books_page:{page-1}"))
|
||
|
||
nav_buttons.append(InlineKeyboardButton(text=f"{page+1}/{total_pages}", callback_data="page_info"))
|
||
|
||
if page < total_pages - 1:
|
||
nav_buttons.append(InlineKeyboardButton(text="➡️ Вперед", callback_data=f"books_page:{page+1}"))
|
||
|
||
builder.row(*nav_buttons)
|
||
builder.button(text="🏠 Главное меню", callback_data="main_menu")
|
||
|
||
builder.adjust(1, len(nav_buttons), 1)
|
||
return builder.as_markup()
|
||
|
||
|
||
def get_pagination_keyboard(page: int, total_pages: int, prefix: str = "books_page") -> InlineKeyboardMarkup:
|
||
"""Общая клавиатура пагинации"""
|
||
builder = InlineKeyboardBuilder()
|
||
|
||
nav_buttons = []
|
||
if page > 0:
|
||
nav_buttons.append(InlineKeyboardButton(text="⬅️ Назад", callback_data=f"{prefix}:{page-1}"))
|
||
|
||
nav_buttons.append(InlineKeyboardButton(text=f"{page+1}/{total_pages}", callback_data="page_info"))
|
||
|
||
if page < total_pages - 1:
|
||
nav_buttons.append(InlineKeyboardButton(text="➡️ Вперед", callback_data=f"{prefix}:{page+1}"))
|
||
|
||
builder.row(*nav_buttons)
|
||
builder.button(text="🏠 Главное меню", callback_data="main_menu")
|
||
|
||
return builder.as_markup()
|
||
|
||
|
||
def get_genres_keyboard(genres: List[Tuple[int, str]]) -> InlineKeyboardMarkup:
|
||
"""Клавиатура с жанрами (по 2 в строке)"""
|
||
builder = InlineKeyboardBuilder()
|
||
|
||
for genre_id, genre_name in genres:
|
||
builder.button(text=genre_name, callback_data=f"genre:{genre_id}")
|
||
|
||
builder.button(text="🏠 Главное меню", callback_data="main_menu")
|
||
builder.adjust(2)
|
||
return builder.as_markup()
|
||
|
||
|
||
def get_back_to_menu_keyboard() -> InlineKeyboardMarkup:
|
||
"""Простая клавиатура с возвратом в меню"""
|
||
builder = InlineKeyboardBuilder()
|
||
builder.button(text="🏠 Главное меню", callback_data="main_menu")
|
||
return builder.as_markup()
|
||
|