60 lines
2.4 KiB
Python
60 lines
2.4 KiB
Python
from datetime import time, timedelta, timezone, datetime, date
|
|
import os
|
|
from peewee import fn
|
|
|
|
|
|
class RandomMemoryJob():
|
|
def __init__(self, models, bot, job_queue):
|
|
self.models = models
|
|
self.bot = bot
|
|
|
|
|
|
# set the message sending time; include UTC shift +2
|
|
sending_time = time(hour=12, minute=00, second=0, tzinfo=timezone(timedelta(hours=2)))
|
|
|
|
# context.job_queue.run_daily(self.callback_memory, sending_time, chat_id=chat_id)
|
|
# job_queue.run_repeating(self.callback_memory, interval=10, first=sending_time)
|
|
job_queue.run_once(self.callback_memory, timedelta(seconds=2))
|
|
|
|
|
|
async def callback_memory(self, context):
|
|
|
|
# last_seen of memory must be older than 10 days in past or None
|
|
possible_entries = self.models.JournalEntry.select().where(
|
|
(datetime.today().date().year - self.models.JournalEntry.last_shown.year >= 0) | (self.models.JournalEntry.last_shown == None)).where(
|
|
(datetime.today().date().month - self.models.JournalEntry.last_shown.month >= 0) | (self.models.JournalEntry.last_shown == None)).where(
|
|
(datetime.today().date().day - self.models.JournalEntry.last_shown.day >= 0) | (self.models.JournalEntry.last_shown == None)).order_by(fn.Random())
|
|
|
|
# returns if all entries have been seen recently
|
|
if len(possible_entries) == 0:
|
|
print("Come back later for another memory.")
|
|
return
|
|
|
|
# update the last_shown of the chosen entry
|
|
chosen_entry = possible_entries.get()
|
|
# chosen_entry = self.models.JournalEntry.select().get()
|
|
# chosen_entry.last_shown = date(year=2023, month=5, day=3)
|
|
chosen_entry.last_shown = datetime.today().date()
|
|
chosen_entry.save()
|
|
|
|
chat_id = os.getenv("CHAT_ID")
|
|
|
|
if chosen_entry.media_path:
|
|
await self.bot.send_photo(
|
|
chat_id = chat_id,
|
|
photo = chosen_entry.media_path,
|
|
caption =
|
|
f"On {chosen_entry.date_pretty}, "
|
|
f"{chosen_entry.author} wrote: \n"
|
|
f"{chosen_entry.text}"
|
|
)
|
|
else:
|
|
await self.bot.send_message(
|
|
chat_id = chat_id,
|
|
text =
|
|
f"On {chosen_entry.date_pretty}, "
|
|
f"{chosen_entry.author} wrote: \n"
|
|
f"{chosen_entry.text}"
|
|
)
|
|
|