from aiogram import Router, types from aiogram.filters import Command from aiogram.enums.parse_mode import ParseMode import logging from .start import call_api router = Router() logger = logging.getLogger(__name__) async def _build_referral_text(bot, user_id: int) -> str: me = await bot.get_me() bot_username = me.username or "LarkVPN_bot" link = f"https://t.me/{bot_username}?start=ref_{user_id}" invited_count = "—" try: data = await call_api("GET", f"/user/{user_id}/referrals") if isinstance(data, dict): invited_count = str(data.get("invited_count", 0)) except Exception as e: logger.exception( f"Ошибка при получении количества рефералов для {user_id}: {e}" ) text = ( "👥 Реферальная программа\n\n" "Зови друзей в Lark VPN и получай бонусы на баланс.\n\n" f"🔗 Твоя ссылка:\n{link}\n\n" f"👤 Приглашено: {invited_count}\n\n" ) return text @router.message(Command("referrals")) async def referrals_command(message: types.Message): logger.info(f"Получена команда /referrals от {message.from_user.id}") try: text = await _build_referral_text(message.bot, message.from_user.id) await message.answer(text, parse_mode=ParseMode.HTML) except Exception as e: logger.exception(f"Ошибка в обработчике /referrals: {e}") await message.answer("Произошла ошибка. Попробуй позже.") @router.callback_query(lambda callback: callback.data == "referral") async def referrals_callback(callback: types.CallbackQuery): try: text = await _build_referral_text( callback.message.bot, callback.from_user.id, ) await callback.message.edit_text( text, parse_mode=ParseMode.HTML, ) except Exception as e: logger.exception(f"Ошибка в обработчике callback 'referral': {e}") await callback.message.answer("Произошла ошибка. Попробуй позже.") finally: await callback.answer()