From 1b51886dd1f1f432acc120c23a4219a4e1f87a24 Mon Sep 17 00:00:00 2001 From: Egor Date: Mon, 12 Jan 2026 23:51:39 +0300 Subject: [PATCH 1/4] Update yookassa.py --- app/services/payment/yookassa.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/app/services/payment/yookassa.py b/app/services/payment/yookassa.py index 678837c9..84a28a2e 100644 --- a/app/services/payment/yookassa.py +++ b/app/services/payment/yookassa.py @@ -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), From 9b3a39b13f0a8fd74c1f8ecf089329ccf5005ec9 Mon Sep 17 00:00:00 2001 From: Egor Date: Mon, 12 Jan 2026 23:53:04 +0300 Subject: [PATCH 2/4] Update balance.py --- app/cabinet/routes/balance.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/cabinet/routes/balance.py b/app/cabinet/routes/balance.py index ff0558ad..0d84ead0 100644 --- a/app/cabinet/routes/balance.py +++ b/app/cabinet/routes/balance.py @@ -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", From 61cc2a72cdb43ad8d3fb7c3291cda2e633721abb Mon Sep 17 00:00:00 2001 From: Egor Date: Tue, 13 Jan 2026 00:06:42 +0300 Subject: [PATCH 3/4] Update display_name_restriction.py --- app/middlewares/display_name_restriction.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/app/middlewares/display_name_restriction.py b/app/middlewares/display_name_restriction.py index 0060737e..04bd1e58 100644 --- a/app/middlewares/display_name_restriction.py +++ b/app/middlewares/display_name_restriction.py @@ -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 From e92b14391b0f41c672f90ac76c075eadaae680aa Mon Sep 17 00:00:00 2001 From: Egor Date: Tue, 13 Jan 2026 00:07:09 +0300 Subject: [PATCH 4/4] Update config.py --- app/config.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/config.py b/app/config.py index fd169be7..48d51dba 100644 --- a/app/config.py +++ b/app/config.py @@ -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}$")