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()