diff --git a/requirements/common.txt b/requirements/common.txt
index c69f840..8435d7d 100644
Binary files a/requirements/common.txt and b/requirements/common.txt differ
diff --git a/src/commands.py b/src/commands.py
index bdcc949..1edec03 100644
--- a/src/commands.py
+++ b/src/commands.py
@@ -7,9 +7,8 @@ from .admin_commands import bot
from .constants import (LOG_COMM, FAQ, LIB, RULES, RUS, RUS_ENG_TABLE, ENG_RUS_TABLE, PYTHONCHATRU, ZEN, LUTZ_ID,
BDMTSS_ID)
from .filters import in_spam_list, in_caption_spam_list, in_delete_list
-from .helpers import represent_as_get, detect_args, is_admin
+from .helpers import represent_as_get, detect_args, is_admin, fetch_rule
from .report import update_stats, increment
-from .rules import fetch_rule
from .stan import act, speak
@@ -65,10 +64,11 @@ async def send_rules(message: types.Message):
markup = types.InlineKeyboardMarkup([[RULES]], 1)
args = message.text.split()
logging.info(LOG_COMM % (message.chat.title, message.from_user.id, message.from_user.first_name, message.text))
- if len(args) > 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()