mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-01-20 03:40:26 +00:00
@@ -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",
|
||||
|
||||
@@ -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}$")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user