From e1b5ea129eb5786d2336670031bf93f9d055079b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Fri, 1 Apr 2022 16:52:10 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80.=20=D0=A2=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B6=D0=BD=D0=BE=20=D1=83=D0=B7=D0=BD=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8E=20=D0=B1=D0=BE=D1=82=D0=B0?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Сделал функцию для очистки старых сообщений лучше, красивее, вынес ее из главного модуля. Также добавил версию бота. --- main.py | 45 +++++++++++++++++++++++++-------------------- services.py | 22 ++++++++++++++++++++++ settings.py | 1 + 3 files changed, 48 insertions(+), 20 deletions(-) diff --git a/main.py b/main.py index ce251dd..74bd365 100644 --- a/main.py +++ b/main.py @@ -4,7 +4,7 @@ from aiogram import Bot, Dispatcher, executor, types from aiogram.utils.exceptions import MessageToDeleteNotFound import asyncio from datetime import timedelta -from models import Allowed_user, Messages_to_delete, Base +from models import Messages_to_delete, Base from aiogram.utils.markdown import escape_md import settings import services @@ -154,33 +154,38 @@ async def wlc(message: types.Message) -> None: ) +@dp.message_handler(commands=["info"]) +@services.only_admins +async def get_info(message: types.Message) -> None: + """Вовзращает версию бота.""" + msg = f"Версия бота: *{settings.VERSION}*" + await message.reply( + msg, + reply=False, + parse_mode="Markdown", + ) + + +@dp.message_handler(commands=["test"]) +@services.only_admins +async def test_admins(message: types.Message): + """Справка по командам.""" + await message.reply( + "Справка для админов", + reply=False, + ) + + # https://stackoverflow.com/questions/67637631/create-a-background-process-using-aiogram async def messages_cleanup() -> None: """Зачистка пропущенных сообщений. При запуске бота проверяет, есть ли не удаленные сообщения требующие удаления, удаляет их.""" while True: - msg_list = ( - services.session.query(Messages_to_delete) - .order_by(Messages_to_delete.id) - .all() - ) - if msg_list: - for m in msg_list: - print(m.deletion_needed()) - if m.deletion_needed(): - try: - await bot.delete_message( - chat_id=settings.CHAT_ID, message_id=m.message_id - ) - services.session.delete(m) - services.session.commit() - except MessageToDeleteNotFound: - print("Сообщение не найдено!") - services.session.delete(m) - services.session.commit() + await services.delete_old_messages(bot) await asyncio.sleep(600) async def on_startup(dispatcher: Dispatcher) -> None: + """Задачи для запуска при старте бота.""" asyncio.create_task(messages_cleanup()) diff --git a/services.py b/services.py index 6079b1b..d559171 100644 --- a/services.py +++ b/services.py @@ -133,3 +133,25 @@ def get_static(name: str) -> str: with open(name, "r") as f: msg = f.read() return msg + + +async def delete_old_messages(bot: Bot) -> None: + """Удаляет сообещния, если их delete_date меньше чем время сейчас.""" + msg_list: Messages_to_delete = ( + session.query(Messages_to_delete).order_by(Messages_to_delete.id).all() + ) + # если удалять нечего, то выходим + if not msg_list: + return + + for m in msg_list: + if not m.deletion_needed(): + continue + try: + await bot.delete_message(chat_id=settings.CHAT_ID, message_id=m.message_id) + session.delete(m) + session.commit() + except MessageToDeleteNotFound: + print("Сообщение не найдено!") + session.delete(m) + session.commit() diff --git a/settings.py b/settings.py index d5ba6c1..36c1a36 100644 --- a/settings.py +++ b/settings.py @@ -12,3 +12,4 @@ CHAT_ID = getenv("GBOT_CHAT_ID") ADMINS = [106693654, 7063133, 4978608] API_TOKEN = getenv("TELEGRAM_API_TOKEN") DB_PATH = getenv("GBOT_DB_PATH") +VERSION = 1.01