Files
Solo_bot/handlers/admin/panel/keyboard.py
T
2026-02-11 03:40:01 +03:00

166 lines
5.2 KiB
Python

from typing import Any
from aiogram.filters.callback_data import CallbackData
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from aiogram.utils.keyboard import InlineKeyboardBuilder
from handlers.buttons import BACK, MAIN_MENU
from hooks.hook_buttons import insert_hook_buttons
from hooks.hooks import run_hooks
class AdminPanelCallback(CallbackData, prefix="admin_panel"):
action: str
page: int
def __init__(self, /, **data: Any) -> None:
if "page" not in data or data["page"] is None:
data["page"] = 1
super().__init__(**data)
async def build_panel_kb(admin_role: str) -> InlineKeyboardMarkup:
builder = InlineKeyboardBuilder()
is_super = admin_role == "superadmin"
is_moderator = admin_role == "moderator"
builder.row(
InlineKeyboardButton(
text="👤 Поиск пользователя",
callback_data=AdminPanelCallback(action="search_user").pack(),
),
InlineKeyboardButton(
text="🔑 Поиск подписок",
callback_data=AdminPanelCallback(action="search_key").pack(),
),
)
if is_super:
builder.row(
InlineKeyboardButton(
text="🖥️ Управление серверами",
callback_data=AdminPanelCallback(action="clusters").pack(),
)
)
builder.row(
InlineKeyboardButton(
text="💸Управление тарифами",
callback_data=AdminPanelCallback(action="tariffs").pack(),
)
)
builder.row(
InlineKeyboardButton(
text="🤖 Управление ботом",
callback_data=AdminPanelCallback(action="management").pack(),
)
)
builder.row(
InlineKeyboardButton(
text="📢 Рассылка",
callback_data=AdminPanelCallback(action="sender").pack(),
),
InlineKeyboardButton(
text="🎟️ Купоны",
callback_data=AdminPanelCallback(action="coupons").pack(),
),
)
if is_super:
builder.row(
InlineKeyboardButton(
text="🎁 Подарки",
callback_data=AdminPanelCallback(action="gifts").pack(),
),
InlineKeyboardButton(
text="🧩 Мои модули",
callback_data=AdminPanelCallback(action="modules").pack(),
),
)
builder.row(
InlineKeyboardButton(
text="📊 Статистика",
callback_data=AdminPanelCallback(action="stats").pack(),
),
InlineKeyboardButton(
text="📈 Аналитика",
callback_data=AdminPanelCallback(action="ads").pack(),
),
)
else:
builder.row(
InlineKeyboardButton(
text="🎁 Подарки",
callback_data=AdminPanelCallback(action="gifts").pack(),
)
)
module_buttons = await run_hooks("admin_panel", admin_role=admin_role)
builder = insert_hook_buttons(builder, module_buttons)
if not is_moderator:
builder.row(
InlineKeyboardButton(
text="⚙️ Настройки",
callback_data=AdminPanelCallback(action="settings").pack(),
)
)
builder.row(InlineKeyboardButton(text=MAIN_MENU, callback_data="profile"))
markup = builder.as_markup()
if is_super:
ads_callback = AdminPanelCallback(action="ads").pack()
emoji_button = InlineKeyboardButton(
text="😀 Эмоджи",
callback_data=AdminPanelCallback(action="emoji").pack(),
)
inserted = False
for index, row in enumerate(markup.inline_keyboard):
for button in row:
if getattr(button, "callback_data", None) == ads_callback:
markup.inline_keyboard.insert(index + 1, [emoji_button])
inserted = True
break
if inserted:
break
if not inserted:
markup.inline_keyboard.append([emoji_button])
return markup
def build_restart_kb() -> InlineKeyboardMarkup:
builder = InlineKeyboardBuilder()
builder.button(
text="✅ Да, перезагрузить",
callback_data=AdminPanelCallback(action="restart_confirm").pack(),
)
builder.row(build_admin_back_btn())
builder.adjust(1)
return builder.as_markup()
def build_admin_back_kb(action: str = "admin") -> InlineKeyboardMarkup:
return build_admin_singleton_kb(BACK, action)
def build_admin_singleton_kb(text: str, action: str) -> InlineKeyboardMarkup:
builder = InlineKeyboardBuilder()
builder.row(build_admin_btn(text, action))
return builder.as_markup()
def build_admin_back_btn(action: str = "admin") -> InlineKeyboardButton:
return build_admin_btn(BACK, action)
def build_admin_btn(text: str, action: str) -> InlineKeyboardButton:
return InlineKeyboardButton(
text=text,
callback_data=AdminPanelCallback(action=action).pack(),
)