diff --git a/bot/middlewares/banwords_mdw.py b/bot/middlewares/banwords_mdw.py index 99e2ea3..7d4f459 100644 --- a/bot/middlewares/banwords_mdw.py +++ b/bot/middlewares/banwords_mdw.py @@ -10,7 +10,7 @@ Middleware для проверки сообщений на запрещённы - Нет уведомлений в режиме тишины """ -from typing import Callable, Dict, Any, Awaitable, Optional, Set +from typing import Callable, Dict, Any, Awaitable, Optional import re import unicodedata @@ -20,7 +20,7 @@ from aiogram.exceptions import TelegramBadRequest from configs import settings, UNICODE_MAP, LATIN_TO_CYRILLIC, CYRILLIC_NORMALIZE from database import get_manager, BanWordType -from bot.special import process_text, extract_words, get_lemma +from bot.special import extract_words, get_lemma from middleware.loggers import logger __all__ = ("BanWordsMiddleware",) @@ -40,7 +40,7 @@ class TextNormalizer: FULL_MAP.update(UNICODE_MAP) # Символы-разделители, которые могут быть вставлены между буквами - SEPARATORS = re.compile(r'[\s\.\-_,;:|]+', re.UNICODE) + SEPARATORS = re.compile(r'[\s.\-_,;:|]+', re.UNICODE) # Паттерн для поиска повторяющихся букв (3+ раза) REPEAT_PATTERN = re.compile(r'([а-яёa-z])\1{2,}', re.IGNORECASE) @@ -68,15 +68,10 @@ class TextNormalizer: @classmethod def collapse_repeats(cls, text: str, max_repeat: int = 2) -> str: - """ - Заменяет повторения символов более max_repeat подряд на один/два символа. - По умолчанию оставляет максимум 2 (леееейн → леейн? но обычно хватит 2). - Можно настроить: для банворда "лейн" превратит "леееейн" в "леейн", что всё равно содержит "лейн". - """ def repl(m): ch = m.group(1) - # Оставляем два символа, чтобы не терять удвоенные буквы (например, "дд" в слове "поддон") - return ch * 2 + return ch # вместо ch * 2 — теперь схлопываем до одного символа + return cls.REPEAT_PATTERN.sub(repl, text) @classmethod @@ -160,9 +155,9 @@ class BanWordsMiddleware(BaseMiddleware): Возвращает словарь с причиной блокировки или None. """ # 1. Повторяющиеся символы (например, "леееейн") — блокируем сразу - repeat_result = self._check_repeated_chars(text) - if repeat_result: - return repeat_result + # repeat_result = self._check_repeated_chars(text) + # if repeat_result: + # return repeat_result # 2. Получаем кэшированные списки substring_words = self.manager.get_banwords_cached(BanWordType.SUBSTRING)