From 81ae867a430b7368951e0f020ac2703777782939 Mon Sep 17 00:00:00 2001 From: imcompiling Date: Fri, 7 Mar 2025 12:56:45 -0500 Subject: [PATCH] Add set group and category name commands. --- cogs/commands/set.py | 94 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 83 insertions(+), 11 deletions(-) diff --git a/cogs/commands/set.py b/cogs/commands/set.py index eb4cd2c..684f951 100644 --- a/cogs/commands/set.py +++ b/cogs/commands/set.py @@ -30,9 +30,7 @@ class SetCog(commands.Cog, name="Set command."): async def category_size( self, interaction: nextcord.Interaction, - group_id: str = nextcord.SlashOption( - name="group", description="Category Group that Category is in.", required=True - ), + group_id: str = nextcord.SlashOption(name="group", description="Group that Category is in.", required=True), category_id: str = nextcord.SlashOption( name="category", description="Category to update size of.", required=True ), @@ -69,16 +67,14 @@ class SetCog(commands.Cog, name="Set command."): await interaction.response.send_message("Group was not found.", ephemeral=True) return - await send_highscore_message(session, interaction.guild, group) + await send_highscore_message(session, interaction.guild, group) await interaction.response.send_message(f"{category.name} size has been updated to {size}.", ephemeral=True) @category.subcommand(description="Update the is_ascending value for a category.") async def is_ascending( self, interaction: nextcord.Interaction, - group_id: str = nextcord.SlashOption( - name="group", description="Category Group that Category is in.", required=True - ), + group_id: str = nextcord.SlashOption(name="group", description="Group that Category is in.", required=True), category_id: str = nextcord.SlashOption( name="category", description="Category to update is_ascending of.", required=True ), @@ -117,7 +113,7 @@ class SetCog(commands.Cog, name="Set command."): await interaction.response.send_message("Group was not found.", ephemeral=True) return - await send_highscore_message(session, interaction.guild, group) + await send_highscore_message(session, interaction.guild, group) await interaction.response.send_message( f"{category.name} is_ascending has been updated to {ascending}.", ephemeral=True ) @@ -126,9 +122,7 @@ class SetCog(commands.Cog, name="Set command."): async def is_validated( self, interaction: nextcord.Interaction, - group_id: str = nextcord.SlashOption( - name="group", description="Category Group that Category is in.", required=True - ), + group_id: str = nextcord.SlashOption(name="group", description="Group that Category is in.", required=True), category_id: str = nextcord.SlashOption( name="category", description="Category to update is_ascending of.", required=True ), @@ -171,10 +165,85 @@ class SetCog(commands.Cog, name="Set command."): f"{category.name} is_validated has been updated to {validated}.", ephemeral=True ) + @category.subcommand(name="name", description="Change the name of a category.") + async def category_name( + self, + interaction: nextcord.Interaction, + group_id: str = nextcord.SlashOption(name="group", description="Group that Category is in.", required=True), + category_id: str = nextcord.SlashOption( + name="category", description="Category to update the name of.", required=True + ), + name: str = nextcord.SlashOption(description="Name to update to.", required=True, min_length=1, max_length=30), + ) -> None: + """ + Command to update a category's name. + + Args: + interaction (nextcord.Interaction): Interaction that invoked the command. + group_id (str): String representation of Group id to register channel to. Is SlashOption. + category_id (str): String representation of Category id to register channel to. Is SlashOption. + name (str): The name to update the category's name to. Is SlashOption. + """ + stmt = select(Category).where(col(CategoryGroup.id) == group_id).where(col(Category.id) == int(category_id)) + + with Session(engine) as session: + category = session.scalar(stmt) + if category is None: + await interaction.response.send_message("Category or Group was not found.", ephemeral=True) + return + old_name = category.name + category.name = name + # session.add(category) test if this is needed. SQLAlchemy can do the update without adding. + session.commit() + + # Use the relationship to get group category is in. + group = category.category_group + if group is None: + agon_logger.warning(f"{category.name}:{category.id} group relationship was None.") + + stmt = select(CategoryGroup).where(col(CategoryGroup.id) == group_id) + group = session.scalar(stmt) + if group is None: + await interaction.response.send_message("Group was not found.", ephemeral=True) + return + + await send_highscore_message(session, interaction.guild, group) + await interaction.response.send_message(f"{old_name} has been updated to {category.name}.", ephemeral=True) + @set.subcommand(description="Commands for editing a group.") async def group(self, interaction: nextcord.Interaction) -> None: """Parent slash subcommand for setting group settings. Never called.""" + @group.subcommand(name="name", description="Change the name of a Group.") + async def group_name( + self, + interaction: nextcord.Interaction, + group_id: str = nextcord.SlashOption(name="group", description="Group that Category is in.", required=True), + name: str = nextcord.SlashOption(description="Name to update to.", required=True, min_length=1, max_length=50), + ) -> None: + """ + Command to update a group's name. + + Args: + interaction (nextcord.Interaction): Interaction that invoked the command. + group_id (str): String representation of Group id to register channel to. Is SlashOption. + name (str): The name to update the group's name to. Is SlashOption. + """ + stmt = select(CategoryGroup).where(col(CategoryGroup.id) == group_id) + + with Session(engine) as session: + group = session.scalar(stmt) + if group is None: + await interaction.response.send_message("Group was not found.", ephemeral=True) + return + old_name = group.name + group.name = name + # session.add(group) test if this is needed. SQLAlchemy can do the update without adding. + session.commit() + + await send_highscore_message(session, interaction.guild, group) + await interaction.response.send_message(f"{old_name} has been updated to {group.name}.", ephemeral=True) + @group.subcommand(description="Registers the channel for a Group's messages.") async def output_channel( self, @@ -337,6 +406,7 @@ class SetCog(commands.Cog, name="Set command."): session.commit() await interaction.send(f"Registered <#{channel_id}>.", ephemeral=True) + @category_name.on_autocomplete("category_id") @category_size.on_autocomplete("category_id") @is_ascending.on_autocomplete("category_id") @is_validated.on_autocomplete("category_id") @@ -353,7 +423,9 @@ class SetCog(commands.Cog, name="Set command."): autofill_categories(interaction.guild_id, int(group_id), category_id) ) + @category_name.on_autocomplete("group_id") @category_size.on_autocomplete("group_id") + @group_name.on_autocomplete("group_id") @is_ascending.on_autocomplete("group_id") @is_validated.on_autocomplete("group_id") @output_channel.on_autocomplete("group_id")