initial commit
This commit is contained in:
89
keyboards/inline.py
Normal file
89
keyboards/inline.py
Normal file
@@ -0,0 +1,89 @@
|
||||
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()
|
||||
|
||||
Reference in New Issue
Block a user