from aiogram .utils .keyboard import InlineKeyboardBuilder ,InlineKeyboardButton from aiogram .types import InlineKeyboardMarkup from typing import Dict ,Optional ,List from config .settings import Settings def get_main_menu_inline_keyboard ( lang :str , i18n_instance , settings :Settings , show_trial_button :bool =False )->InlineKeyboardMarkup : _ =lambda key ,**kwargs :i18n_instance .gettext (lang ,key ,**kwargs ) builder =InlineKeyboardBuilder () if show_trial_button and settings .TRIAL_ENABLED : builder .row (InlineKeyboardButton (text =_ (key ="menu_activate_trial_button"),callback_data ="main_action:request_trial")) builder .row (InlineKeyboardButton (text =_ (key ="menu_subscribe_inline"),callback_data ="main_action:subscribe")) builder .row (InlineKeyboardButton (text =_ (key ="menu_my_subscription_inline"),callback_data ="main_action:my_subscription")) referral_button =InlineKeyboardButton (text =_ (key ="menu_referral_inline"),callback_data ="main_action:referral") promo_button =InlineKeyboardButton (text =_ (key ="menu_apply_promo_button"),callback_data ="main_action:apply_promo") builder .row (referral_button ,promo_button ) language_button =InlineKeyboardButton (text =_ (key ="menu_language_settings_inline"),callback_data ="main_action:language") status_button_list =[] if settings .SERVER_STATUS_URL : status_button_list .append (InlineKeyboardButton (text =_ (key ="menu_server_status_button"),url =settings .SERVER_STATUS_URL )) if status_button_list : builder .row (language_button ,*status_button_list ) else : builder .row (language_button ) if settings .SUPPORT_LINK : builder .row (InlineKeyboardButton (text =_ (key ="menu_support_button"),url =settings .SUPPORT_LINK )) return builder .as_markup () def get_language_selection_keyboard (i18n_instance ,current_lang :str )->InlineKeyboardMarkup : _ =lambda key ,**kwargs :i18n_instance .gettext (current_lang ,key ,**kwargs ) builder =InlineKeyboardBuilder () builder .button (text =f"๐Ÿ‡ฌ๐Ÿ‡ง English {'โœ…' if current_lang == 'en' else ''}",callback_data ="set_lang_en") builder .button (text =f"๐Ÿ‡ท๐Ÿ‡บ ะ ัƒััะบะธะน {'โœ…' if current_lang == 'ru' else ''}",callback_data ="set_lang_ru") builder .button (text =_ (key ="back_to_main_menu_button"),callback_data ="main_action:back_to_main") builder .adjust (1 ) return builder .as_markup () def get_trial_confirmation_keyboard (lang :str ,i18n_instance )->InlineKeyboardMarkup : _ =lambda key ,**kwargs :i18n_instance .gettext (lang ,key ,**kwargs ) builder =InlineKeyboardBuilder () builder .button (text =_ (key ="trial_confirm_activate_button"),callback_data ="trial_action:confirm_activate") builder .button (text =_ (key ="cancel_button"),callback_data ="main_action:back_to_main") builder .adjust (1 ) return builder .as_markup () def get_subscription_options_keyboard (subscription_options :Dict [int ,Optional [int ]],currency_symbol_val :str ,lang :str ,i18n_instance )->InlineKeyboardMarkup : _ =lambda key ,**kwargs :i18n_instance .gettext (lang ,key ,**kwargs ) builder =InlineKeyboardBuilder () if subscription_options : for months ,price in subscription_options .items (): if price is not None : button_text =_ ("subscribe_for_months_button",months =months ,price =price ,currency_symbol =currency_symbol_val ) builder .button (text =button_text ,callback_data =f"subscribe_period:{months}") builder .adjust (1 ) builder .row (InlineKeyboardButton (text =_ (key ="back_to_main_menu_button"),callback_data ="main_action:back_to_main")) return builder .as_markup () def get_confirm_subscription_keyboard (months :int ,price :float ,currency_symbol_val :str ,lang :str ,i18n_instance )->InlineKeyboardMarkup : _ =lambda key ,**kwargs :i18n_instance .gettext (lang ,key ,**kwargs ) builder =InlineKeyboardBuilder () confirm_text =_ (key ="confirm_payment_button",price =price ,currency_symbol =currency_symbol_val ) builder .button (text =confirm_text ,callback_data =f"confirm_sub:{months}:{price}") builder .button (text =_ (key ="cancel_button"),callback_data ="main_action:subscribe") builder .adjust (1 ) return builder .as_markup () def get_payment_url_keyboard (payment_url :str ,lang :str ,i18n_instance )->InlineKeyboardMarkup : _ =lambda key ,**kwargs :i18n_instance .gettext (lang ,key ,**kwargs ) builder =InlineKeyboardBuilder () builder .button (text =_ (key ="pay_button"),url =payment_url ) builder .button (text =_ (key ="back_to_main_menu_button"),callback_data ="main_action:back_to_main") builder .adjust (1 ) return builder .as_markup () def get_referral_link_keyboard (lang :str ,i18n_instance )->InlineKeyboardMarkup : _ =lambda key ,**kwargs :i18n_instance .gettext (lang ,key ,**kwargs ) builder =InlineKeyboardBuilder () builder .button (text =_ (key ="back_to_main_menu_button"),callback_data ="main_action:back_to_main") return builder .as_markup () def get_back_to_main_menu_markup (lang :str ,i18n_instance )->InlineKeyboardMarkup : _ =lambda key ,**kwargs :i18n_instance .gettext (lang ,key ,**kwargs ) builder =InlineKeyboardBuilder () builder .button (text =_ (key ="back_to_main_menu_button"),callback_data ="main_action:back_to_main") return builder .as_markup () def get_user_banned_keyboard (support_link :Optional [str ],lang :str ,i18n_instance )->Optional [InlineKeyboardMarkup ]: if not support_link : return None _ =lambda key ,**kwargs :i18n_instance .gettext (lang ,key ,**kwargs ) builder =InlineKeyboardBuilder () builder .button (text =_ (key ="contact_support_button"),url =support_link ) return builder .as_markup ()