Исправление с границами слов

Исправление команды карма с юзернеймом
This commit is contained in:
2025-10-19 19:50:32 +03:00
parent 8bf512e509
commit 4aba68d242
2 changed files with 18 additions and 4 deletions

View File

@@ -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 подряд)
# хууууууй → хуй, пииииздец → пиздец

View File

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