From 5d887c0285bbf3f0ba316a2ddf2d64035fa028f3 Mon Sep 17 00:00:00 2001 From: kotolex Date: Sun, 24 Dec 2023 20:07:01 +0500 Subject: [PATCH] RULES: easy way MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - удален модуль рулз - удалены библиотеки bs4 и lxml - правила теперь в константах и оттуда их получаем по номеру - пофиксил баг в тестах(не мокали инкремент) --- requirements/common.txt | Bin 846 -> 772 bytes src/commands.py | 8 ++++---- src/constants.py | 14 ++++++++++++++ src/helpers.py | 10 +++++++++- src/rules.py | 16 ---------------- src/stan.py | 2 +- tests/test_bot.py | 22 +++++++++++++--------- tests/test_helpers.py | 13 +++++++++++-- 8 files changed, 52 insertions(+), 33 deletions(-) delete mode 100644 src/rules.py diff --git a/requirements/common.txt b/requirements/common.txt index c69f8406452ee84ba3719a1172c24da860590ebd..8435d7d851d01ee70fe05b2e0249c879243f82df 100644 GIT binary patch delta 14 WcmX@d*1|TSZQ{0loBJ3KFaiKEnFf6T delta 80 zcmZo+JI6MmO*@Gpl_8O#l%a$nlOYXA=P(pA 1 and args[-1].isdigit() and 0 < int(args[-1]): + if len(args) > 1 and args[-1].isdigit(): + index = int(args[-1]) await send_or_reply( message, - f"Правило {args[-1]}\n{fetch_rule(args[-1])}", + f"Правило {args[-1]}\n{fetch_rule(index)}", reply_markup=markup, ) else: diff --git a/src/constants.py b/src/constants.py index 15c30dc..3d71bc2 100644 --- a/src/constants.py +++ b/src/constants.py @@ -80,5 +80,19 @@ ZEN = [ "If the implementation is easy to explain, it may be a good idea.", "Namespaces are one honking great idea — let's do more of those!", ] + +RULES_TEXT = ( + "Админ всегда прав и предупреждает один раз", + "Запрещена брань, реклама, голосовые сообщения, флуд, мета-вопросы и тема ChatGPT", + "Языки общения: русский или английский", + "Придерживайся общепринятых норм беседы: без оскорблений, расизма, CAPS'а, политических, религиозных и взрослых тем.", + "Знаки препинания важны, особенно вопросительный знак", + "Твой ник должен быть читаемым и понятным", + "Мы приветствуем общение по широкому кругу тем, но стоит придерживаться IT и Python, обсуждение прочих тем только в субботу.", + "Прежде, чем задать вопрос, поищи ответ в интернете.", + "Более пяти строк кода нужно присылать nekobin-ссылкой с расширением .py.", + "Не нужно писать в ЛС.", +) + LUTZ_ID = "BQACAgQAAxkBAAPBYsWJG9Ml0fPrnbU9UyzTQiQSuHkAAjkDAAIstCxSkuRbXAlcqeQpBA" BDMTSS_ID = "AwACAgIAAxkBAAIJrWOg2WUvLwrf7ahyJxQHB8_nqllwAAL5JQAC2_IJSbhfQIO5YnVmLAQ" diff --git a/src/helpers.py b/src/helpers.py index 8d240e5..7c7f4e7 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, RUS_LETTERS_AND_PUNCTUATION +from .constants import SPAM, BAN_WORDS, NON_GRATA, ADMIN_ID, ONLY_RUS_LETTERS, RUS_LETTERS_AND_PUNCTUATION, RULES_TEXT def is_url_reachable(url: str) -> bool: @@ -102,3 +102,11 @@ def detect_args(message: types.Message): else: if len(message.text.split()) > 1: return " ".join(message.text.split()[1:]) + + +def fetch_rule(index: int) -> str: + length = len(RULES_TEXT) + if index in range(1, length + 1): + return RULES_TEXT[index - 1] + else: + return "Пока не придумали" diff --git a/src/rules.py b/src/rules.py deleted file mode 100644 index 8af710b..0000000 --- a/src/rules.py +++ /dev/null @@ -1,16 +0,0 @@ -from urllib.request import urlopen - -from bs4 import BeautifulSoup - -from .config import RULES_URL - -html = BeautifulSoup(urlopen(RULES_URL), "lxml") - - -def fetch_rule(li): - li = int(li) - lis = html.find_all("li") - if li <= len(lis): - return lis[li - 1].text - else: - return f"Пока не придумали." diff --git a/src/stan.py b/src/stan.py index 7039075..e5d24ab 100644 --- a/src/stan.py +++ b/src/stan.py @@ -66,7 +66,7 @@ async def tease_nongrata(message: types.Message): await bot.reply_to(message, "у нас тут таких не любят") -@bot.message_handler(content_types=util.content_type_service) +@bot.message_handler(content_types=['new_chat_members', 'left_chat_member']) async def check_new_members(message: types.Message): if message.content_type == "new_chat_members": from_user = message.from_user diff --git a/tests/test_bot.py b/tests/test_bot.py index e4d20c5..50fcfe8 100644 --- a/tests/test_bot.py +++ b/tests/test_bot.py @@ -236,19 +236,23 @@ class TestBot(IsolatedAsyncioTestCase): async def test_spam_text(self): # Нужно подставить антиспам вкл. with patch("src.filters.is_antispam_enabled") as mocked: - mocked.return_value = True - await self.bot.process_new_updates([get_update('пишите мне в ЛС, Писать в ЛС')]) - self.assertEqual(RESULTS[0][1], "deleteMessage") - self.assertEqual(RESULTS[1][1], "banChatMember") - self.assertEqual(RESULTS[1][0], {'chat_id': 11, 'user_id': 10, 'until_date': None}) + # Нужно подменить инкремент, нельзя реально в шелве работать в тестах + with patch("src.commands.increment") as _mocked_shelve: + mocked.return_value = True + await self.bot.process_new_updates([get_update('пишите мне в ЛС, Писать в ЛС')]) + self.assertEqual(RESULTS[0][1], "deleteMessage") + self.assertEqual(RESULTS[1][1], "banChatMember") + self.assertEqual(RESULTS[1][0], {'chat_id': 11, 'user_id': 10, 'until_date': None}) async def test_wrong_url(self): # Нужно подставить антиспам вкл. with patch("src.filters.is_antispam_enabled") as mocked: - mocked.return_value = True - await self.bot.process_new_updates([get_update('тут подробнее https://zvuk.com/artist/61375')]) - self.assertEqual(RESULTS[0][1], "deleteMessage") - self.assertEqual(RESULTS[0][0], {'chat_id': 11, 'message_id': 1}) + # Нужно подменить инкремент, нельзя реально в шелве работать в тестах + with patch("src.commands.increment") as _mocked_shelve: + mocked.return_value = True + await self.bot.process_new_updates([get_update('тут подробнее https://zvuk.com/artist/61375')]) + self.assertEqual(RESULTS[0][1], "deleteMessage") + self.assertEqual(RESULTS[0][0], {'chat_id': 11, 'message_id': 1}) async def test_update_stats(self): # Нужно подставить антиспам вкл. diff --git a/tests/test_helpers.py b/tests/test_helpers.py index e8ef1c7..80da6e1 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -1,7 +1,7 @@ from unittest import TestCase, main from unittest.mock import MagicMock -from src.constants import SPAM, BAN_WORDS, ADMIN_ID -from src.helpers import is_spam, is_mixed, is_ban_words_in_caption, is_in_not_allowed, is_nongrata, is_admin +from src.constants import SPAM, BAN_WORDS, ADMIN_ID, RULES_TEXT +from src.helpers import is_spam, is_mixed, is_ban_words_in_caption, is_in_not_allowed, is_nongrata, is_admin, fetch_rule CASES = ( "Оформим резидeнтствo ОАЭ без предoплаты за 5000 дирхам. Пoдробнoсти в лc", @@ -72,6 +72,15 @@ class TestOthers(TestCase): m = MagicMock(from_user=MagicMock(id=text)) self.assertEqual(is_admin(m), expected) + def test_fetch_rule(self): + for index, text in enumerate(RULES_TEXT,1): + with self.subTest(f"fetch rule {index}"): + self.assertEqual(fetch_rule(index), text) + + def test_fetch_non_existent_rule(self): + self.assertEqual(fetch_rule(0), 'Пока не придумали') + self.assertEqual(fetch_rule(100), 'Пока не придумали') + if __name__ == '__main__': main()