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 cogs.commands.remove import RemoveCog
from cogs.commands.request import RequestCog
from cogs.commands.set import setCog
from cogs.commands.test import TestCog
@@ -18,8 +17,7 @@ def setup(bot: commands.Bot):
Adds all command classes to bot.
"""
bot.add_cog(RemoveCog())
bot.add_cog(RequestCog(bot))
bot.add_cog(TestCog(bot))
bot.add_cog(ViewCog())
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.
"""
@nextcord.slash_command()
@nextcord.slash_command(guild_ids=[1000247361639030804]) # TODO remove guild ids
async def view(self, interaction: nextcord.Interaction):
"""
Parent slash command for set. Never called.
@@ -54,16 +54,16 @@ class ViewCog(commands.Cog, name="View Commands"):
stmt = select(Presences.Presence)
presences = session.scalars(stmt)
message = ""
# have 2 loops so that the "if search" check isn't done repeatedly
if search:
for presence in presences:
if search.lower() in presence.lower():
message += f"{presence}\n"
message = "\n".join(
[
presence
for presence in presences
if search.lower() in presence.lower()
]
)
else:
for presence in presences:
message += f"{presence}\n"
message = "\n".join(list(presences))
await interaction.followup.send(content=message, ephemeral=True)
@@ -126,7 +126,7 @@ class ViewCog(commands.Cog, name="View Commands"):
# if empty compare string
if not election_name:
await interaction.response.send_autocomplete(list(elections)[:25])
await interaction.response.send_autocomplete(elections)
return
autofilled_elections: "list[str]" = [