Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
Rivixer committed Mar 1, 2024
2 parents 3fef380 + f5542bf commit 05fe059
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 6 deletions.
2 changes: 1 addition & 1 deletion sggwbot/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
56 changes: 51 additions & 5 deletions sggwbot/calendar.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.",
Expand Down Expand Up @@ -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)

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -1383,7 +1422,8 @@ 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)

self._send_info_to_console(old_event, event, member)
Expand All @@ -1392,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
Expand Down Expand Up @@ -1493,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}'"
Expand All @@ -1507,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

Expand Down

0 comments on commit 05fe059

Please sign in to comment.