MusicGen / app /sweeper.py
000x's picture
Upload 18 files
8d970a5 verified
Raw History Blame Contribute Delete
1.26 kB
"""Runs due "delete for everyone" jobs for the bot's own messages."""
from __future__ import annotations
import asyncio
import logging
from collections.abc import Awaitable, Callable
log = logging.getLogger("sweeper")
async def run_deletes(db, delete_for_everyone: Callable[[str, str], Awaitable[None]],
is_connected: Callable[[], bool], max_rows: int = 20) -> int:
"""Deletes due messages. Returns how many were deleted. Waits while offline."""
if not is_connected():
return 0
deleted = 0
for row in await db.due_deletes(max_rows):
try:
await delete_for_everyone(row["jid"], row["msg_id"])
await db.remove_delete(row["id"])
deleted += 1
except Exception as e: # keep going with the other rows
log.error("Auto-delete failed for %s: %s", row["msg_id"], e)
await db.fail_delete(row["id"], str(e))
return deleted
async def run_forever(db, delete_for_everyone, is_connected, interval: float = 60.0) -> None:
while True:
try:
await run_deletes(db, delete_for_everyone, is_connected)
except Exception as e:
log.error("Auto-delete pass failed: %s", e)
await asyncio.sleep(interval)