Чет исправил, я забыл

This commit is contained in:
unknown
2025-12-02 14:28:03 +03:00
parent 00edfdbd19
commit 709e8f09eb
3 changed files with 290 additions and 17 deletions

View File

@@ -54,19 +54,49 @@ def _welcome_text(username: str | None) -> str:
return "🥚 Lark Security\n\nВыберите действие из меню ниже."
def _parse_referrer_id(message: Message) -> int | None:
"""
Достаём ref_<telegram_id> из /start.
Примеры:
/start
/start ref_123456789
"""
text = message.text or ""
parts = text.split(maxsplit=1)
if len(parts) < 2:
return None
arg = parts[1].strip()
if not arg.startswith("ref_"):
return None
raw_id = arg[4:]
if not raw_id.isdigit():
return None
try:
return int(raw_id)
except ValueError:
return None
@router.message(Command("start"))
async def start_command(message: Message):
"""
Обработчик команды /start.
Визуал и текст — обновлены, логика работы с API не тронута.
Добавлена обработка реферального payload'а ref_<telegram_id>.
"""
logger.info(
f"Получена команда /start от пользователя: "
f"{message.from_user.id} ({message.from_user.username})"
f"{message.from_user.id} ({message.from_user.username}) | text='{message.text}'"
)
user_id = message.from_user.id
referrer_id = _parse_referrer_id(message)
try:
user_data = await call_api("GET", f"/user/{message.from_user.id}")
# 1. Проверяем/создаём пользователя в базе
user_data = await call_api("GET", f"/user/{user_id}")
if not user_data:
logger.debug(
"Пользователь не найден в базе, создаем новую запись."
@@ -74,9 +104,33 @@ async def start_command(message: Message):
await call_api(
"POST",
"/user/create",
{"telegram_id": message.from_user.id},
{"telegram_id": user_id},
)
# 2. Если есть реферер и он не сам пользователь — отправляем инфу в бекенд
if referrer_id and referrer_id != user_id:
payload = {
"referrer_id": referrer_id,
"telegram_id": user_id,
}
logger.info(
f"Отправка данных о реферале в бекенд: {payload}"
)
result = await call_api(
"POST",
"/user/referrals/track",
payload,
)
if result == "ERROR":
logger.error(
f"Не удалось зафиксировать реферала в бекенде: {payload}"
)
elif referrer_id == user_id:
logger.info(
"Обнаружена попытка самореферала, запрос в бекенд не отправляем."
)
# 3. Приветственное сообщение и главное меню
logger.debug("Отправка приветственного сообщения пользователю.")
await message.answer(
_welcome_text(message.from_user.username),
@@ -86,7 +140,7 @@ async def start_command(message: Message):
except Exception as e:
logger.exception(
f"Ошибка при обработке команды /start для пользователя "
f"{message.from_user.id}: {e}"
f"{user_id}: {e}"
)
await message.answer("Произошла ошибка. Попробуйте позже.")