Compare commits

..
Author SHA1 Message Date
imcompiling 7ba7d3563c Rework logic to use less loops.
build_develop / build (push) Successful in 1m28s
2023-12-22 21:33:34 -05:00
3 changed files with 11 additions and 99 deletions
+1 -3
View File
@@ -4,7 +4,6 @@ Cog loader. Adds all command cogs to the bot.
from nextcord.ext import commands from nextcord.ext import commands
from cogs.commands.remove import RemoveCog
from cogs.commands.request import RequestCog from cogs.commands.request import RequestCog
from cogs.commands.set import setCog from cogs.commands.set import setCog
from cogs.commands.test import TestCog from cogs.commands.test import TestCog
@@ -18,8 +17,7 @@ def setup(bot: commands.Bot):
Adds all command classes to bot. Adds all command classes to bot.
""" """
bot.add_cog(RemoveCog())
bot.add_cog(RequestCog(bot)) bot.add_cog(RequestCog(bot))
bot.add_cog(TestCog(bot)) bot.add_cog(TestCog(bot))
bot.add_cog(ViewCog())
bot.add_cog(setCog()) bot.add_cog(setCog())
bot.add_cog(ViewCog())
-86
View File
@@ -1,86 +0,0 @@
"""
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])
+10 -10
View File
@@ -25,7 +25,7 @@ class ViewCog(commands.Cog, name="View Commands"):
Default constructor for ViewCog class. Does nothing. Default constructor for ViewCog class. Does nothing.
""" """
@nextcord.slash_command() @nextcord.slash_command(guild_ids=[1000247361639030804]) # TODO remove guild ids
async def view(self, interaction: nextcord.Interaction): async def view(self, interaction: nextcord.Interaction):
""" """
Parent slash command for set. Never called. Parent slash command for set. Never called.
@@ -54,16 +54,16 @@ class ViewCog(commands.Cog, name="View Commands"):
stmt = select(Presences.Presence) stmt = select(Presences.Presence)
presences = session.scalars(stmt) presences = session.scalars(stmt)
message = ""
# have 2 loops so that the "if search" check isn't done repeatedly
if search: if search:
for presence in presences: message = "\n".join(
if search.lower() in presence.lower(): [
message += f"{presence}\n" presence
for presence in presences
if search.lower() in presence.lower()
]
)
else: else:
for presence in presences: message = "\n".join(list(presences))
message += f"{presence}\n"
await interaction.followup.send(content=message, ephemeral=True) await interaction.followup.send(content=message, ephemeral=True)
@@ -126,7 +126,7 @@ class ViewCog(commands.Cog, name="View Commands"):
# if empty compare string # if empty compare string
if not election_name: if not election_name:
await interaction.response.send_autocomplete(list(elections)[:25]) await interaction.response.send_autocomplete(elections)
return return
autofilled_elections: "list[str]" = [ autofilled_elections: "list[str]" = [