Compare commits
14
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4c1f41c4c8 | ||
|
|
fa691ced5d | ||
|
|
81f4c7741b | ||
|
|
2cde9f7109 | ||
|
|
2632bb883f | ||
|
|
2f75f0cdcb | ||
|
|
deb405f02b | ||
|
|
ee7cbaf2f6 | ||
|
|
7ba7d3563c | ||
|
|
39746123f1 | ||
|
|
c69adb8374 | ||
|
|
f722a6a87b | ||
|
|
b3550bbf55 | ||
|
|
0a18d819af |
@@ -4,6 +4,7 @@ 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
|
||||||
@@ -17,7 +18,8 @@ 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(setCog())
|
|
||||||
bot.add_cog(ViewCog())
|
bot.add_cog(ViewCog())
|
||||||
|
bot.add_cog(setCog())
|
||||||
|
|||||||
@@ -0,0 +1,86 @@
|
|||||||
|
"""
|
||||||
|
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])
|
||||||
@@ -49,7 +49,7 @@ class RequestCog(commands.Cog, name="Request Commands"):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
config: DakinyConfig = self.bot.config
|
config: DakinyConfig = self.bot.config
|
||||||
content = f'<@{interaction.user.id}> would like to add presence" {presence}."'
|
content = f'<@{interaction.user.id}> would like to add presence "{presence}."'
|
||||||
view = PresenceChange(presence)
|
view = PresenceChange(presence)
|
||||||
await self.bot.get_channel(config.params.admin_channel_id).send(
|
await self.bot.get_channel(config.params.admin_channel_id).send(
|
||||||
content=content, view=view
|
content=content, view=view
|
||||||
|
|||||||
+43
-2
@@ -7,7 +7,12 @@ from nextcord.ext import commands
|
|||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
from database_setup.sql_data_classes import ElectionInformation, Votes, engine
|
from database_setup.sql_data_classes import (
|
||||||
|
ElectionInformation,
|
||||||
|
Presences,
|
||||||
|
Votes,
|
||||||
|
engine,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ViewCog(commands.Cog, name="View Commands"):
|
class ViewCog(commands.Cog, name="View Commands"):
|
||||||
@@ -26,6 +31,42 @@ class ViewCog(commands.Cog, name="View Commands"):
|
|||||||
Parent slash command for set. Never called.
|
Parent slash command for set. Never called.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@view.subcommand(description="Show all possible presence choices.")
|
||||||
|
async def presences(
|
||||||
|
self,
|
||||||
|
interaction: nextcord.Interaction,
|
||||||
|
search: str = nextcord.SlashOption(
|
||||||
|
description="A word or string to search for in the presences.",
|
||||||
|
required=False,
|
||||||
|
),
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
Gathers all presences from the database and responds with a message showing them.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
interaction (nextcord.Integration): User's interaction with the command.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# might take a while depending on number of presences
|
||||||
|
await interaction.response.defer(ephemeral=True)
|
||||||
|
|
||||||
|
with Session(engine) as session:
|
||||||
|
stmt = select(Presences.Presence)
|
||||||
|
presences = session.scalars(stmt)
|
||||||
|
|
||||||
|
if search:
|
||||||
|
message = "\n".join(
|
||||||
|
[
|
||||||
|
presence
|
||||||
|
for presence in presences
|
||||||
|
if search.lower() in presence.lower()
|
||||||
|
]
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
message = "\n".join(list(presences))
|
||||||
|
|
||||||
|
await interaction.followup.send(content=message, ephemeral=True)
|
||||||
|
|
||||||
@view.subcommand(
|
@view.subcommand(
|
||||||
description="Shows all voters and who they voted for in a given election."
|
description="Shows all voters and who they voted for in a given election."
|
||||||
)
|
)
|
||||||
@@ -85,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(elections)
|
await interaction.response.send_autocomplete(list(elections)[:25])
|
||||||
return
|
return
|
||||||
|
|
||||||
autofilled_elections: "list[str]" = [
|
autofilled_elections: "list[str]" = [
|
||||||
|
|||||||
@@ -47,9 +47,7 @@ def get_election_cycle_name(config: DakinyConfig) -> str:
|
|||||||
cycle = get_current_cycle(config)
|
cycle = get_current_cycle(config)
|
||||||
current_cycle = config.election_cycles[cycle]
|
current_cycle = config.election_cycles[cycle]
|
||||||
|
|
||||||
return (
|
return f"vote-{get_datetime(current_cycle.term_start).year}-{current_cycle.name}"
|
||||||
f"vote-{get_datetime(current_cycle.election_start).year}-{current_cycle.name}"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def get_dm_election_name(config: DakinyConfig) -> str:
|
def get_dm_election_name(config: DakinyConfig) -> str:
|
||||||
|
|||||||
Reference in New Issue
Block a user