add flooders report, add stats, add reset_stats

This commit is contained in:
Rykov7
2022-11-03 09:12:45 +03:00
parent afc95deb87
commit b62a629786
3 changed files with 66 additions and 16 deletions
+26 -8
View File
@@ -7,6 +7,7 @@ from time import sleep
from threading import Thread from threading import Thread
import shelve import shelve
from . import report
from .query_log import logging from .query_log import logging
from .me import get_me from .me import get_me
from .config import bot, ADMIN_ID, TOKEN from .config import bot, ADMIN_ID, TOKEN
@@ -183,15 +184,21 @@ def remind_manually(message):
def list_jobs(message): def list_jobs(message):
""" List all the jobs in schedule. """ """ List all the jobs in schedule. """
if message.chat.id == ADMIN_ID: if message.chat.id == ADMIN_ID:
text = reminder.print_get_jobs() bot.send_message(ADMIN_ID, reminder.print_get_jobs(),
bot.send_message(message.chat.id, text, parse_mode='HTML') parse_mode='HTML', disable_web_page_preview=True)
with shelve.open('chat_stats') as s:
bot.send_message(ADMIN_ID, f"""<code>Доброе утро, мир!</code> @bot.message_handler(commands=['stats'])
def send_stats(message):
👮🏼 <b>Статистика нарушений за сутки</b> bot.send_message(message.chat.id, report.create_report_text(),
├ <b>Заблокировано спамеров:</b> {s['Banned']} parse_mode='HTML', disable_web_page_preview=True)
└ <b>Удалено сообщений:</b> {s['Deleted']}""", parse_mode='HTML')
@bot.message_handler(commands=['reset_stats'])
def send_stats(message):
report.reset_report_stats()
bot.send_message(message.chat.id, report.reset_report_stats(),
parse_mode='HTML', disable_web_page_preview=True)
def check_unwanted_list(type_message: types.Message) -> bool: def check_unwanted_list(type_message: types.Message) -> bool:
@@ -208,6 +215,17 @@ def unwanted_mentions(message: types.Message):
bot.reply_to(message, f'У нас таких не любят! 🥴', parse_mode='HTML') bot.reply_to(message, f'У нас таких не любят! 🥴', parse_mode='HTML')
@bot.message_handler(func=lambda a: True)
def unwanted_mentions(message: types.Message):
""" Count messages. """
with shelve.open('chat_stats', writeback=True) as s:
s['Messages'][message.from_user.id] = s['Messages'].get(message.from_user.id,
{'Name': message.from_user.first_name,
'Username': message.from_user.username,
'Count': 0})
s['Messages'][message.from_user.id]['Count'] += 1
@app.route(f"/bot{TOKEN}/", methods=['POST']) @app.route(f"/bot{TOKEN}/", methods=['POST'])
def webhook(): def webhook():
""" Parse POST requests from Telegram. """ """ Parse POST requests from Telegram. """
+4 -8
View File
@@ -5,8 +5,8 @@ import time
from threading import Thread from threading import Thread
from datetime import datetime as dt from datetime import datetime as dt
import csv import csv
import shelve
from .config import PYTHONCHATRU, bot from .config import PYTHONCHATRU, bot
from . import report
# https://core.telegram.org/bots/api Telegram Bot API # https://core.telegram.org/bots/api Telegram Bot API
@@ -41,13 +41,9 @@ def remind(chat_to_repeat, today):
@repeat(every().day.at('05:00'), PYTHONCHATRU) @repeat(every().day.at('05:00'), PYTHONCHATRU)
def stat_report(chat_to_repeat): def stat_report(chat_to_repeat):
with shelve.open('chat_stats') as s: bot.send_message(chat_to_repeat, report.create_report_text(),
bot.send_message(chat_to_repeat, f"""<code>Доброе утро, мир!</code> parse_mode='HTML', disable_web_page_preview=True)
report.reset_report_stats()
👮🏼 <b>Статистика нарушений за сутки</b>
├ <b>Заблокировано спамеров:</b> {s['Banned']}
└ <b>Удалено сообщений:</b> {s['Deleted']}""", parse_mode='HTML')
s['Banned'] = s['Deleted'] = 0 # Clear
def print_get_jobs(): def print_get_jobs():
+36
View File
@@ -0,0 +1,36 @@
import shelve
def create_report_text():
with shelve.open('chat_stats') as s:
text = ''
flooders = []
for n in range(min(5, len(s['Messages']))):
flooders.append(
s['Messages'][sorted(s['Messages'], key=lambda a: s['Messages'][a]['Count'], reverse=True)[n]])
for i, flooder in enumerate(flooders):
username = flooder['Username']
name = flooder['Name']
count = flooder['Count']
text += f'\n {i + 1}. <a href="https://t.me/{username}">{name}</a> ({count})'
report = f"""<code>Доброе утро, мир!</code>
<b>ЗА ПРОШЕДШИЕ СУТКИ:</b>
👮🏼 <b>Заблокировано</b>
├ <b>Пользователей: </b>{s['Banned']}
└ <b>Сообщений: </b>{s['Deleted']}
🏆 <b>Почётные флудеры</b>{text}"""
return report
def reset_report_stats():
with shelve.open('chat_stats') as s:
s['Messages'] = {}
s['Banned'] = s['Deleted'] = 0
return f"""
{s['Messages']=}
{s['Banned']=}
{s['Deleted']=}"""