82 lines
6.5 KiB
Python
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 () |