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
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())

22
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()

1
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

Loading…
Cancel
Save