Files
remnawave-minishop/bot/keyboards/inline/admin_keyboards.py
T
2025-05-14 08:11:59 +00:00

82 lines
6.5 KiB
Python

from aiogram .utils .keyboard import InlineKeyboardBuilder ,InlineKeyboardButton
from aiogram .types import InlineKeyboardMarkup ,WebAppInfo
from typing import Optional ,List ,Any
import math
from config .settings import Settings
def get_admin_panel_keyboard (i18n_instance ,lang :str ,settings :Settings )->InlineKeyboardMarkup :
_ =lambda key ,**kwargs :i18n_instance .gettext (lang ,key ,**kwargs )
builder =InlineKeyboardBuilder ()
builder .button (text =_ (key ="admin_stats_button"),callback_data ="admin_action:stats")
builder .button (text =_ (key ="admin_broadcast_button"),callback_data ="admin_action:broadcast")
builder .button (text =_ (key ="admin_create_promo_button"),callback_data ="admin_action:create_promo")
builder .button (text =_ (key ="admin_view_promos_button"),callback_data ="admin_action:view_promos")
builder .button (text =_ (key ="admin_ban_user_button"),callback_data ="admin_action:ban_user_prompt")
builder .button (text =_ (key ="admin_unban_user_button"),callback_data ="admin_action:unban_user_prompt")
builder .button (text =_ (key ="admin_view_banned_users_button"),callback_data ="admin_action:view_banned:0")
builder .button (text =_ (key ="admin_view_logs_menu_button"),callback_data ="admin_action:view_logs_menu")
builder .button (text =_ (key ="admin_sync_panel_button"),callback_data ="admin_action:sync_panel")
builder .adjust (2 ,2 ,2 ,2 ,1 )
return builder .as_markup ()
def get_logs_menu_keyboard (i18n_instance ,lang :str )->InlineKeyboardMarkup :
_ =lambda key ,**kwargs :i18n_instance .gettext (lang ,key ,**kwargs )
builder =InlineKeyboardBuilder ()
builder .button (text =_ (key ="admin_view_all_logs_button"),callback_data ="admin_logs:view_all:0")
builder .button (text =_ (key ="admin_view_user_logs_prompt_button"),callback_data ="admin_logs:prompt_user")
builder .row (InlineKeyboardButton (text =_ (key ="back_to_admin_panel_button"),callback_data ="admin_action:main"))
return builder .as_markup ()
def get_logs_pagination_keyboard (current_page :int ,total_pages :int ,base_callback_data :str ,i18n_instance ,lang :str ,back_to_logs_menu :bool =False )->InlineKeyboardMarkup :
_ =lambda key ,**kwargs :i18n_instance .gettext (lang ,key ,**kwargs )
builder =InlineKeyboardBuilder ()
row_buttons =[]
if current_page >0 :
row_buttons .append (InlineKeyboardButton (text ="⬅️ "+_ ("prev_page_button",default ="Prev"),callback_data =f"{base_callback_data}:{current_page - 1}"))
if current_page <total_pages -1 :
row_buttons .append (InlineKeyboardButton (text =_ ("next_page_button",default ="Next")+" ➡️",callback_data =f"{base_callback_data}:{current_page + 1}"))
if row_buttons :builder .row (*row_buttons )
if back_to_logs_menu :
builder .row (InlineKeyboardButton (text =_ (key ="admin_logs_menu_title"),callback_data ="admin_action:view_logs_menu"))
else :
builder .row (InlineKeyboardButton (text =_ (key ="back_to_admin_panel_button"),callback_data ="admin_action:main"))
return builder .as_markup ()
def get_banned_users_keyboard (users :List [Any ],current_page :int ,total_users_banned :int ,i18n_instance ,lang :str ,settings :Settings )->InlineKeyboardMarkup :
_ =lambda key ,**kwargs :i18n_instance .gettext (lang ,key ,**kwargs );builder =InlineKeyboardBuilder ()
page_size =settings .LOGS_PAGE_SIZE
total_pages =math .ceil (total_users_banned /page_size )if page_size >0 else 1
if total_users_banned ==0 :total_pages =1
for user_row in users :
user_display =user_row ['first_name']or f"ID: {user_row['user_id']}";
if user_row ['username']:user_display +=f" (@{user_row['username']})"
else :user_display =f"ID: {user_row['user_id']}"if not user_row ['first_name']else user_display
builder .button (text =user_display ,callback_data =f"admin_user_card:{user_row['user_id']}:{current_page}")
pagination_row =[]
if current_page >0 :pagination_row .append (InlineKeyboardButton (text ="⬅️ "+_ ("prev_page_button",default ="Prev"),callback_data =f"admin_action:view_banned:{current_page - 1}"))
if (current_page +1 )*page_size <total_users_banned :pagination_row .append (InlineKeyboardButton (text =_ ("next_page_button",default ="Next")+" ➡️",callback_data =f"admin_action:view_banned:{current_page + 1}"))
if pagination_row :builder .row (*pagination_row )
builder .row (InlineKeyboardButton (text =_ (key ="back_to_admin_panel_button"),callback_data ="admin_action:main"));builder .adjust (1 );return builder .as_markup ()
def get_user_card_keyboard (user_id :int ,is_banned :bool ,i18n_instance ,lang :str ,banned_list_page :int =0 )->InlineKeyboardMarkup :
_ =lambda key ,**kwargs :i18n_instance .gettext (lang ,key ,**kwargs );builder =InlineKeyboardBuilder ()
if is_banned :builder .button (text =_ (key ="user_card_unban_button"),callback_data =f"admin_unban_confirm:{user_id}:{banned_list_page}")
else :builder .button (text =_ (key ="user_card_ban_button"),callback_data =f"admin_ban_confirm:{user_id}:{banned_list_page}")
builder .button (text =_ (key ="user_card_back_to_banned_list_button"),callback_data =f"admin_action:view_banned:{banned_list_page}")
builder .button (text =_ (key ="back_to_admin_panel_button"),callback_data ="admin_action:main");builder .adjust (1 );return builder .as_markup ()
def get_confirmation_keyboard (yes_callback_data :str ,no_callback_data :str ,i18n_instance ,lang :str )->InlineKeyboardMarkup :
_ =lambda key ,**kwargs :i18n_instance .gettext (lang ,key ,**kwargs );builder =InlineKeyboardBuilder ()
builder .button (text =_ (key ="yes_button"),callback_data =yes_callback_data );builder .button (text =_ (key ="no_button"),callback_data =no_callback_data );return builder .as_markup ()
def get_broadcast_confirmation_keyboard (lang :str ,i18n_instance )->InlineKeyboardMarkup :
_ =lambda key ,**kwargs :i18n_instance .gettext (lang ,key ,**kwargs );builder =InlineKeyboardBuilder ()
builder .button (text =_ (key ="confirm_broadcast_send_button"),callback_data ="broadcast_final_action:send")
builder .button (text =_ (key ="cancel_broadcast_button"),callback_data ="broadcast_final_action:cancel");builder .adjust (2 );return builder .as_markup ()
def get_back_to_admin_panel_keyboard (lang :str ,i18n_instance )->InlineKeyboardMarkup :
_ =lambda key ,**kwargs :i18n_instance .gettext (lang ,key ,**kwargs );builder =InlineKeyboardBuilder ()
builder .button (text =_ (key ="back_to_admin_panel_button"),callback_data ="admin_action:main");return builder .as_markup ()