import os from telegram.ext import ExtBot from telegram.error import BadRequest import logging from datetime import time, timedelta, timezone, datetime, date from peewee import fn CHAT_ID = os.getenv("CHAT_ID") class SetChatPhotoJob(): def __init__(self, models, bot: ExtBot, job_queue): self.models = models self.bot = bot self.logger = logging.getLogger(self.__class__.__name__) if os.getenv("DOCKERIZED", "false") != "true": # when running locally, annoy the programmer every 60 seconds <3 job_queue.run_repeating(self.callback_photo, interval=60) else: # set the message sending time; include UTC shift +2 sending_time = time(hour=12, minute=0, second=0, tzinfo=timezone(timedelta(hours=2))) job_queue.run_monthly(self.callback_photo, when=sending_time, day=-1) async def callback_photo(self, context): # last_seen of memory must be older than 10 days in past or None with self.models.db: possible_photos = self.models.JournalEntry.select().where( self.models.JournalEntry.media_path != None ).order_by(fn.Random()) try: chosen_entry = possible_photos.get() except: self.logger.warning("No photos available.") return chat_id = os.getenv("CHAT_ID") try: await self.bot.set_chat_photo(chat_id, chosen_entry.media_path) except BadRequest: self.logger.error("This is a private chat!") return