""" 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 ( ElectionInformation, Presences, Votes, 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. Args: interaction (nextcord.Interaction): Interaction with command. presence (str): String to run autocomplete on. """ with Session(engine) as session: stmt = select(Presences) presences = session.scalars(stmt) # if empty compare string if not election_name: await interaction.response.send_autocomplete(elections[:25]) return autofilled_presences: "list[str]" = [ election for election in elections if election.lower().startswith(election_name.lower()) ] await interaction.response.send_autocomplete(autofilled_presences[:25])