Merge pull request #2273 from BEDOLAGA-DEV/dev5

Dev5
This commit is contained in:
Egor
2026-01-13 00:08:04 +03:00
committed by GitHub
4 changed files with 35 additions and 14 deletions

View File

@@ -244,6 +244,8 @@ async def create_topup(
description=f"Пополнение баланса на {amount_rubles:.2f}",
metadata={
"user_id": str(user.id),
"user_telegram_id": str(user.telegram_id) if user.telegram_id else "",
"user_username": user.username or "",
"amount_kopeks": str(request.amount_kopeks),
"type": "balance_topup",
"source": "cabinet",

View File

@@ -15,9 +15,9 @@ from pydantic import field_validator, Field
from pathlib import Path
DEFAULT_DISPLAY_NAME_BANNED_KEYWORDS = [
"tme",
"joingroup",
DEFAULT_DISPLAY_NAME_BANNED_KEYWORDS: list[str] = [
# Пустой по умолчанию - администратор может добавить ключевые слова через DISPLAY_NAME_BANNED_KEYWORDS
# Примеры: "tme", "joingroup", "support", "admin"
]
USER_TAG_PATTERN = re.compile(r"^[A-Z0-9_]{1,16}$")

View File

@@ -131,23 +131,18 @@ class DisplayNameRestrictionMiddleware(BaseMiddleware):
cleaned = ZERO_WIDTH_PATTERN.sub("", value)
lower_value = cleaned.lower()
if "@" in cleaned or "" in cleaned:
return True
if any(pattern.search(lower_value) for pattern in LINK_PATTERNS):
return True
if DOMAIN_OBFUSCATION_PATTERN.search(lower_value):
return True
# Убраны жёсткие проверки на @ и паттерны ссылок - слишком много ложных срабатываний
# Теперь проверяем только по настраиваемым ключевым словам из DISPLAY_NAME_BANNED_KEYWORDS
normalized = self._normalize_text(lower_value)
collapsed = COLLAPSE_PATTERN.sub("", normalized)
if "tme" in collapsed:
return True
banned_keywords = settings.get_display_name_banned_keywords()
# Если список пустой - не блокируем никого
if not banned_keywords:
return False
return any(
keyword in normalized or keyword in collapsed
for keyword in banned_keywords

View File

@@ -110,6 +110,18 @@ class YooKassaPaymentMixin:
amount_rubles = amount_kopeks / 100
payment_metadata = metadata.copy() if metadata else {}
# Всегда добавляем telegram_id в метаданные для возможности возврата платежа
if "user_telegram_id" not in payment_metadata:
try:
from app.database.crud.user import get_user_by_id
user = await get_user_by_id(db, user_id)
if user and user.telegram_id:
payment_metadata["user_telegram_id"] = str(user.telegram_id)
payment_metadata["user_username"] = user.username or ""
except Exception as e:
logger.warning(f"Не удалось получить telegram_id для user_id={user_id}: {e}")
payment_metadata.update(
{
"user_id": str(user_id),
@@ -201,6 +213,18 @@ class YooKassaPaymentMixin:
amount_rubles = amount_kopeks / 100
payment_metadata = metadata.copy() if metadata else {}
# Всегда добавляем telegram_id в метаданные для возможности возврата платежа
if "user_telegram_id" not in payment_metadata:
try:
from app.database.crud.user import get_user_by_id
user = await get_user_by_id(db, user_id)
if user and user.telegram_id:
payment_metadata["user_telegram_id"] = str(user.telegram_id)
payment_metadata["user_username"] = user.username or ""
except Exception as e:
logger.warning(f"Не удалось получить telegram_id для user_id={user_id}: {e}")
payment_metadata.update(
{
"user_id": str(user_id),