""" Commands for removing information in the database. """ import nextcord from nextcord.ext import commands from sqlalchemy import select from sqlalchemy.orm import Session from database_setup.sql_data_classes import Presences, engine class RemoveCog(commands.Cog, name="View Commands"): """ Holds the view commands. """ def __init__(self) -> None: """ Default constructor for RemoveCog class. Does nothing. """ @nextcord.slash_command( guild_ids=[1000247361639030804], default_member_permissions=nextcord.Permissions(administrator=True), ) # TODO remove guild ids async def remove(self, interaction: nextcord.Interaction): """ Parent slash command for set. Never called. """ @remove.subcommand(description="Remove a presence from the database.") async def presence( self, interaction: nextcord.Interaction, presence: str = nextcord.SlashOption( description="The presence to remove", required=True ), ): """ _summary_ Args: interaction (nextcord.Interaction): Interaction that invoked the command. presence (str): Is SlashOption. The presence to remove. """ @remove.on_autocomplete("presence") async def election_autocomplete( self, interaction: nextcord.Interaction, presence: str ): """ Collects all presences that start with the presence string. Sends autocomplete dict {Presence Name, Presence Id} Args: interaction (nextcord.Interaction): Interaction with command. presence (str): String to run autocomplete on. """ with Session(engine) as session: stmt = select(Presences) presences_dict: "dict[str,str]" = { pres.Presence: str(pres.Id) for pres in session.scalars(stmt) } # if empty compare string if not presence: await interaction.response.send_autocomplete( dict(list(presences_dict.items())[:25]) ) return autofilled_presences: "dict[str,str]" = { pres: pres_id for pres, pres_id in presences_dict.items() if presence.lower() in pres.lower() } await interaction.response.send_autocomplete(autofilled_presences[:25])