diff --git a/cogs/stage.py b/cogs/stage.py index 59e57f1..f6ff126 100644 --- a/cogs/stage.py +++ b/cogs/stage.py @@ -1,12 +1,30 @@ -from discord import SlashCommandGroup, option, ApplicationContext, Attachment +from datetime import datetime +from zoneinfo import ZoneInfo + +from discord import ApplicationContext, Attachment, SlashCommandGroup, option from discord.ext.commands import Cog from discord.utils import basic_autocomplete -from classes import PycordGuild, PycordEventStage, PycordEvent +from classes import PycordEvent, PycordEventStage, PycordGuild from classes.pycord_bot import PycordBot from modules.utils import autocomplete_active_events, autocomplete_event_stages +async def validate_event_status( + ctx: ApplicationContext, + event: PycordEvent, +) -> None: + if event.cancelled: + # TODO Make a nice message + await ctx.respond("This event was cancelled.") + return + + if event.starts <= datetime.now(tz=ZoneInfo("UTC")) <= event.ends: + # TODO Make a nice message + await ctx.respond("Ongoing events cannot be modified.") + return + + class Stage(Cog): """Cog with event stage management commands.""" @@ -39,13 +57,16 @@ class Stage(Cog): media: Attachment = None, ) -> None: guild: PycordGuild = await self.bot.find_guild(ctx.guild.id) - pycord_event: PycordEvent = await self.bot.find_event(event) if not guild.is_configured(): # TODO Make a nice message await ctx.respond("Guild is not configured.") return + pycord_event: PycordEvent = await self.bot.find_event(event) + + await validate_event_status(ctx, pycord_event) + event_stage: PycordEventStage = await self.bot.create_event_stage( event=pycord_event, event_id=pycord_event._id, @@ -96,14 +117,18 @@ class Stage(Cog): remove_media: bool = False, ) -> None: guild: PycordGuild = await self.bot.find_guild(ctx.guild.id) - pycord_event: PycordEvent = await self.bot.find_event(event) - event_stage: PycordEventStage = await self.bot.find_event_stage(stage) if not guild.is_configured(): # TODO Make a nice message await ctx.respond("Guild is not configured.") return + pycord_event: PycordEvent = await self.bot.find_event(event) + + await validate_event_status(ctx, pycord_event) + + event_stage: PycordEventStage = await self.bot.find_event_stage(stage) + if order is not None and order > len(pycord_event.stage_ids): # TODO Make a nice message await ctx.respond("Stage sequence out of range.") @@ -149,14 +174,18 @@ class Stage(Cog): return guild: PycordGuild = await self.bot.find_guild(ctx.guild.id) - pycord_event: PycordEvent = await self.bot.find_event(event) - event_stage: PycordEventStage = await self.bot.find_event_stage(stage) if not guild.is_configured(): # TODO Make a nice message await ctx.respond("Guild is not configured.") return + pycord_event: PycordEvent = await self.bot.find_event(event) + + await validate_event_status(ctx, pycord_event) + + event_stage: PycordEventStage = await self.bot.find_event_stage(stage) + await pycord_event.remove_stage(self.bot, event_stage._id, cache=self.bot.cache) await event_stage.purge(cache=self.bot.cache)