"""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) -> None: """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), ) -> None: """ Deletes the given presence id from the database. Args: interaction (nextcord.Interaction): Interaction that invoked the command. presence_str (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) -> None: """ 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])