From dd73e9b472a17699139058af18b7e4bb95f4f1e6 Mon Sep 17 00:00:00 2001 From: alwayscompiling Date: Tue, 15 Nov 2022 15:48:17 -0500 Subject: [PATCH] Add commands to edit username length and category pad. --- classes/guild.py | 25 ++++++++++- cogs/commands/settings_management.py | 65 ++++++++++++++++++++++++---- 2 files changed, 80 insertions(+), 10 deletions(-) diff --git a/classes/guild.py b/classes/guild.py index 30c1177..522fa06 100644 --- a/classes/guild.py +++ b/classes/guild.py @@ -16,6 +16,7 @@ class Guild: Args: guild_id (int): Discord Guild id of new Guild """ + self._category_pad_length: int = 25 self._guild_id: int = guild_id self._highscore_channel_id: int = 0 self._submission_channel_id: int = 0 @@ -45,6 +46,7 @@ class Guild: Guild: Populated Guild object """ guild = cls(guild_id) + guild.category_pad_length = data["category_pad_length"] guild.highscore_channel = data["highscore_channel_id"] guild.submission_channel = data["submission_channel_id"] guild.username_length = data["username_length"] @@ -56,10 +58,30 @@ class Guild: return guild + @property + def category_pad_length(self) -> int: + """ + Getter for Category Pad Length. + + Returns: + int: Length to pad each category entry. + """ + return self._category_pad_length + + @category_pad_length.setter + def category_pad_length(self, length: int) -> None: + """ + Setter for Category Pad Length. + + Args: + length (int): New length to set. + """ + self._category_pad_length = length + @property def guild_id(self) -> int: """ - Getter for Guild id + Getter for Guild id. Returns: int: Guild id @@ -190,6 +212,7 @@ class Guild: """ data: dict = {} + data["category_pad_length"] = self.category_pad_length data["highscore_channel_id"] = self.highscore_channel data["submission_channel_id"] = self.submission_channel data["tables"] = {} diff --git a/cogs/commands/settings_management.py b/cogs/commands/settings_management.py index 5ffe314..f18e602 100644 --- a/cogs/commands/settings_management.py +++ b/cogs/commands/settings_management.py @@ -2,8 +2,10 @@ Commands for managing the Guild's settings. """ -from nextcord.ext import commands +from typing import Optional + import nextcord +from nextcord.ext import commands from highscores import highscores_data # pylint: disable=import-error @@ -28,7 +30,7 @@ class SettingsManagementCog(commands.Cog, name="Settings Management"): async def highscore( self, interaction: nextcord.Interaction, - channel: nextcord.abc.GuildChannel = nextcord.SlashOption( + channel: Optional[nextcord.abc.GuildChannel] = nextcord.SlashOption( description="Channel to register", required=False, channel_types=[nextcord.ChannelType.text], @@ -55,7 +57,7 @@ class SettingsManagementCog(commands.Cog, name="Settings Management"): async def submission( self, interaction: nextcord.Interaction, - channel: nextcord.abc.GuildChannel = nextcord.SlashOption( + channel: Optional[nextcord.abc.GuildChannel] = nextcord.SlashOption( description="Channel to register", required=False, channel_types=[nextcord.ChannelType.text], @@ -82,7 +84,7 @@ class SettingsManagementCog(commands.Cog, name="Settings Management"): async def verify( self, interaction: nextcord.Interaction, - channel: nextcord.abc.GuildChannel = nextcord.SlashOption( + channel: Optional[nextcord.abc.GuildChannel] = nextcord.SlashOption( description="Channel to register", required=False, channel_types=[nextcord.ChannelType.text], @@ -105,8 +107,53 @@ class SettingsManagementCog(commands.Cog, name="Settings Management"): guild.verification_channel = channel_id highscores_data.save_guild_data(guild) - # @nextcord.slash_command() - # async def set(self): - # """ - # Parent slash command for setting settings. Never called. - # """ \ No newline at end of file + @nextcord.slash_command(default_member_permissions=nextcord.Permissions(administrator=True)) + async def set(self, interaction: nextcord.Interaction): + """ + Parent slash command for setting settings. Never called. + """ + + @set.subcommand( + description="Set character length for a category. Can cut off usernames if is too short. Affects all categories." + ) + async def category_pad_length( + self, + interaction: nextcord.Interaction, + length: Optional[int] = nextcord.SlashOption( + description="Number of characters.", required=True, default=25 + ), + ) -> None: + """ + Changes guild's category pad length. + + Args: + interaction (nextcord.Interaction): Interaction that invoked the command + length (int): Number of characters. Is SlashOption. Defaults to 25. + """ + + guild = highscores_data.get_guild(interaction.guild_id) + guild.category_pad_length = length + highscores_data.save_guild_data(guild) + await interaction.response.send_message( + f"Category pad length set to {length}", ephemeral=True + ) + + @set.subcommand(description="Set username length. Limits all submissions to this length.") + async def username_length( + self, + interaction: nextcord.Interaction, + length: Optional[int] = nextcord.SlashOption( + description="Number of characters.", required=True, default=12 + ), + ) -> None: + """ + Changes guild's username length limit. + + Args: + interaction (nextcord.Interaction): Interaction that invoked the command + length (int): Number of charactesr. Is SlashOption. Defaults to 12. + """ + guild = highscores_data.get_guild(interaction.guild_id) + guild.username_length = length + highscores_data.save_guild_data(guild) + await interaction.response.send_message(f"Username length set to {length}", ephemeral=True)