141 lines
5.1 KiB
Python
141 lines
5.1 KiB
Python
from aiogram.types import InlineKeyboardMarkup
|
|
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
|
|
|
|
|
def _add_pagination_row(
|
|
builder: InlineKeyboardBuilder,
|
|
*,
|
|
page_token: str | None,
|
|
page_index: int,
|
|
total_pages: int,
|
|
) -> None:
|
|
if not page_token or total_pages <= 1:
|
|
return
|
|
|
|
if page_index > 0:
|
|
builder.button(text="◀", callback_data=f"page:{page_token}:{page_index - 1}")
|
|
builder.button(
|
|
text=f"{page_index + 1}/{total_pages}",
|
|
callback_data=f"page:{page_token}:{page_index}",
|
|
)
|
|
if page_index + 1 < total_pages:
|
|
builder.button(text="▶", callback_data=f"page:{page_token}:{page_index + 1}")
|
|
|
|
|
|
def help_home_keyboard(is_admin: bool) -> InlineKeyboardMarkup:
|
|
builder = InlineKeyboardBuilder()
|
|
builder.button(text="Сегодня", callback_data="help:today")
|
|
builder.button(text="Неделя", callback_data="help:week")
|
|
builder.button(text="Самые шумные", callback_data="help:top")
|
|
builder.button(text="Давно висят", callback_data="help:stale")
|
|
if is_admin:
|
|
builder.button(text="Админ-панель", callback_data="admin:open")
|
|
builder.adjust(2, 2, 1)
|
|
else:
|
|
builder.adjust(2, 2)
|
|
return builder.as_markup()
|
|
|
|
|
|
def help_result_keyboard(
|
|
back_callback: str,
|
|
is_admin: bool,
|
|
*,
|
|
page_token: str | None = None,
|
|
page_index: int = 0,
|
|
total_pages: int = 1,
|
|
) -> InlineKeyboardMarkup:
|
|
builder = InlineKeyboardBuilder()
|
|
_add_pagination_row(
|
|
builder,
|
|
page_token=page_token,
|
|
page_index=page_index,
|
|
total_pages=total_pages,
|
|
)
|
|
builder.button(text="Назад", callback_data=back_callback)
|
|
if total_pages > 1:
|
|
builder.adjust(3, 1)
|
|
else:
|
|
builder.adjust(1)
|
|
return builder.as_markup()
|
|
|
|
|
|
def admin_home_keyboard() -> InlineKeyboardMarkup:
|
|
builder = InlineKeyboardBuilder()
|
|
builder.button(text="Синхронизация", callback_data="admin:menu:sync")
|
|
builder.button(text="Получатели", callback_data="admin:menu:recipients")
|
|
builder.button(text="Topic и routing", callback_data="admin:menu:routing")
|
|
builder.button(text="Mute rules", callback_data="admin:mute_list")
|
|
builder.button(text="Назад", callback_data="help:open")
|
|
builder.adjust(2, 2, 1)
|
|
return builder.as_markup()
|
|
|
|
|
|
def admin_sync_keyboard() -> InlineKeyboardMarkup:
|
|
builder = InlineKeyboardBuilder()
|
|
builder.button(text="Запустить sync", callback_data="admin:sync")
|
|
builder.button(text="Автосинк: вкл/выкл", callback_data="admin:settings:sync_enabled")
|
|
builder.button(text="Время отчёта", callback_data="admin:settings:digest_time")
|
|
builder.button(text="Назад", callback_data="admin:open")
|
|
builder.adjust(2, 1, 1)
|
|
return builder.as_markup()
|
|
|
|
|
|
def admin_routing_keyboard() -> InlineKeyboardMarkup:
|
|
builder = InlineKeyboardBuilder()
|
|
builder.button(text="Текущая схема", callback_data="admin:ownership")
|
|
builder.button(text="Topic backend", callback_data="admin:settings:topic:backend")
|
|
builder.button(text="Topic frontend", callback_data="admin:settings:topic:frontend")
|
|
builder.button(text="Topic digest", callback_data="admin:settings:topic:digest")
|
|
builder.button(text="Назад", callback_data="admin:open")
|
|
builder.adjust(2, 2, 1, 1)
|
|
return builder.as_markup()
|
|
|
|
|
|
def admin_recipients_keyboard() -> InlineKeyboardMarkup:
|
|
builder = InlineKeyboardBuilder()
|
|
builder.button(text="Backend", callback_data="admin:recipients:backend")
|
|
builder.button(text="Frontend", callback_data="admin:recipients:frontend")
|
|
builder.button(text="Назад", callback_data="admin:open")
|
|
builder.adjust(2, 1)
|
|
return builder.as_markup()
|
|
|
|
|
|
def admin_recipient_group_keyboard(group_name: str) -> InlineKeyboardMarkup:
|
|
builder = InlineKeyboardBuilder()
|
|
builder.button(text="Добавить ID", callback_data=f"admin:recipients:add:{group_name}")
|
|
builder.button(text="Удалить ID", callback_data=f"admin:recipients:del:{group_name}")
|
|
builder.button(text="Назад", callback_data="admin:menu:recipients")
|
|
builder.adjust(2, 1)
|
|
return builder.as_markup()
|
|
|
|
|
|
def admin_mute_keyboard() -> InlineKeyboardMarkup:
|
|
builder = InlineKeyboardBuilder()
|
|
builder.button(text="Добавить правило", callback_data="admin:mute:add")
|
|
builder.button(text="Удалить правило", callback_data="admin:mute:del")
|
|
builder.button(text="Назад", callback_data="admin:open")
|
|
builder.adjust(2, 1)
|
|
return builder.as_markup()
|
|
|
|
|
|
def admin_result_keyboard(
|
|
back_callback: str,
|
|
*,
|
|
page_token: str | None = None,
|
|
page_index: int = 0,
|
|
total_pages: int = 1,
|
|
) -> InlineKeyboardMarkup:
|
|
builder = InlineKeyboardBuilder()
|
|
_add_pagination_row(
|
|
builder,
|
|
page_token=page_token,
|
|
page_index=page_index,
|
|
total_pages=total_pages,
|
|
)
|
|
builder.button(text="Назад", callback_data=back_callback)
|
|
if total_pages > 1:
|
|
builder.adjust(3, 1)
|
|
else:
|
|
builder.adjust(1)
|
|
return builder.as_markup()
|