Browse Source

Рефактор. Теперь можно узнать версию бота.

Сделал функцию для очистки старых сообщений лучше, красивее, вынес ее
из главного модуля. Также добавил версию бота.
master
Дмитрий 3 years ago
parent
commit
e1b5ea129e
  1. 45
      main.py
  2. 22
      services.py
  3. 1
      settings.py

45
main.py

@ -4,7 +4,7 @@ from aiogram import Bot, Dispatcher, executor, types
from aiogram.utils.exceptions import MessageToDeleteNotFound from aiogram.utils.exceptions import MessageToDeleteNotFound
import asyncio import asyncio
from datetime import timedelta 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 from aiogram.utils.markdown import escape_md
import settings import settings
import services 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 # https://stackoverflow.com/questions/67637631/create-a-background-process-using-aiogram
async def messages_cleanup() -> None: async def messages_cleanup() -> None:
"""Зачистка пропущенных сообщений. При запуске бота проверяет, есть ли не удаленные сообщения требующие удаления, удаляет их.""" """Зачистка пропущенных сообщений. При запуске бота проверяет, есть ли не удаленные сообщения требующие удаления, удаляет их."""
while True: while True:
msg_list = ( await services.delete_old_messages(bot)
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 asyncio.sleep(600) await asyncio.sleep(600)
async def on_startup(dispatcher: Dispatcher) -> None: async def on_startup(dispatcher: Dispatcher) -> None:
"""Задачи для запуска при старте бота."""
asyncio.create_task(messages_cleanup()) asyncio.create_task(messages_cleanup())

22
services.py

@ -133,3 +133,25 @@ def get_static(name: str) -> str:
with open(name, "r") as f: with open(name, "r") as f:
msg = f.read() msg = f.read()
return msg 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()

1
settings.py

@ -12,3 +12,4 @@ CHAT_ID = getenv("GBOT_CHAT_ID")
ADMINS = [106693654, 7063133, 4978608] ADMINS = [106693654, 7063133, 4978608]
API_TOKEN = getenv("TELEGRAM_API_TOKEN") API_TOKEN = getenv("TELEGRAM_API_TOKEN")
DB_PATH = getenv("GBOT_DB_PATH") DB_PATH = getenv("GBOT_DB_PATH")
VERSION = 1.01

Loading…
Cancel
Save