Add cadence argument to the /schedule command

This allows setting the cadence, or changing it. When changing the initial start time will be reset
This commit is contained in:
Marc Di Luzio 2024-09-22 12:09:59 +01:00
parent b86aaf7016
commit e9cccefacb
2 changed files with 17 additions and 8 deletions

View file

@ -110,7 +110,8 @@ class MatcherCog(commands.Cog):
interaction: discord.Interaction, interaction: discord.Interaction,
members_min: int | None = None, members_min: int | None = None,
weekday: int | None = None, weekday: int | None = None,
hour: int | None = None): hour: int | None = None,
cadence: int | None = None):
"""Schedule a match using the input parameters""" """Schedule a match using the input parameters"""
# Set all the defaults # Set all the defaults
@ -120,6 +121,8 @@ class MatcherCog(commands.Cog):
weekday = 0 weekday = 0
if hour is None: if hour is None:
hour = 9 hour = 9
if cadence is None:
cadence = 1
channel_id = str(interaction.channel.id) channel_id = str(interaction.channel.id)
# Bail if not a matcher # Bail if not a matcher
@ -130,11 +133,11 @@ class MatcherCog(commands.Cog):
# Add the scheduled task and save # Add the scheduled task and save
state.State.set_channel_match_task( state.State.set_channel_match_task(
channel_id, members_min, weekday, hour) channel_id, members_min, weekday, hour, cadence)
# Let the user know what happened # Let the user know what happened
logger.info("Scheduled new match task in %s with min %s weekday %s hour %s", logger.info("Scheduled new match task in %s with min %s weekday %s hour %s and cadence %s",
channel_id, members_min, weekday, hour) channel_id, members_min, weekday, hour, cadence)
next_run = util.get_next_datetime(weekday, hour) next_run = util.get_next_datetime(weekday, hour)
view = discord.ui.View(timeout=None) view = discord.ui.View(timeout=None)

View file

@ -72,7 +72,7 @@ def _migrate_to_v5(d: dict):
for match in match_tasks: for match in match_tasks:
# All previous matches were every week starting from now # All previous matches were every week starting from now
match[_Key.CADENCE] = 1 match[_Key.CADENCE] = 1
match[_Key.CADENCE_START] = int(datetime.now().timestamp()) match[_Key.CADENCE_START] = datetime_to_ts(datetime.now())
# Set of migration functions to apply # Set of migration functions to apply
@ -107,7 +107,7 @@ class _Key(str):
WEEKDAY = "weekdays" WEEKDAY = "weekdays"
HOUR = "hours" HOUR = "hours"
CADENCE = "cadence" CADENCE = "cadence"
CADENCE_START = "CADENCE_START" CADENCE_START = "cadence_start"
# Unused # Unused
_MATCHEES = "matchees" _MATCHEES = "matchees"
@ -154,7 +154,7 @@ _SCHEMA = Schema(
_Key.WEEKDAY: Use(int), _Key.WEEKDAY: Use(int),
_Key.HOUR: Use(int), _Key.HOUR: Use(int),
_Key.CADENCE: Use(int), _Key.CADENCE: Use(int),
_Key.CADENCE_START: Use(int), _Key.CADENCE_START: Use(str),
} }
] ]
} }
@ -357,7 +357,7 @@ class _State():
yield (task[_Key.WEEKDAY], task[_Key.HOUR], task[_Key.MEMBERS_MIN]) yield (task[_Key.WEEKDAY], task[_Key.HOUR], task[_Key.MEMBERS_MIN])
@safe_write @safe_write
def set_channel_match_task(self, channel_id: str, members_min: int, weekday: int, hour: int): def set_channel_match_task(self, channel_id: str, members_min: int, weekday: int, hour: int, cadence: int):
"""Set up a match task on a channel""" """Set up a match task on a channel"""
channel = self._tasks.setdefault(str(channel_id), {}) channel = self._tasks.setdefault(str(channel_id), {})
matches = channel.setdefault(_Key.MATCH_TASKS, []) matches = channel.setdefault(_Key.MATCH_TASKS, [])
@ -368,6 +368,10 @@ class _State():
if match[_Key.WEEKDAY] == weekday and match[_Key.HOUR] == hour: if match[_Key.WEEKDAY] == weekday and match[_Key.HOUR] == hour:
found = True found = True
match[_Key.MEMBERS_MIN] = members_min match[_Key.MEMBERS_MIN] = members_min
# If the cadence has changed, update it and reset the start
if cadence != match[_Key.CADENCE]:
match[_Key.CADENCE] = cadence
match[_Key.CADENCE_START] = datetime_to_ts(datetime.now())
# Return true as we've successfully changed the data in place # Return true as we've successfully changed the data in place
return True return True
@ -377,6 +381,8 @@ class _State():
_Key.MEMBERS_MIN: members_min, _Key.MEMBERS_MIN: members_min,
_Key.WEEKDAY: weekday, _Key.WEEKDAY: weekday,
_Key.HOUR: hour, _Key.HOUR: hour,
_Key.CADENCE: cadence,
_Key.CADENCE_START: datetime_to_ts(datetime.now())
}) })
@safe_write @safe_write