Initial commit
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
import logging
|
||||
from aiogram import Router ,F ,types ,Bot
|
||||
from aiogram .filters import Command
|
||||
from typing import Optional ,Dict
|
||||
|
||||
from config .settings import Settings
|
||||
from bot .services .referral_service import ReferralService
|
||||
from db .database import get_db_connection_manager
|
||||
from bot .keyboards .inline .user_keyboards import get_referral_link_keyboard ,get_back_to_main_menu_markup
|
||||
from bot .middlewares .i18n import JsonI18n
|
||||
|
||||
router =Router (name ="user_referral_router")
|
||||
|
||||
async def referral_command_handler (
|
||||
event :types .Message |types .CallbackQuery ,
|
||||
settings :Settings ,
|
||||
i18n_data :dict ,
|
||||
referral_service :ReferralService ,
|
||||
bot :Bot
|
||||
):
|
||||
current_lang =i18n_data .get ("current_language",getattr (settings ,'DEFAULT_LANGUAGE','en'))
|
||||
i18n :Optional [JsonI18n ]=i18n_data .get ("i18n_instance")
|
||||
|
||||
target_message =event .message if isinstance (event ,types .CallbackQuery )else event
|
||||
if not target_message :
|
||||
logging .error ("Target message is None in referral_command_handler from callback.")
|
||||
if isinstance (event ,types .CallbackQuery ):await event .answer ("Error displaying referral info.")
|
||||
return
|
||||
|
||||
if not i18n or not referral_service :
|
||||
logging .error ("Deps missing in referral_command_handler")
|
||||
await target_message .answer ("Service error."if isinstance (event ,types .Message )else "Service error.",parse_mode =None )
|
||||
if isinstance (event ,types .CallbackQuery ):await event .answer ()
|
||||
return
|
||||
|
||||
_ =lambda key ,**kwargs :i18n .gettext (current_lang ,key ,**kwargs )
|
||||
|
||||
bot_info =await bot .get_me ()
|
||||
bot_username =bot_info .username
|
||||
inviter_user_id =event .from_user .id
|
||||
referral_link =referral_service .generate_referral_link (bot_username ,inviter_user_id )
|
||||
bonus_info_parts =[]
|
||||
|
||||
if hasattr (settings ,'subscription_options')and settings .subscription_options :
|
||||
for months_period in sorted (settings .subscription_options .keys ()):
|
||||
inv_bonus =settings .referral_bonus_inviter .get (months_period )
|
||||
ref_bonus =settings .referral_bonus_referee .get (months_period )
|
||||
if inv_bonus is not None or ref_bonus is not None :
|
||||
bonus_info_parts .append (
|
||||
_ ("referral_bonus_per_period",
|
||||
months =months_period ,
|
||||
inviter_bonus_days =inv_bonus if inv_bonus is not None else _ ("no_bonus_days"),
|
||||
referee_bonus_days =ref_bonus if ref_bonus is not None else _ ("no_bonus_days")
|
||||
)
|
||||
)
|
||||
bonus_details_str ="\n".join (bonus_info_parts )if bonus_info_parts else _ ("referral_no_bonuses_configured")
|
||||
text =_ ("referral_program_info_new",referral_link =referral_link ,bonus_details =bonus_details_str )
|
||||
|
||||
|
||||
|
||||
reply_markup_val =get_back_to_main_menu_markup (current_lang ,i18n )
|
||||
|
||||
if isinstance (event ,types .Message ):
|
||||
await event .answer (text ,reply_markup =reply_markup_val ,disable_web_page_preview =True )
|
||||
elif isinstance (event ,types .CallbackQuery ):
|
||||
try :
|
||||
await event .message .edit_text (text ,reply_markup =reply_markup_val ,disable_web_page_preview =True )
|
||||
except Exception as e :
|
||||
logging .warning (f"Failed to edit message for referral info: {e}")
|
||||
|
||||
await event .message .answer (text ,reply_markup =reply_markup_val ,disable_web_page_preview =True )
|
||||
await event .answer ()
|
||||
|
||||
|
||||
@router .callback_query (F .data =="copy_referral_link_ack")
|
||||
async def copy_referral_link_ack_callback_handler (callback :types .CallbackQuery ,i18n_data :dict ,settings :Settings ):
|
||||
current_lang =i18n_data .get ("current_language",getattr (settings ,'DEFAULT_LANGUAGE','en'))
|
||||
i18n :Optional [JsonI18n ]=i18n_data .get ("i18n_instance")
|
||||
if not i18n :return await callback .answer ("Language service error.",show_alert =True )
|
||||
_ =lambda key ,**kwargs :i18n .gettext (current_lang ,key ,**kwargs )
|
||||
await callback .answer (text =_ (key ="referral_link_for_copying_reminder"),show_alert =False )
|
||||
Reference in New Issue
Block a user