""" Commands for creating items in bot. """ from typing import Optional import nextcord from nextcord.ext import commands # pylint: disable=import-error from utilities.utils import autofill_groups, MAX_LINE_LENGTH class CreateCog(commands.Cog, name="Create Cog"): """ Class holds commands for creating things. """ def __init__(self) -> None: """ Default constructor for CreateCog class. """ @nextcord.slash_command(default_member_permissions=nextcord.Permissions(administrator=True)) async def create(self, interaction: nextcord.Interaction): """ Parent slash command for creating things. Never called. """ @create.subcommand(description="Create a new category. Must not exist already in CategoryGroup.") async def category( self, interaction: nextcord.Interaction, group_id: str = nextcord.SlashOption(name="group", description="Group to add Category to.", required=True), category_name: str = nextcord.SlashOption(description="Name of new Category.", required=True), is_ascending: bool = nextcord.SlashOption(description="If higher value is better score.", required=True), is_time_record: bool = nextcord.SlashOption( description="If the score should be shown in time format. Cannot be changed.", required=True ), is_validated: bool = nextcord.SlashOption( description="If scores need to be validated before posted.", required=True ), size: int = nextcord.SlashOption( description="How many scores to post in Category. Default is 3.", required=False, default=3, min_value=1 ), ) -> None: pass @create.subcommand(description="Create a new Category Group. Must not exist already for Guild.") async def group( self, interaction: nextcord.Interaction, group_name: str = nextcord.SlashOption(description="Name of new Group.", required=True), pad_length: int = nextcord.SlashOption( description="Number of characters alloted to a category. Default is 26.", required=False, default=26, min_value=7, max_value=MAX_LINE_LENGTH, ), username_length: int = nextcord.SlashOption( description="Number of characters of a username to display. Default is 12.", required=False, default=12, minvalue=1, max_value=30, ), channel: Optional[nextcord.abc.GuildChannel] = nextcord.SlashOption( description="Channel to post Group in. If left empty, defaults to current channel.", required=False, channel_types=[nextcord.ChannelType.text], default=None, ), ) -> None: pass @category.on_autocomplete("group_id") async def group_autocomplete(self, interaction: nextcord.Interaction, group_id: str): """ Collects list of table names and compares to input table name for autocomplete assistance. Args: interaction (nextcord.Interaction): Interaction with command. group_id (str): String to run autocomplete compared to. """ await interaction.response.send_autocomplete(autofill_groups(interaction.guild_id, group_id))