""" Commands for removing information in the database. """ import nextcord from nextcord.ext import commands from sqlalchemy import delete, select from sqlalchemy.orm import Session from database_setup.sql_data_classes import Presences, engine class RemoveCog(commands.Cog, name="Remove Commands"): """ Holds the view commands. """ def __init__(self) -> None: """ Default constructor for RemoveCog class. Does nothing. """ @nextcord.slash_command( default_member_permissions=nextcord.Permissions(administrator=True), ) 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: str = nextcord.SlashOption( description="The presence to remove", required=True ), ): """ Deletes the given presence id from the database. Args: interaction (nextcord.Interaction): Interaction that invoked the command. presence (str): Is SlashOption. The presence to remove. Is the ID of the presence. """ presence_id = int(presence_str) with Session(engine) as session: stmt = delete(Presences).where(Presences.Id == presence_id) session.execute(stmt) session.commit() await interaction.response.send_message("Presence deleted.", ephemeral=True) @presence.on_autocomplete("presence_str") async def presence_autocomplete( self, interaction: nextcord.Interaction, presence_str: 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 (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_str: 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_str.lower() in pres.lower() } await interaction.response.send_autocomplete(autofilled_presences[:25])