@@ -101,7 +101,12 @@ async def schedule_showcase(self):
101101 else :
102102 pass
103103
104- await self .schedule_next_run ()
104+ next_run = self .calculate_next_run (
105+ self .forum_showcase .schedule ,
106+ self .forum_showcase .interval ,
107+ self .forum_showcase .weekday ,
108+ )
109+ await self .schedule_next_run (next_run = next_run )
105110
106111 async def update_schedule (self , next_schedule : datetime ):
107112 now = datetime .now (timezone .utc )
@@ -120,13 +125,11 @@ async def update_schedule(self, next_schedule: datetime):
120125
121126 self .forum_showcase .schedule = next_schedule
122127
123- async def schedule_next_run (self , run_now = False ):
128+ async def schedule_next_run (self , next_run : datetime , run_now = False ):
124129 if not self .forum_showcase :
125130 self .logger .error ("[FORUM-SHOWCASE] No forum showcase configured" )
126131 return
127132
128- next_run = self .calculate_next_run ()
129-
130133 now = datetime .now (timezone .utc )
131134 diff = (next_run - now ).total_seconds ()
132135
@@ -141,11 +144,11 @@ async def schedule_next_run(self, run_now=False):
141144 "[FORUM-SHOWCASE] Next run time is in the past. Waiting for next interval."
142145 )
143146
144- def calculate_next_run (self ) -> datetime :
147+ def calculate_next_run (
148+ self , schedule : datetime , interval : str , day : str
149+ ) -> datetime :
145150 now = datetime .now (timezone .utc )
146- schedule = self .forum_showcase .schedule
147- interval = self .forum_showcase .interval
148- weekday_int = WEEKDAYS .index (self .forum_showcase .weekday )
151+ weekday_int = WEEKDAYS .index (day )
149152
150153 next_run = schedule .replace (
151154 year = now .year , month = now .month , day = now .day , tzinfo = timezone .utc
@@ -400,7 +403,12 @@ async def config(self, interaction: Interaction):
400403 self .logger .info (
401404 f"[FORUM-SHOWCASE] New weekday: { self .forum_showcase .weekday } "
402405 )
403- await self .schedule_next_run ()
406+ next_run = self .calculate_next_run (
407+ self .forum_showcase .schedule ,
408+ self .forum_showcase .interval ,
409+ self .forum_showcase .weekday ,
410+ )
411+ await self .schedule_next_run (next_run = next_run )
404412
405413 time_select = ConfigureTime (
406414 self .forum_showcase , self .forum_showcase_db , self .logger
@@ -411,11 +419,15 @@ async def config(self, interaction: Interaction):
411419 await time_select .wait ()
412420
413421 if time_select .selected_time is not None :
414- self .forum_showcase .schedule = time_select .forum_showcase .schedule
415422 self .logger .info (
416423 f"[FORUM-SHOWCASE] New schedule: { self .forum_showcase .schedule } "
417424 )
418- await self .schedule_next_run ()
425+ next_run = self .calculate_next_run (
426+ self .forum_showcase .schedule ,
427+ self .forum_showcase .interval ,
428+ self .forum_showcase .weekday ,
429+ )
430+ await self .schedule_next_run (next_run = next_run )
419431
420432 await interaction .followup .send (
421433 "All settings have been updated." , ephemeral = True
@@ -446,8 +458,12 @@ async def toggle(self, interaction: Interaction):
446458 status = await self .db_config .toggle_config ("forum_showcase" )
447459
448460 if status :
449- next_run = self .calculate_next_run ()
450- await self .schedule_next_run ()
461+ next_run = self .calculate_next_run (
462+ self .forum_showcase .schedule ,
463+ self .forum_showcase .interval ,
464+ self .forum_showcase .weekday ,
465+ )
466+ await self .schedule_next_run (next_run = next_run )
451467
452468 if not self .schedule_showcase .is_running ():
453469 self .schedule_showcase .start ()
0 commit comments