From 7f27a641dd3ee80b9cbf1345630b2f9206c2a2be Mon Sep 17 00:00:00 2001 From: kotolex Date: Mon, 25 Dec 2023 08:02:23 +0500 Subject: [PATCH] BUGFIX2: fix is_mixed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - чтобы не срабатывало на питон-код с русскими словами --- src/constants.py | 3 ++- src/helpers.py | 7 +++++-- tests/test_helpers.py | 4 ++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/constants.py b/src/constants.py index 3b37e23..ed99bb2 100644 --- a/src/constants.py +++ b/src/constants.py @@ -36,9 +36,10 @@ ALLOWED_WORDS = [ "jetbrains", ] -RUS = """ёйцукенгшщзхъфывапролджэячсмитьбю.Ё!"№;%:?ЙЦУКЕНГШЩЗХЪ/ФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,""" ONLY_RUS_LETTERS = "ёйцукенгшщзхъфывапролджэячсмитьбю" ONLY_ENG_LETTERS = string.ascii_lowercase +SYMBOLS = """`[];',./~!@#$%^{}|:"<>?«»-+*/№=()&""" +RUS = """ёйцукенгшщзхъфывапролджэячсмитьбю.Ё!"№;%:?ЙЦУКЕНГШЩЗХЪ/ФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,""" ENG = """`qwertyuiop[]asdfghjkl;'zxcvbnm,./~!@#$%^&QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?""" RUS_ENG_TABLE = str.maketrans(RUS, ENG) ENG_RUS_TABLE = str.maketrans(ENG, RUS) diff --git a/src/helpers.py b/src/helpers.py index 5c652cd..612532d 100644 --- a/src/helpers.py +++ b/src/helpers.py @@ -6,7 +6,7 @@ from urllib.request import urlopen from telebot import types -from .constants import SPAM, BAN_WORDS, NON_GRATA, ADMIN_ID, ONLY_RUS_LETTERS, ONLY_ENG_LETTERS, RULES_TEXT +from .constants import SPAM, BAN_WORDS, NON_GRATA, ADMIN_ID, ONLY_RUS_LETTERS, ONLY_ENG_LETTERS, RULES_TEXT, SYMBOLS def is_url_reachable(url: str) -> bool: @@ -30,8 +30,11 @@ def is_mixed(text: str) -> bool: Разбивает текст на слова и проверяет на смешанный алфавит, спамеры используют его. Слово допускается только полностью на русском или русский + знаки пунктуации """ - for word in text.split(): + cleaned_text = ''.join(letter if letter not in SYMBOLS else ' ' for letter in text) + for word in cleaned_text.split(): word = word.strip().lower() + if not word: + continue if any(e in ONLY_RUS_LETTERS for e in word) and any(e in ONLY_ENG_LETTERS for e in word): return True return False diff --git a/tests/test_helpers.py b/tests/test_helpers.py index 286dae8..02c0fa0 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -38,6 +38,10 @@ class TestSpam(TestCase): «Я пуп земли», – твердит гордец надменно, Забыв, что он – песчинка во вселенной.""" self.assertFalse(is_mixed(text)) + self.assertFalse(is_mixed('print("привет")')) + self.assertFalse(is_mixed("print('привет')")) + self.assertFalse(is_mixed("text='слово'")) + class TestOthers(TestCase):