64 lines
2.3 KiB
Python
64 lines
2.3 KiB
Python
from aiogram import Router, types
|
|
from aiogram.filters import Command
|
|
from aiogram.enums.parse_mode import ParseMode
|
|
import logging
|
|
|
|
from .start import call_api # используем уже готовый HTTP-хелпер
|
|
|
|
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 = (
|
|
"👥 <b>Реферальная программа</b>\n\n"
|
|
"Зови друзей в Lark VPN и получай бонусы на баланс.\n\n"
|
|
f"🔗 Твоя ссылка:\n<code>{link}</code>\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()
|