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}"
 | |
|             )
 | |
| 
 |