From 12c5ece487e12abf05c7264d31be73d20ba4a7fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Hells=C3=A9n?= Date: Sat, 12 Apr 2025 10:59:29 +0200 Subject: [PATCH] Add pause and unpause commands for reminders --- discord_reminder_bot/main.py | 56 ++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/discord_reminder_bot/main.py b/discord_reminder_bot/main.py index 28df82b..f0fab27 100644 --- a/discord_reminder_bot/main.py +++ b/discord_reminder_bot/main.py @@ -1091,6 +1091,62 @@ class RemindGroup(discord.app_commands.Group): logger.info(f"Job {job_id} removed from the scheduler.") + # /remind pause + @discord.app_commands.command(name="pause", description="Pause a reminder") + async def pause(self, interaction: discord.Interaction, job_id: str) -> None: + """Pause a scheduled reminder. + + Args: + interaction (discord.Interaction): The interaction object for the command. + job_id (str): The identifier of the job to pause. + """ + await interaction.response.defer() + + logger.debug(f"Pausing reminder with ID {job_id} for {interaction.user} ({interaction.user.id}) in {interaction.channel}") + logger.debug(f"Arguments: {locals()}") + + try: + job: Job | None = scheduler.get_job(job_id) + if not job: + await interaction.followup.send(content=f"Reminder with ID {job_id} not found.", ephemeral=True) + return + scheduler.pause_job(job_id) + logger.info(f"Paused job {job_id}.") + await interaction.followup.send(content=f"Reminder with ID {job_id} paused successfully.") + except JobLookupError as e: + logger.exception(f"Failed to pause job {job_id}") + await interaction.followup.send(content=f"Failed to pause reminder with ID {job_id}. {e}", ephemeral=True) + + logger.info(f"Job {job_id} paused in the scheduler.") + + # /remind unpause + @discord.app_commands.command(name="unpause", description="Unpause a reminder") + async def unpause(self, interaction: discord.Interaction, job_id: str) -> None: + """Unpause a scheduled reminder. + + Args: + interaction (discord.Interaction): The interaction object for the command. + job_id (str): The identifier of the job to unpause. + """ + await interaction.response.defer() + + logger.debug(f"Unpausing reminder with ID {job_id} for {interaction.user} ({interaction.user.id}) in {interaction.channel}") + logger.debug(f"Arguments: {locals()}") + + try: + job: Job | None = scheduler.get_job(job_id) + if not job: + await interaction.followup.send(content=f"Reminder with ID {job_id} not found.", ephemeral=True) + return + scheduler.resume_job(job_id) + logger.info(f"Unpaused job {job_id}.") + await interaction.followup.send(content=f"Reminder with ID {job_id} unpaused successfully.") + except JobLookupError as e: + logger.exception(f"Failed to unpause job {job_id}") + await interaction.followup.send(content=f"Failed to unpause reminder with ID {job_id}. {e}", ephemeral=True) + + logger.info(f"Job {job_id} unpaused in the scheduler.") + intents: discord.Intents = discord.Intents.default() intents.guild_scheduled_events = True