From 4aba68d2429ec22fe79c5540d6444fb7a28e3aaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=A5=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=BE=D0=B2?= Date: Sun, 19 Oct 2025 19:50:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=20=D0=B3=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=86=D0=B0=D0=BC=D0=B8=20=D1=81=D0=BB=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=80=D0=BC=D0=B0=20=D1=81=20=D1=8E=D0=B7=D0=B5=D1=80?= =?UTF-8?q?=D0=BD=D0=B5=D0=B9=D0=BC=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bad_words.py | 21 +++++++++++++++++---- src/modules/karma_commands.py | 1 + 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/bad_words.py b/src/bad_words.py index cf54445..f1a95be 100644 --- a/src/bad_words.py +++ b/src/bad_words.py @@ -126,7 +126,7 @@ def normalize_text(text: str) -> str: Убирает: - Звездочки, точки, подчеркивания между буквами (х*й, х.у.й, х_у_й → хуй) - Повторяющиеся символы (хууууууй → хуй) - - Пробелы между буквами (х у й → хуй) + - ОДИНОЧНЫЕ пробелы между ОДИНОЧНЫМИ буквами (х у й → хуй, но "не бу" остаётся "не бу") Args: text: Исходный текст @@ -140,9 +140,22 @@ def normalize_text(text: str) -> str: # Приводим к нижнему регистру normalized = text.lower() - # Убираем распространенные символы обфускации между буквами - # Заменяем последовательности: буква + [*._ ]+ + буква на буква+буква - normalized = re.sub(r'([а-яё])[\*\.\-_\s]+([а-яё])', r'\1\2', normalized) + # Циклически убираем обфускацию, пока что-то меняется + max_iterations = 10 + for _ in range(max_iterations): + before = normalized + + # Убираем звёздочки, точки, дефисы, подчёркивания между буквами + # х*й, х.у.й, х_у_й → хуй + normalized = re.sub(r'([а-яё])[\*\.\-_]+([а-яё])', r'\1\2', normalized) + + # Убираем ОДИНОЧНЫЕ пробелы между ОДИНОЧНЫМИ буквами (обфускация) + # "х у й" → "хуй", но "не бу" → "не бу" (не склеиваем обычные слова) + # Паттерн: одиночная буква + пробелы + одиночная буква + normalized = re.sub(r'\b([а-яё])\s+([а-яё])\b', r'\1\2', normalized) + + if before == normalized: + break # Убираем повторяющиеся буквы (более 2 подряд) # хууууууй → хуй, пииииздец → пиздец diff --git a/src/modules/karma_commands.py b/src/modules/karma_commands.py index 02311d7..8a2c3dc 100644 --- a/src/modules/karma_commands.py +++ b/src/modules/karma_commands.py @@ -52,6 +52,7 @@ def register_handlers(bot: AsyncTeleBot): user_data = db.get_user_by_username(username) if user_data: target_user_id = user_data[0] + logger.info(f"[KARMA CMD] Найден пользователь по username '{username}': id={user_data[0]}, nickname={user_data[1]}, tag={user_data[2]}") target_user = type('User', (), { 'id': user_data[0], 'first_name': user_data[1],