From 582b88e24826480841d295047364c270465cec2d Mon Sep 17 00:00:00 2001 From: alwayscompiling Date: Sun, 4 Dec 2022 22:42:55 -0500 Subject: [PATCH] Create set command over Settings Management. --- cogs/commands/__init__.py | 4 +- .../{settings_management.py => set.py} | 198 +++++++++--------- 2 files changed, 98 insertions(+), 104 deletions(-) rename cogs/commands/{settings_management.py => set.py} (89%) diff --git a/cogs/commands/__init__.py b/cogs/commands/__init__.py index 0107117..79a9734 100644 --- a/cogs/commands/__init__.py +++ b/cogs/commands/__init__.py @@ -7,7 +7,7 @@ from nextcord.ext import commands # Command classes from .data_management import DataManagementCog from .message_management import MessageManagementCog -from .settings_management import SettingsManagementCog +from .set import SetCog # This function will be called when this extension is loaded. @@ -18,4 +18,4 @@ def setup(bot: commands.Bot): """ bot.add_cog(DataManagementCog(bot)) bot.add_cog(MessageManagementCog(bot)) - bot.add_cog(SettingsManagementCog()) + bot.add_cog(SetCog()) diff --git a/cogs/commands/settings_management.py b/cogs/commands/set.py similarity index 89% rename from cogs/commands/settings_management.py rename to cogs/commands/set.py index bca7364..5e2dd80 100644 --- a/cogs/commands/settings_management.py +++ b/cogs/commands/set.py @@ -1,5 +1,5 @@ """ -Commands for managing the Guild's settings. +Set command heirarchy. """ from typing import Optional @@ -13,114 +13,16 @@ from utilities.sql_alchemy_connection import CategoryGroup, Guild, session from utilities.utils import autofill_groups -class SettingsManagementCog(commands.Cog, name="Settings Management"): +class SetCog(commands.Cog, name="Set command."): """ - Class holds commands for managing Guild's settings. + Class holds commands for setting variables in guild's database. """ def __init__(self) -> None: """ - Default constructor for SettingsManagement class. Does nothing. + Default constructor for SetCog class. Does nothing. """ - @nextcord.slash_command(default_member_permissions=nextcord.Permissions(administrator=True)) - async def register(self, interaction: nextcord.Interaction): - """ - Parent slash command, never called. - """ - - @register.subcommand(description="Registers the channel for a Category Group's messages.") - async def group_output_channel( - self, - interaction: nextcord.Interaction, - group_id: str = nextcord.SlashOption( - name="group", description="Category Group to assign to channel.", required=True - ), - channel: Optional[nextcord.abc.GuildChannel] = nextcord.SlashOption( - description="Channel to register", - required=False, - channel_types=[nextcord.ChannelType.text], - default=None, - ), - ) -> None: - """ - Command function to register a CategoryGroup's output channel. - - Args: - interaction (nextcord.Interaction): Interaction that invoked the command - group_id (str): String representation of Group id to register channel to. Is SlashOption. - channel (nextcord.abc.GuildChannel, optional): Channel to register - Is a SlashOption. Limited to text channels, Defaults to None. - """ - if not channel: - channel = interaction.channel - channel_id = channel.id - stmt = ( - select(CategoryGroup) - .where(CategoryGroup.GuildId == interaction.guild_id) - .where(CategoryGroup.GroupId == int(group_id)) - ) - group = session.scalar(stmt) - group.ChannelId = channel_id - session.commit() - await interaction.send(f"Registered <#{channel_id}>.", ephemeral=True) - - @register.subcommand(description="Registers the channel for submission messages.") - async def submission( - self, - interaction: nextcord.Interaction, - channel: Optional[nextcord.abc.GuildChannel] = nextcord.SlashOption( - description="Channel to register", - required=False, - channel_types=[nextcord.ChannelType.text], - default=None, - ), - ) -> None: - """ - Command function to register the submission message channel. - - Args: - interaction (nextcord.Interaction): Interaction that invoked the command - channel Optional[nextcord.abc.GuildChannel], optional): Channel to register - Is a SlashOption. Limited to text channels, Defaults to None. - """ - if not channel: - channel = interaction.channel - channel_id = channel.id - stmt = select(Guild).where(Guild.GuildId == interaction.guild_id) - guild = session.scalar(stmt) - guild.SubmissionChannel = channel_id - session.commit() - await interaction.send(f"Registered <#{channel_id}>.", ephemeral=True) - - @register.subcommand(description="Registers the channel for verification messages.") - async def verify( - self, - interaction: nextcord.Interaction, - channel: Optional[nextcord.abc.GuildChannel] = nextcord.SlashOption( - description="Channel to register", - required=False, - channel_types=[nextcord.ChannelType.text], - default=None, - ), - ) -> None: - """ - Command function to register the verification message channel. - - Args: - interaction (nextcord.Interaction): Interaction that invoked the command - channel (Optional[nextcord.abc.GuildChannel]): Channel to register - Is a SlashOption. Limited to text channels, Defaults to None. - """ - if not channel: - channel = interaction.channel - channel_id = channel.id - stmt = select(Guild).where(Guild.GuildId == interaction.guild_id) - guild = session.scalar(stmt) - guild.VerificationChannel = channel_id - session.commit() - await interaction.send(f"Registered <#{channel_id}>.", ephemeral=True) - @nextcord.slash_command(default_member_permissions=nextcord.Permissions(administrator=True)) async def set(self, interaction: nextcord.Interaction): """ @@ -159,6 +61,70 @@ class SettingsManagementCog(commands.Cog, name="Settings Management"): f"Category pad length set to {length} for {group.GroupName}", ephemeral=True ) + @set.subcommand(description="Registers the channel for a Category Group's messages.") + async def group_output_channel( + self, + interaction: nextcord.Interaction, + group_id: str = nextcord.SlashOption( + name="group", description="Category Group to assign to channel.", required=True + ), + channel: Optional[nextcord.abc.GuildChannel] = nextcord.SlashOption( + description="Channel to register", + required=False, + channel_types=[nextcord.ChannelType.text], + default=None, + ), + ) -> None: + """ + Command function to register a CategoryGroup's output channel. + + Args: + interaction (nextcord.Interaction): Interaction that invoked the command + group_id (str): String representation of Group id to register channel to. Is SlashOption. + channel (nextcord.abc.GuildChannel, optional): Channel to register + Is a SlashOption. Limited to text channels, Defaults to None. + """ + if not channel: + channel = interaction.channel + channel_id = channel.id + stmt = ( + select(CategoryGroup) + .where(CategoryGroup.GuildId == interaction.guild_id) + .where(CategoryGroup.GroupId == int(group_id)) + ) + group = session.scalar(stmt) + group.ChannelId = channel_id + session.commit() + await interaction.send(f"Registered <#{channel_id}>.", ephemeral=True) + + @set.subcommand(description="Registers the channel for submission messages.") + async def submission_channel( + self, + interaction: nextcord.Interaction, + channel: Optional[nextcord.abc.GuildChannel] = nextcord.SlashOption( + description="Channel to register", + required=False, + channel_types=[nextcord.ChannelType.text], + default=None, + ), + ) -> None: + """ + Command function to register the submission message channel. + + Args: + interaction (nextcord.Interaction): Interaction that invoked the command + channel Optional[nextcord.abc.GuildChannel], optional): Channel to register + Is a SlashOption. Limited to text channels, Defaults to None. + """ + if not channel: + channel = interaction.channel + channel_id = channel.id + stmt = select(Guild).where(Guild.GuildId == interaction.guild_id) + guild = session.scalar(stmt) + guild.SubmissionChannel = channel_id + session.commit() + await interaction.send(f"Registered <#{channel_id}>.", ephemeral=True) + @set.subcommand(description="Set username length for a Group of Categories.") async def username_length( self, @@ -186,6 +152,34 @@ class SettingsManagementCog(commands.Cog, name="Settings Management"): session.commit() await interaction.response.send_message(f"Username length set to {length}.", ephemeral=True) + @set.subcommand(description="Registers the channel for verification messages.") + async def verify_channel( + self, + interaction: nextcord.Interaction, + channel: Optional[nextcord.abc.GuildChannel] = nextcord.SlashOption( + description="Channel to register", + required=False, + channel_types=[nextcord.ChannelType.text], + default=None, + ), + ) -> None: + """ + Command function to register the verification message channel. + + Args: + interaction (nextcord.Interaction): Interaction that invoked the command + channel (Optional[nextcord.abc.GuildChannel]): Channel to register + Is a SlashOption. Limited to text channels, Defaults to None. + """ + if not channel: + channel = interaction.channel + channel_id = channel.id + stmt = select(Guild).where(Guild.GuildId == interaction.guild_id) + guild = session.scalar(stmt) + guild.VerificationChannel = channel_id + session.commit() + await interaction.send(f"Registered <#{channel_id}>.", ephemeral=True) + @group_output_channel.on_autocomplete("group_id") @category_pad_length.on_autocomplete("group_id") @username_length.on_autocomplete("group_id")