From 99148b5bb698593010fff35c6f3ff30b18744006 Mon Sep 17 00:00:00 2001 From: Rykov7 Date: Thu, 6 Apr 2023 01:11:01 +0300 Subject: [PATCH] config bans, cascade deletion, add albemic, add enable_stan and get_quotes --- app/bot.py | 23 ++++++++++------------- app/commands/service.py | 28 ++++++++++++++++++++++++++++ app/filters.py | 8 ++++++-- app/models.py | 2 +- requirements.txt | Bin 600 -> 984 bytes 5 files changed, 45 insertions(+), 16 deletions(-) diff --git a/app/bot.py b/app/bot.py index abb0783..dc89237 100644 --- a/app/bot.py +++ b/app/bot.py @@ -7,18 +7,16 @@ from . import rules from .helpers import represent_as_get, detect_args, update_stats from .filters import * from .config import * -from .database import session -from .models import Chat """ [ ANTISPAM ] """ -@bot.edited_message_handler(func=in_spam_list) -@bot.message_handler(func=in_spam_list) +@bot.edited_message_handler(func=in_spam_list, chat_types=["supergroup", "group"]) +@bot.message_handler(func=in_spam_list, chat_types=["supergroup", "group"]) def moderate_messages(message: types.Message): """Ban user and delete their message.""" logging.info( - f"[BAN] {message.from_user.id} {message.from_user.username} - {message.text}" + f"[BAN] [{message.from_user.id}] {message.from_user.username}: {message.text}" ) bot.delete_message(message.chat.id, message.id) bot.ban_chat_member(message.chat.id, message.from_user.id) @@ -26,7 +24,7 @@ def moderate_messages(message: types.Message): s["Banned"] += 1 -@bot.message_handler(func=in_caption_spam_list, content_types=["video"]) +@bot.message_handler(func=in_caption_spam_list, content_types=["video"], chat_types=["supergroup", "group"]) def catch_videos(message: types.Message): """Catch offensive videos""" logging.info( @@ -38,14 +36,13 @@ def catch_videos(message: types.Message): s["Banned"] += 1 -@bot.edited_message_handler(func=in_delete_list) -@bot.message_handler(func=in_delete_list) +@bot.edited_message_handler(func=in_delete_list, chat_types=["supergroup", "group"]) +@bot.message_handler(func=in_delete_list, chat_types=["supergroup", "group"]) def delete_message(message: types.Message): - if session.query(Chat.antispam).filter_by(chat_id=message.chat.id).first()[0]: - """Delete unwanted message.""" - bot.delete_message(message.chat.id, message.id) - with shelve.open(f"{DATA}{message.chat.id}") as s: - s["Deleted"] += 1 + """Delete unwanted message.""" + bot.delete_message(message.chat.id, message.id) + with shelve.open(f"{DATA}{message.chat.id}") as s: + s["Deleted"] += 1 """ [ COMMANDS ] """ diff --git a/app/commands/service.py b/app/commands/service.py index 796f3bb..b25603a 100644 --- a/app/commands/service.py +++ b/app/commands/service.py @@ -2,6 +2,8 @@ import logging from datetime import datetime as dt +from ..models import Chat +from ..database import session from ..config import bot, ADMIN_ID, types from .. import reminder from .. import report @@ -66,3 +68,29 @@ def send_stats(message: types.Message): logging.warning("reset_stats") report.reset_report_stats(message.chat.id) bot.send_message(message.chat.id, report.reset_report_stats(message.chat.id)) + + +@bot.message_handler(commands=["enable_stan"], chat_types=["supergroup", "group"]) +def enable_stan(message: types.Message): + """Add group to database.""" + + logging.info( + f"[{message.chat.title}] [{message.from_user.id}] {message.from_user.username}: {message.text}" + ) + if not session.query(Chat.id).filter(Chat.id == message.chat.id).first(): + logging.info('[TRUE] chat.id == message.chat.id') + session.add(Chat(chat_id=message.chat.id, title=message.chat.title, antispam=1, report=0, reminder=1)) + session.commit() + bot.send_message(message.chat.id, f"""Группа "{message.chat.title}" +Добавлена в БД + +Текущие настройки: + Антиспам: {session.query(Chat.antispam).filter(Chat.chat_id == message.chat.id).first()[0]} + Ежедневные отчёты: {session.query(Chat.report).filter(Chat.chat_id == message.chat.id).first()[0]} + Праздники: {session.query(Chat.reminder).filter(Chat.chat_id == message.chat.id).first()[0]}""") + +@bot.message_handler(commands=["get_quotes"], chat_types=["supergroup", "group"]) +def get_quotes(message: types.Message): + logging.info('[TRUE] getting quotes...') + quotes = session.query(Chat.quotes).filter(Chat.id == message.chat.id).all() + bot.send_message(message.chat.id, f"{quotes}") \ No newline at end of file diff --git a/app/filters.py b/app/filters.py index 973d7f6..78f82f8 100644 --- a/app/filters.py +++ b/app/filters.py @@ -1,9 +1,12 @@ +from .database import session +from .models import Chat from .config import * def in_spam_list(message: types.Message) -> bool: """Check for mentioning unwanted persons in text.""" - if message.from_user.id not in WHITEIDS: + antispam_is_enabled = session.query(Chat.antispam).filter_by(chat_id=message.chat.id).first()[0] + if message.from_user.id not in WHITEIDS and antispam_is_enabled: for url in SPAM: if url in message.text.casefold(): return True @@ -25,7 +28,8 @@ def in_not_allowed(word_list, msg): def in_delete_list(message: types.Message) -> bool: """Check for URLs in message and delete.""" - if message.from_user.id not in WHITEIDS: + antispam_is_enabled = session.query(Chat.antispam).filter_by(chat_id=message.chat.id).first()[0] + if message.from_user.id not in WHITEIDS and antispam_is_enabled: if URL_RX.search(message.text) and in_not_allowed( ALLOWED_WORDS, message.text ): diff --git a/app/models.py b/app/models.py index 9ef5b34..d1cbe1c 100644 --- a/app/models.py +++ b/app/models.py @@ -21,7 +21,7 @@ class Chat(Base): title = Column(String) # Settings - quotes = relationship('Quote', backref='chat') + quotes = relationship('Quote', backref='chat', cascade='all, delete') antispam = Column(Boolean) report = Column(Boolean) reminder = Column(Boolean) diff --git a/requirements.txt b/requirements.txt index 778377a418f01b35cf6a010886998e9890dec30f..6f39cf36040db930adf2110fc319d24ef5c8c08a 100644 GIT binary patch literal 984 zcmYk5O-sXI5QO(E_)`=c>({}99t1@}QSd0SP19%^YtoAP}MuKVN=JJ%n#QGpoAVd@`7qkE#^o=+)`emv*2pLNPAML?##RA25voP@3|HNmsBp_5w27a44;)*7k{x+AB&S@|TAj zI$mK7@8K?HtI|@_hVS`5V}5ct>|u!)rI5QXX(-S?xJWq)_drcaDK~BAoVhDIvs=5| zC_6%3B(IK@&A~LBim79j--lx(W9f+eq~RT{1$im6q%^ZQ8}iz5UgjXC;G`pY9$3}z5fBUWsolb delta 83 zcmcb?euIVS|G$YLb2!}?au^aBiW#ye*D@wg7GctwoW|rac^{L-