From f8973df9267aeeb61d651efc449622b63ae79c29 Mon Sep 17 00:00:00 2001 From: Wiktor Jaworski Date: Thu, 29 Feb 2024 23:42:34 +0100 Subject: [PATCH 1/3] Fix editing hidden event --- sggwbot/calendar.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sggwbot/calendar.py b/sggwbot/calendar.py index ae58fd1..db4643c 100644 --- a/sggwbot/calendar.py +++ b/sggwbot/calendar.py @@ -1384,6 +1384,7 @@ async def callback(self, interaction: Interaction) -> None: if old_event is not None: event.reminder = old_event.reminder + event.is_hidden = old_event.is_hidden update_date_result = self._update_reminder_date(old_event, event) self._send_info_to_console(old_event, event, member) From 69cbf7c2af78cd44df31e3aef382116a6dea8c97 Mon Sep 17 00:00:00 2001 From: Wiktor Jaworski Date: Thu, 29 Feb 2024 23:43:03 +0100 Subject: [PATCH 2/3] Add calendar copy command --- sggwbot/calendar.py | 55 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 50 insertions(+), 5 deletions(-) diff --git a/sggwbot/calendar.py b/sggwbot/calendar.py index db4643c..23c0bf5 100644 --- a/sggwbot/calendar.py +++ b/sggwbot/calendar.py @@ -18,6 +18,7 @@ import re import sys import uuid +from copy import deepcopy from dataclasses import dataclass, field from enum import Enum, auto from typing import TYPE_CHECKING, Any, Callable, ClassVar, Coroutine, Generator @@ -246,6 +247,37 @@ async def _edit( ) await interaction.response.send_modal(modal) + @_calendar.subcommand( + name="copy", + description="Copy an event.", + ) + @InteractionUtils.with_info( + catch_exceptions=[ + UpdateEmbedError, + ValueError, + ExceptionData( + IndexError, + with_traceback_in_response=False, + with_traceback_in_log=False, + ), + ], + ) + @InteractionUtils.with_log() + async def _copy( + self, + interaction: Interaction, + index: str = SlashOption( + description="The index of the event to copy started from 1.", + ), + ) -> None: + event = self._model.get_event_with_index(index) + modal = EventModal( + EventModalType.COPY, + self._ctrl, + event=event, + ) + await interaction.response.send_modal(modal) + @_calendar.subcommand( name="hide", description="Hide an event.", @@ -998,12 +1030,16 @@ def summary_of_events(self) -> str: if visible_events: result.append("Visible events:") for i, event in enumerate(visible_events): - result.append(f"{i+1}.{' 🔔' if event.reminder else ''} {event.full_info}") + result.append( + f"{i+1}.{' 🔔' if event.reminder else ''} {event.full_info}" + ) if hidden_events: result.append("\nHidden events:") for i, event in enumerate(hidden_events): - result.append(f"_{i+1}.{' 🔔' if event.reminder else ''} {event.full_info}") + result.append( + f"_{i+1}.{' 🔔' if event.reminder else ''} {event.full_info}" + ) return "\n".join(result) @@ -1232,6 +1268,7 @@ class EventModalType(Enum): ADD = auto() ADD_HIDDEN = auto() EDIT = auto() + COPY = auto() class EventModal(Modal): # pylint: disable=too-many-instance-attributes @@ -1308,6 +1345,8 @@ def __init__( title = "Add a new hidden event" case EventModalType.EDIT: title = "Edit the event" + case EventModalType.COPY: + title = "Copy the event" case _: raise NotImplementedError @@ -1383,7 +1422,7 @@ async def callback(self, interaction: Interaction) -> None: event = self._create_new_event() if old_event is not None: - event.reminder = old_event.reminder + event.reminder = deepcopy(old_event.reminder) event.is_hidden = old_event.is_hidden update_date_result = self._update_reminder_date(old_event, event) @@ -1393,7 +1432,7 @@ async def callback(self, interaction: Interaction) -> None: old_event, event, update_date_result ) - if old_event is not None: + if old_event is not None and self.modal_type is not EventModalType.COPY: self._controller.model.remove_event_from_json(old_event) embed = nextcord.utils.MISSING @@ -1494,6 +1533,9 @@ def _send_info_to_console( case EventModalType.EDIT: assert old_event is not None content += f"edited the event '{old_event.full_info}' -> " + case EventModalType.COPY: + assert old_event is not None + content += f"copied the event '{old_event.full_info}' -> " case _: raise NotImplementedError content += f"'{new_event.full_info}'" @@ -1508,10 +1550,13 @@ def _generate_response_content( result = f"Event '{new_event.full_info}' has been " match self.modal_type: - case EventModalType.ADD | EventModalType.ADD_HIDDEN: + case EventModalType.ADD | EventModalType.ADD_HIDDEN | EventModalType.COPY: result += "added." case EventModalType.EDIT: result += "edited." + case EventModalType.COPY: + assert old_event is not None + result += f"copied from the event '{old_event.full_info}'." case _: raise NotImplementedError From f5542bf4fe5de662e5bacd77964d3fd261143ef1 Mon Sep 17 00:00:00 2001 From: Wiktor Jaworski Date: Fri, 1 Mar 2024 18:03:10 +0100 Subject: [PATCH 3/3] Update to 0.8.0-beta.5 --- sggwbot/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sggwbot/__init__.py b/sggwbot/__init__.py index fef83a7..2c2c0ba 100644 --- a/sggwbot/__init__.py +++ b/sggwbot/__init__.py @@ -19,7 +19,7 @@ __author__ = "Wiktor Jaworski" __license__ = "MIT" __copyright__ = "Copyright 2023, 2024 Wiktor Jaworski" -__version__ = "0.8.0-beta.4" +__version__ = "0.8.0-beta.5" from . import console, errors, utils from .sggw_bot import SGGWBot