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],