Spam words moved to DB. Add command: /add_spam
This commit is contained in:
+1
-1
@@ -1 +1 @@
|
||||
from . import set_commands
|
||||
# from . import set_commands # Временное решение. Не коммитить раскомментированным - упадут тесты.
|
||||
|
||||
@@ -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
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user