1- import asyncio
21import contextlib
32import datetime
3+ import asyncio
44
55import discord
6- from discord .ext import commands
6+ from discord .ext import commands , tasks
77from loguru import logger
88
99from prisma .models import Reminder
@@ -18,13 +18,11 @@ def __init__(self, bot: Tux) -> None:
1818 self .bot = bot
1919 self .db = DatabaseController ()
2020 self .remindme .usage = generate_usage (self .remindme )
21+ self ._initialized = False
2122
22- async def send_reminder (self , user_id : int , reminder : Reminder ) -> None :
23- user = self .bot .get_user (user_id )
24-
25- if user is None :
26- user = await self .bot .fetch_user (user_id )
2723
24+ async def send_reminder (self , reminder : Reminder ) -> None :
25+ user = self .bot .get_user (reminder .reminder_user_id )
2826 if user is not None :
2927 embed = EmbedCreator .create_embed (
3028 bot = self .bot ,
@@ -64,6 +62,25 @@ async def send_reminder(self, user_id: int, reminder: Reminder) -> None:
6462 except Exception as e :
6563 logger .error (f"Failed to delete reminder: { e } " )
6664
65+ @commands .Cog .listener ()
66+ async def on_ready (self ) -> None :
67+ if self ._initialized :
68+ return
69+
70+ self ._initialized = True
71+
72+ reminders = await self .db .reminder .get_all_reminders ()
73+ dt_now = datetime .datetime .now (datetime .UTC )
74+
75+ for reminder in reminders :
76+ seconds = (reminder .reminder_expires_at - dt_now ).total_seconds ()
77+
78+ if seconds <= 0 :
79+ await self .send_reminder (reminder )
80+ continue
81+
82+ self .bot .loop .call_later (seconds , asyncio .create_task , self .send_reminder (reminder ))
83+
6784 @commands .hybrid_command (
6885 name = "remindme" ,
6986 description = "Set a reminder for yourself" ,
@@ -130,7 +147,7 @@ async def remindme(
130147
131148 embed .add_field (
132149 name = "Note" ,
133- value = "- If you have DMs closed, we will attempt to send it in this channel instead." ,
150+ value = "- If you have DMs closed, we will attempt to send it in this channel instead.\n "
134151 )
135152
136153 except Exception as e :
@@ -144,7 +161,7 @@ async def remindme(
144161
145162 logger .error (f"Error creating reminder: { e } " )
146163
147- self .bot .loop .call_later (seconds , asyncio .create_task , self .send_reminder (ctx . author . id , reminder_obj ))
164+ self .bot .loop .call_later (seconds , asyncio .create_task , self .send_reminder (reminder_obj ))
148165
149166 await ctx .reply (embed = embed , ephemeral = True )
150167
0 commit comments