init
This commit is contained in:
42
assistant_bot/jobs.py
Normal file
42
assistant_bot/jobs.py
Normal file
@@ -0,0 +1,42 @@
|
||||
import asyncio
|
||||
import logging
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
from telegram.ext import Application
|
||||
|
||||
from .config import REMINDER_POLL_SECONDS
|
||||
from .storage import AssistantStorage
|
||||
from .time_utils import format_local_dt, utc_now
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def reminder_loop(application: Application) -> None:
|
||||
storage: AssistantStorage = application.bot_data["storage"]
|
||||
tz: ZoneInfo = application.bot_data["timezone"]
|
||||
|
||||
while True:
|
||||
try:
|
||||
due_reminders = storage.due_reminders(utc_now())
|
||||
for reminder in due_reminders:
|
||||
await application.bot.send_message(
|
||||
chat_id=reminder["chat_id"],
|
||||
text=(
|
||||
f"Напоминание #{reminder['id']} "
|
||||
f"({format_local_dt(reminder['remind_at'], tz)}):\n"
|
||||
f"{reminder['text']}"
|
||||
),
|
||||
)
|
||||
storage.mark_reminder_sent(int(reminder["id"]))
|
||||
except asyncio.CancelledError:
|
||||
raise
|
||||
except Exception:
|
||||
logger.exception("Reminder loop failed")
|
||||
|
||||
await asyncio.sleep(REMINDER_POLL_SECONDS)
|
||||
|
||||
|
||||
async def post_init(application: Application) -> None:
|
||||
application.create_task(reminder_loop(application))
|
||||
|
||||
Reference in New Issue
Block a user