@@ -145,6 +145,7 @@ def calculate_next_run(self) -> datetime:
145145 now = datetime .now (timezone .utc )
146146 schedule = self .forum_showcase .schedule
147147 interval = self .forum_showcase .interval
148+ weekday_int = WEEKDAYS .index (self .forum_showcase .weekday )
148149
149150 next_run = schedule .replace (
150151 year = now .year , month = now .month , day = now .day , tzinfo = timezone .utc
@@ -154,8 +155,11 @@ def calculate_next_run(self) -> datetime:
154155 if interval == "daily" :
155156 next_run += relativedelta (days = 1 )
156157 elif interval == "weekly" :
157- weekday = WEEKDAYS .index (self .forum_showcase .weekday )
158- next_run += relativedelta (weekday = weekday )
158+ if weekday_int == now .weekday ():
159+ next_run += relativedelta (weeks = 1 )
160+ else :
161+ weekday = weekday_int
162+ next_run += relativedelta (weekday = weekday )
159163 elif interval == "monthly" :
160164 next_month = next_run .replace (day = 1 ) + relativedelta (months = 1 )
161165 next_month_day = (next_month + relativedelta (days = 1 )).day
@@ -386,13 +390,17 @@ async def config(self, interaction: Interaction):
386390 weekday_select = ConfigureWeekday (
387391 self .forum_showcase , self .forum_showcase_db , self .logger
388392 )
389-
390393 await interaction .followup .send (
391394 "Select a weekday" , view = weekday_select , ephemeral = True
392395 )
393396 await weekday_select .wait ()
394397
395- self .forum_showcase .weekday = weekday_select .forum_showcase .weekday
398+ if weekday_select .selected_weekday is not None :
399+ self .forum_showcase .weekday = weekday_select .forum_showcase .weekday
400+ self .logger .info (
401+ f"[FORUM-SHOWCASE] New weekday: { self .forum_showcase .weekday } "
402+ )
403+ await self .schedule_next_run ()
396404
397405 time_select = ConfigureTime (
398406 self .forum_showcase , self .forum_showcase_db , self .logger
@@ -402,9 +410,12 @@ async def config(self, interaction: Interaction):
402410 )
403411 await time_select .wait ()
404412
405- self .forum_showcase .schedule = time_select .forum_showcase .schedule
406-
407- await self .schedule_next_run ()
413+ if time_select .selected_time is not None :
414+ self .forum_showcase .schedule = time_select .forum_showcase .schedule
415+ self .logger .info (
416+ f"[FORUM-SHOWCASE] New schedule: { self .forum_showcase .schedule } "
417+ )
418+ await self .schedule_next_run ()
408419
409420 await interaction .followup .send (
410421 "All settings have been updated." , ephemeral = True
0 commit comments