11import contextlib
22import datetime
3+ import asyncio
34
45import discord
56from discord .ext import commands , tasks
@@ -16,25 +17,10 @@ class RemindMe(commands.Cog):
1617 def __init__ (self , bot : Tux ) -> None :
1718 self .bot = bot
1819 self .db = DatabaseController ()
19- self .check_reminders .start ()
2020 self .remindme .usage = generate_usage (self .remindme )
2121
22- @tasks .loop (seconds = 120 )
23- async def check_reminders (self ):
24- reminders = await self .db .reminder .get_unsent_reminders ()
25-
26- try :
27- for reminder in reminders :
28- await self .send_reminder (reminder )
29- await self .db .reminder .update_reminder_status (reminder .reminder_id , sent = True )
30- logger .debug (f'Status of reminder { reminder .reminder_id } updated to "sent".' )
31-
32- except Exception as e :
33- logger .error (f"Error sending reminders: { e } " )
34-
35- async def send_reminder (self , reminder : Reminder ) -> None :
36- user = self .bot .get_user (reminder .reminder_user_id )
3722
23+ async def send_reminder (self , user : discord .User , reminder : Reminder ) -> None :
3824 if user is not None :
3925 embed = EmbedCreator .create_embed (
4026 bot = self .bot ,
@@ -69,9 +55,10 @@ async def send_reminder(self, reminder: Reminder) -> None:
6955 f"Failed to send reminder { reminder .reminder_id } , user with ID { reminder .reminder_user_id } not found." ,
7056 )
7157
72- @check_reminders .before_loop
73- async def before_check_reminders (self ):
74- await self .bot .wait_until_ready ()
58+ try :
59+ await self .db .reminder .delete_reminder_by_id (reminder .reminder_id )
60+ except Exception as e :
61+ logger .error (f"Failed to delete reminder: { e } " )
7562
7663 @commands .hybrid_command (
7764 name = "remindme" ,
@@ -120,7 +107,7 @@ async def remindme(
120107 expires_at = datetime .datetime .now (datetime .UTC ) + datetime .timedelta (seconds = seconds )
121108
122109 try :
123- await self .db .reminder .insert_reminder (
110+ reminder_obj = await self .db .reminder .insert_reminder (
124111 reminder_user_id = ctx .author .id ,
125112 reminder_content = reminder ,
126113 reminder_expires_at = expires_at ,
@@ -154,6 +141,8 @@ async def remindme(
154141
155142 logger .error (f"Error creating reminder: { e } " )
156143
144+ self .bot .loop .call_later (seconds , asyncio .create_task , self .send_reminder (ctx .author , reminder_obj ))
145+
157146 await ctx .reply (embed = embed , ephemeral = True )
158147
159148
0 commit comments