Spam words moved to DB. Add command: /add_spam

This commit is contained in:
Rykov7
2024-05-30 22:42:43 +03:00
parent 1a23d576ed
commit 034c05d957
14 changed files with 43 additions and 287 deletions
+1 -1
View File
@@ -1 +1 @@
from . import set_commands
# from . import set_commands # Временное решение. Не коммитить раскомментированным - упадут тесты.
-17
View File
@@ -49,23 +49,6 @@ RULES = types.InlineKeyboardButton("👨🏼‍🎓 Правила чата", ur
FAQ = types.InlineKeyboardButton("❔ Частые вопросы", url="https://telegra.ph/faq-10-07-4")
LIB = types.InlineKeyboardButton("📚 Книги", url="https://telegra.ph/what-to-read-10-06")
SPAM = {"me.sv/", "tg.sv/", "goo.by/", "go.sv/", "intim.video/", "uclck.ru/",
'💎', '🔞', '➡️', '💰', '💸', '‼️',
'раб0т', '0плат', 'новый способ заработка', 'криптовалют', 'цифровых валют', 'Binance', 'ByBit',
'Помогу заработать', 'арбитраж', 'DEX бирж', 'любую девушку', 'прибыль у вaс', 'обучaю быстро',
'Предлагаю новый вид заработка', 'межбиржев', 'КУПЮРЫ', 'в неделю выходит до', 'soax',
'предложить заработок', 'голые фот', 'интимные фот', 'заработка в крипте', 'Веду набор', 'Идёт набор',
'Доход от', 'Trading', 'P2P', 'Идет набор', '$ в неделю', 'обучаю с нуля', 'доходы для всех',
'по трейдингу', 'фальшивые рубли', 'зароботку', 'Обучу вас', 'остались курсы', 'Crypt',
'Ищу партнеров', 'ищем партнеров', 'в поиске партнеров', 'обучим бесплатно', 'обучу бесплатно',
'обучим бесплатно', 'обучаю бесплатно', 'цифровых активов', 'цифровые активы', 'цифровые валюты',
'никаких предоплат', 'предоплаты не требуется', 'без предоплат', 'предоплата не требуется',
'предоплата не нужна', 'можете ознакомиться', 'хочу пригласить Вас', 'сотрудничество на удаленке',
'Только совершеннолетние', 'хороший заработок',
'в лc', "в личные сообще", 'напиши в личку', 'Писать в ЛИЧКУ', 'Пишите в личку', 'в л.с.', 'в лс',
'Писать в личные', 'в личку', 'в личке', 'в личных сооб', 'пишите в личные', 'пишем в личные', 'Плюс в личные'
}
NON_GRATA = {"дудар", "хауди", "dudar"}
BAN_WORDS = {"GREEN"}
+3 -3
View File
@@ -1,5 +1,4 @@
""" Send User's info. """
from urllib import parse
from urllib.error import URLError
from urllib.request import urlopen
@@ -7,8 +6,9 @@ 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, SYMBOLS, URL_RX
NON_GRATA, ADMIN_ID, ONLY_RUS_LETTERS, ONLY_ENG_LETTERS, RULES_TEXT, SYMBOLS, BAN_WORDS
)
from .models import session, BadWord
WARNS: dict[int, int] = {}
@@ -40,7 +40,7 @@ def is_spam(message_text: str) -> bool:
"""
if is_mixed(message_text):
return True
return any(text.casefold() in message_text.casefold() for text in SPAM)
return any(bad_word.word.casefold() in message_text.casefold() for bad_word in session.query(BadWord).all())
def is_mixed(text: str) -> bool:
+15
View File
@@ -54,6 +54,15 @@ class Chat(Base):
return f'Chat({self.chat_id=}, {self.title=})'
class BadWord(Base):
__tablename__ = 'bad_words'
id = Column(Integer, primary_key=True)
word = Column(String)
def __repr__(self):
return f'BadWord({self.id}: {self.word=})'
CACHE: dict[int, Type[Chat]] = {}
@@ -95,6 +104,12 @@ def add_quote(chat_id: int, text: str):
_reload_chat(chat_id)
def add_spam(chat_id: int, text: str):
session.add(BadWord(word=text))
session.commit()
_reload_chat(chat_id)
def chat_by_id(chat_id: int) -> None | Chat:
return CACHE.get(chat_id)
+1
View File
@@ -26,6 +26,7 @@ for white_id in WHITEIDS:
telebot.types.BotCommand("links", "/ссылки на правила, чзв и библиотеку"),
telebot.types.BotCommand("tsya", "/тся и /ться"),
telebot.types.BotCommand("add", "добавить цитату [Whitelist]"),
telebot.types.BotCommand("add_spam", "добавить в спам [Whitelist]"),
telebot.types.BotCommand("remove", "удалить цитату [Whitelist]"),
],
scope=telebot.types.BotCommandScopeChatMember(PYTHONCHATRU, white_id)
+18 -1
View File
@@ -9,7 +9,8 @@ from telebot import types, util
from .constants import LOG_COMM
from .filters import is_white_id
from .helpers import is_nongrata, short_user_data, has_links
from .models import all_chat_quotes, add_quote, is_quote_in_chat, delete_quote_in_chat, CACHE
from .models import all_chat_quotes, add_quote, is_quote_in_chat, delete_quote_in_chat, CACHE, add_spam, session, \
BadWord
from .robot import bot
TYPING_TIMEOUT = 0.13 / 4 # Reading time is quarter of the same text writing time
@@ -72,6 +73,22 @@ async def add_stan_quote(message: types.Message):
await bot.send_message(message.chat.id, f"⛔️ Не добавил, есть токое: {quote}", parse_mode='Markdown')
@bot.message_handler(func=is_white_id, commands=["add_spam"])
async def add_spam_handler(message: types.Message):
if message.reply_to_message and message.reply_to_message.text:
quote = (message.quote and message.quote.text) or message.reply_to_message.text
logging.error(f'{session.query(BadWord).filter_by(word=quote).first()}')
if not session.query(BadWord).filter_by(word=quote).first():
add_spam(message.chat.id, quote)
ok_message = await bot.send_message(message.chat.id, f"⭐️ Добавил в спам: {quote}", parse_mode='Markdown')
await bot.delete_message(message.chat.id, message.id)
await asyncio.sleep(3)
await bot.delete_message(message.chat.id, ok_message.id)
logging.info(LOG_COMM % (message.chat.title, message.from_user.id, message.from_user.full_name, f'[SPAM] {message.reply_to_message.text}'))
else:
await bot.send_message(message.chat.id, f"⛔️ Не добавил, есть токое: {quote}", parse_mode='Markdown')
@bot.message_handler(func=is_white_id, commands=["remove"])
async def remove_stan_quote(message: types.Message):
if message.reply_to_message and message.reply_to_message.text: