Compare commits

...
Author SHA1 Message Date
imcompiling dbd2863aab Pass VoteType str instead of manual one in VoteSelect.
build_develop / build (push) Successful in 1m24s
2024-05-19 11:29:04 -04:00
imcompiling 426f009ca7 Use VoteType in utils. Remove old functions of getting clan leader and discord manager election names. 2024-05-19 10:50:23 -04:00
imcompiling ed07b2e231 Use VoteType in view command. 2024-05-19 10:46:05 -04:00
imcompiling 0caa41cc90 use VoteType in voting views. 2024-05-19 10:40:41 -04:00
imcompiling e93f37dcf0 Use VoteType in voting highcouncil views. 2024-05-19 10:38:10 -04:00
imcompiling 44c3961c46 Use VoteType in election_cycle 2024-05-19 10:31:16 -04:00
imcompiling 0dcdd038b8 Make the VoteType StrEnum and edit column in database to enforce only 3 values.
build_develop / build (push) Successful in 1m21s
2024-05-18 23:08:01 -04:00
imcompiling eb5d465ac9 Merge branch 'main' into 49--view-votes-can't-see-HC-elections
build_develop / build (push) Failing after 16s
2024-05-18 22:41:11 -04:00
imcompiling eb1c87fbf4 install sqlite3 onto container. Using it a lot for debugging/fixes.
build_latest / build (push) Successful in 1m29s
build_release / build (push) Successful in 22s
2024-05-18 22:38:57 -04:00
imcompiling cbd73a104e Merge branch '61-Create-virtual-environment-and-update-python-version' 2024-05-18 22:34:35 -04:00
imcompiling 95ad47368c Remove requirements.txt
build_develop / build (push) Successful in 22s
2024-05-18 22:34:13 -04:00
imcompiling dea3f7cabf Update dockerfile to use poetry for dependencies.
build_develop / build (push) Successful in 1m35s
Decided to just use poetry to just export requirements instead of building package.
2024-05-18 22:29:18 -04:00
imcompiling 6a71e9ab1d Add poetry for dependency management.
Update python version.
Using virtual environment in vscode.
2024-05-18 21:56:11 -04:00
imcompiling bc56830396 Merge branch '49--view-votes-can't-see-HC-elections' of https://gitea.cheezers.org/imcompiling/dakiny-bot into 49--view-votes-can't-see-HC-elections
build_develop / build (push) Failing after 17s
2024-05-18 16:36:03 -04:00
imcompiling 1d14f8171d Add vote type to one statement. 2024-05-18 16:34:33 -04:00
imcompiling 2efd380a7e Add VoteType Enum. 2024-05-18 16:26:11 -04:00
imcompiling 475170025a Edit database to add a type field to Votes. 2024-05-18 16:25:19 -04:00
imcompiling f4f3bfe103 Edit database to add a type field to Votes.
build_develop / build (push) Failing after 18s
2024-05-18 15:39:13 -04:00
imcompiling 6827658b4a Change sqlalchemy req.
build_latest / build (push) Successful in 1m2s
build_develop / build (push) Successful in 25s
2024-05-17 23:41:57 -04:00
imcompiling 85a3ea0418 Merge branch '54-Only-edit-changed-channels'
build_latest / build (push) Successful in 17s
build_release / build (push) Successful in 16s
2024-05-16 22:44:08 -04:00
imcompiling 0b27c60bea Clarify some method names.
build_develop / build (push) Successful in 57s
current election cycle shoud return quarter cycle if it can't find a cycle.
2024-05-16 22:41:27 -04:00
12 changed files with 153 additions and 132 deletions
+1
View File
@@ -105,6 +105,7 @@ venv/
ENV/
env.bak/
venv.bak/
poetry.lock
# Spyder project settings
.spyderproject
+4 -7
View File
@@ -1,22 +1,19 @@
FROM python:3.10.6-slim
FROM python:3.11.9-slim
# install dependencies
RUN apt-get update && apt-get -y upgrade && apt-get -y install git
RUN pip install --upgrade pip
RUN apt-get update && apt-get -y upgrade && apt-get -y install git sqlite3
WORKDIR /home
COPY requirements.txt requirements.txt
COPY config.py config.py
COPY main.py main.py
COPY utils.py utils.py
COPY pyproject.toml pyproject.toml
COPY classes classes/
COPY cogs cogs/
COPY database_setup database_setup/
RUN pip install -r requirements.txt
RUN pip install --upgrade pip && pip install poetry && poetry export -f requirements.txt --output requirements.txt && pip install -r requirements.txt
CMD ["python3", "-u", "./main.py"]
+26 -21
View File
@@ -22,13 +22,12 @@ from database_setup.sql_data_classes import (
)
from utils import (
TEMPLATES_DIR,
VoteType,
build_highcouncil_votes_str,
build_votes_str,
edit_clan_council_info,
get_cl_election_name,
get_datetime,
get_dm_election_name,
get_election_cycle_name,
get_election_name,
)
@@ -199,7 +198,7 @@ class ElectionCycle:
parent: nextcord.TextChannel = self.guild.get_channel(
self.config.params.voting_parent_id
)
quarter_name: str = get_election_cycle_name(self.config)
quarter_name: str = get_election_name(self.config)
thread_msg: nextcord.Message = await parent.send(content=quarter_name)
@@ -247,8 +246,7 @@ class ElectionCycle:
with Session(engine) as session:
stmt = select(ElectionInformation).where(
ElectionInformation.ElectionCycle
== get_election_cycle_name(self.config)
ElectionInformation.ElectionCycle == get_election_name(self.config)
)
info = session.scalar(stmt)
info.CouncilVoteMsgId = vote_msg.id
@@ -277,7 +275,7 @@ class ElectionCycle:
message, view=NominateHighCouncilView(self.config, self.guild)
)
election_name = get_election_cycle_name(self.config)
election_name = get_election_name(self.config)
with Session(engine) as session:
# remove vote button from vote message
@@ -295,7 +293,11 @@ class ElectionCycle:
session.commit()
# add the highcouncil role to everyone with 3 or more votes. set elected to true in database
stmt = select(Votes.VotedForId).where(Votes.ElectionCycle == election_name)
stmt = (
select(Votes.VotedForId)
.where(Votes.ElectionCycle == election_name)
.where(Votes.Type == VoteType.COUNCIL)
)
vote_count = collections.Counter(session.scalars(stmt))
for user_id, votes in vote_count.items():
@@ -333,8 +335,7 @@ class ElectionCycle:
with Session(engine) as session:
stmt = select(ElectionInformation).where(
ElectionInformation.ElectionCycle
== get_election_cycle_name(self.config)
ElectionInformation.ElectionCycle == get_election_name(self.config)
)
info = session.scalar(stmt)
info.HighCouncilVoteMsgId = vote_msg.id
@@ -360,13 +361,13 @@ class ElectionCycle:
self.config.params.clan_council_role_id
)
election_cycle = get_election_name(self.config)
with Session(engine) as session:
# role management
stmt = (
select(CouncilMembers.MemberId)
.where(
CouncilMembers.ElectionCycle == get_election_cycle_name(self.config)
)
.where(CouncilMembers.ElectionCycle == election_cycle)
.where(CouncilMembers.Elected == true())
)
@@ -383,14 +384,19 @@ class ElectionCycle:
# announce high council members
# ties are undefined behavior.
dm_election = get_dm_election_name(self.config)
cl_election = get_cl_election_name(self.config)
stmt = select(Votes.VotedForId).where(Votes.ElectionCycle == dm_election)
stmt = (
select(Votes.VotedForId)
.where(Votes.ElectionCycle == election_cycle)
.where(Votes.Type == VoteType.DISCORDMANAGER)
)
dm_votes = collections.Counter(session.scalars(stmt))
stmt = select(Votes.VotedForId).where(Votes.ElectionCycle == cl_election)
stmt = (
select(Votes.VotedForId)
.where(Votes.ElectionCycle == election_cycle)
.where(Votes.Type == VoteType.CLANLEADER)
)
cl_votes = collections.Counter(session.scalars(stmt))
election_cycle = get_election_cycle_name(self.config)
try:
dm_winner = max(dm_votes, key=dm_votes.get)
stmt = (
@@ -422,7 +428,7 @@ class ElectionCycle:
# clear view from vote message
stmt = select(ElectionInformation.HighCouncilVoteMsgId).where(
ElectionInformation.ElectionCycle == get_election_cycle_name(self.config)
ElectionInformation.ElectionCycle == get_election_name(self.config)
)
vote_msg_id = session.scalar(stmt)
vote_msg: nextcord.Message = await election_thread.fetch_message(vote_msg_id)
@@ -451,8 +457,7 @@ class ElectionCycle:
with Session(engine) as session:
stmt = select(ElectionInformation).where(
ElectionInformation.ElectionCycle
== get_election_cycle_name(self.config)
ElectionInformation.ElectionCycle == get_election_name(self.config)
)
return session.scalar(stmt)
+5 -5
View File
@@ -13,7 +13,7 @@ from utils import (
NOMINEE_SPLITTER,
decorate_cl_nomination,
decorate_dm_nomination,
get_election_cycle_name,
get_election_name,
)
@@ -60,7 +60,7 @@ class NominateDMModal(nextcord.ui.Modal):
with Session(engine) as session:
# user already in table
cycle = get_election_cycle_name(self.config)
cycle = get_election_name(self.config)
stmt = (
select(CouncilMembers)
.where(CouncilMembers.ElectionCycle == cycle)
@@ -127,7 +127,7 @@ class NominateCLModal(nextcord.ui.Modal):
with Session(engine) as session:
# user already in table
cycle = get_election_cycle_name(self.config)
cycle = get_election_name(self.config)
stmt = (
select(CouncilMembers)
.where(CouncilMembers.ElectionCycle == cycle)
@@ -189,7 +189,7 @@ class NominateHighCouncilView(nextcord.ui.View):
)
return
cycle = get_election_cycle_name(self.config)
cycle = get_election_name(self.config)
usr_nominated = False
speech_content = ""
with Session(engine) as session:
@@ -242,7 +242,7 @@ class NominateHighCouncilView(nextcord.ui.View):
)
return
cycle = get_election_cycle_name(self.config)
cycle = get_election_name(self.config)
usr_nominated = False
speech_content = ""
with Session(engine) as session:
+4 -4
View File
@@ -9,7 +9,7 @@ from sqlalchemy.orm import Session
from config import DakinyConfig
from database_setup.sql_data_classes import CouncilMembers, engine
from utils import NOMINEE_SPLITTER, decorate_nomination, get_election_cycle_name
from utils import NOMINEE_SPLITTER, decorate_nomination, get_election_name
class NominateModal(nextcord.ui.Modal):
@@ -58,7 +58,7 @@ class NominateModal(nextcord.ui.Modal):
msg = await interaction.channel.send(speech)
council_member = CouncilMembers(
ElectionCycle=get_election_cycle_name(self.config),
ElectionCycle=get_election_name(self.config),
MemberId=interaction.user.id,
SpeechMsgId=msg.id,
)
@@ -66,7 +66,7 @@ class NominateModal(nextcord.ui.Modal):
session.commit()
else:
# user already nominated, just need to update the election speech
cycle = get_election_cycle_name(self.config)
cycle = get_election_name(self.config)
stmt = (
select(CouncilMembers)
.where(CouncilMembers.ElectionCycle == cycle)
@@ -120,7 +120,7 @@ class NominateView(nextcord.ui.View):
)
return
cycle = get_election_cycle_name(self.config)
cycle = get_election_name(self.config)
usr_nominated = False
speech_content = ""
with Session(engine) as session:
+30 -32
View File
@@ -17,12 +17,7 @@ from database_setup.sql_data_classes import (
Votes,
engine,
)
from utils import (
build_highcouncil_votes_str,
get_cl_election_name,
get_dm_election_name,
get_election_cycle_name,
)
from utils import VoteType, build_highcouncil_votes_str, get_election_name
class VoteSelect(nextcord.ui.StringSelect):
@@ -39,20 +34,10 @@ class VoteSelect(nextcord.ui.StringSelect):
self.election_type = election_type
async def callback(self, interaction: Interaction):
# decide on election type
match self.election_type:
case "cl":
election_name: str = get_cl_election_name(self.config)
case "dm":
election_name: str = get_dm_election_name(self.config)
case _:
# should never happen
raise ValueError('election type was not "cl" or "dm"')
cycle: str = get_election_cycle_name(self.config)
election_name: str = get_election_name(self.config)
with Session(engine) as session:
stmt = select(ElectionInformation.HighCouncilVoteMsgId).where(
ElectionInformation.ElectionCycle == cycle
ElectionInformation.ElectionCycle == election_name
)
vote_msg_id = session.scalar(stmt)
@@ -65,6 +50,7 @@ class VoteSelect(nextcord.ui.StringSelect):
ElectionCycle=election_name,
VoterId=interaction.user.id,
VotedForId=voted_for,
Type=self.election_type,
)
try:
@@ -72,11 +58,13 @@ class VoteSelect(nextcord.ui.StringSelect):
session.commit()
except exc.IntegrityError:
# user already has a vote in the election and election type
session.rollback()
stmt = (
update(Votes)
.where(Votes.ElectionCycle == election_name)
.where(Votes.VoterId == interaction.user.id)
.where(Votes.Type == self.election_type)
.values(VotedForId=voted_for)
)
session.execute(stmt)
@@ -135,28 +123,30 @@ class VoteHighcouncilView(nextcord.ui.View):
)
return
cycle: str = get_election_cycle_name(self.config)
election: str = get_cl_election_name(self.config)
election_name: str = get_election_name(self.config)
with Session(engine) as session:
stmt = (
select(Votes.VotedForId)
.where(Votes.ElectionCycle == election)
.where(Votes.ElectionCycle == election_name)
.where(Votes.VoterId == interaction.user.id)
.where(Votes.Type == VoteType.CLANLEADER)
)
voted_for = session.scalar(stmt)
stmt = (
select(CouncilMembers.MemberId)
.where(CouncilMembers.ElectionCycle == cycle)
.where(CouncilMembers.ElectionCycle == election_name)
.filter(CouncilMembers.ClanLeaderSpeechId.is_not(None))
)
options = [
SelectOption(
label=f"{self.guild.get_member(nominee).display_name} ☑️"
label=(
f"{self.guild.get_member(nominee).display_name} ☑️"
if voted_for == nominee
else f"{self.guild.get_member(nominee).display_name}",
else f"{self.guild.get_member(nominee).display_name}"
),
value=str(nominee),
)
for nominee in sorted(
@@ -173,7 +163,9 @@ class VoteHighcouncilView(nextcord.ui.View):
view = nextcord.ui.View()
view.add_item(
VoteSelect(options=options, config=self.config, election_type="cl")
VoteSelect(
options=options, config=self.config, election_type=VoteType.CLANLEADER
)
)
await interaction.response.send_message(
@@ -211,28 +203,30 @@ class VoteHighcouncilView(nextcord.ui.View):
)
return
cycle: str = get_election_cycle_name(self.config)
election: str = get_dm_election_name(self.config)
election_name: str = get_election_name(self.config)
with Session(engine) as session:
stmt = (
select(Votes.VotedForId)
.where(Votes.ElectionCycle == election)
.where(Votes.ElectionCycle == election_name)
.where(Votes.VoterId == interaction.user.id)
.where(Votes.Type == VoteType.DISCORDMANAGER)
)
voted_for = session.scalar(stmt)
stmt = (
select(CouncilMembers.MemberId)
.where(CouncilMembers.ElectionCycle == cycle)
.where(CouncilMembers.ElectionCycle == election_name)
.filter(CouncilMembers.DiscordManagerSpeechId.is_not(None))
)
options = [
SelectOption(
label=f"{self.guild.get_member(nominee).display_name} ☑️"
label=(
f"{self.guild.get_member(nominee).display_name} ☑️"
if voted_for == nominee
else f"{self.guild.get_member(nominee).display_name}",
else f"{self.guild.get_member(nominee).display_name}"
),
value=str(nominee),
)
for nominee in sorted(
@@ -249,7 +243,11 @@ class VoteHighcouncilView(nextcord.ui.View):
view = nextcord.ui.View()
view.add_item(
VoteSelect(options=options, config=self.config, election_type="dm")
VoteSelect(
options=options,
config=self.config,
election_type=VoteType.DISCORDMANAGER,
)
)
await interaction.response.send_message(
+10 -5
View File
@@ -17,7 +17,7 @@ from database_setup.sql_data_classes import (
Votes,
engine,
)
from utils import build_votes_str, get_election_cycle_name
from utils import VoteType, build_votes_str, get_election_name
class VoteSelect(nextcord.ui.StringSelect):
@@ -31,7 +31,7 @@ class VoteSelect(nextcord.ui.StringSelect):
self.config = config
async def callback(self, interaction: Interaction):
election_name = get_election_cycle_name(self.config)
election_name = get_election_name(self.config)
with Session(engine) as session:
stmt = select(ElectionInformation.CouncilVoteMsgId).where(
ElectionInformation.ElectionCycle == election_name
@@ -47,6 +47,7 @@ class VoteSelect(nextcord.ui.StringSelect):
ElectionCycle=election_name,
VoterId=interaction.user.id,
VotedForId=voted_for,
Type=VoteType.COUNCIL,
)
try:
@@ -59,6 +60,7 @@ class VoteSelect(nextcord.ui.StringSelect):
update(Votes)
.where(Votes.ElectionCycle == election_name)
.where(Votes.VoterId == interaction.user.id)
.where(Votes.Type == VoteType.COUNCIL)
.values(VotedForId=voted_for)
)
session.execute(stmt)
@@ -114,13 +116,14 @@ class VoteView(nextcord.ui.View):
)
return
election: str = get_election_cycle_name(self.config)
election: str = get_election_name(self.config)
with Session(engine) as session:
stmt = (
select(Votes.VotedForId)
.where(Votes.ElectionCycle == election)
.where(Votes.VoterId == interaction.user.id)
.where(Votes.Type == VoteType.COUNCIL)
)
voted_for = session.scalar(stmt)
@@ -130,9 +133,11 @@ class VoteView(nextcord.ui.View):
options = [
SelectOption(
label=f"{self.guild.get_member(nominee).display_name} ☑️"
label=(
f"{self.guild.get_member(nominee).display_name} ☑️"
if voted_for == nominee
else f"{self.guild.get_member(nominee).display_name}",
else f"{self.guild.get_member(nominee).display_name}"
),
value=str(nominee),
)
for nominee in sorted(
+11 -1
View File
@@ -14,6 +14,7 @@ from database_setup.sql_data_classes import (
Votes,
engine,
)
from utils import VoteType
class ViewCog(commands.Cog, name="View Commands"):
@@ -148,6 +149,11 @@ class ViewCog(commands.Cog, name="View Commands"):
election_name: str = nextcord.SlashOption(
required=True, description="The election you want to view votes for."
),
election_type: str = nextcord.SlashOption(
required=True,
description="The election type. Council, Discord Manager, or Clan Leader.",
choices=VoteType,
),
):
"""
Takes in an election name and sends a response message to the user with a list of people who voted in that
@@ -159,7 +165,11 @@ class ViewCog(commands.Cog, name="View Commands"):
election_name (str): Is SlashOption. The name of the election to view votes for.
"""
stmt = select(Votes).where(Votes.ElectionCycle == election_name)
stmt = (
select(Votes)
.where(Votes.ElectionCycle == election_name)
.where(Votes.Type == election_type)
)
with Session(engine) as session:
# Check if election exists.
+2 -1
View File
@@ -25,8 +25,9 @@ CREATE TABLE Votes(
ElectionCycle varchar(30) not null,
VoterId bigint unsigned not null,
VotedForId bigint unsigned,
Type varchar(14) not null DEFAULT 'council' check("Type" in ('council', 'discordmanager', 'clanleader')),
FOREIGN KEY (ElectionCycle) REFERENCES ElectionInformation(ElectionCycle),
PRIMARY KEY (ElectionCycle, VoterId)
PRIMARY KEY (ElectionCycle, VoterId, Type)
);
CREATE TABLE UserBirthday (
+22
View File
@@ -0,0 +1,22 @@
[tool.poetry]
name = "dakiny-bot"
version = "0.1.0"
description = "Dakiny's Discord Bot."
authors = ["imcompiling <[email protected]>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.11"
gitpython = "3.1.43"
fastapi = "0.111.0"
hydra-core = "1.3.2"
nextcord = "2.4.2"
pandas = "1.5.2"
python-dotenv = "1.0.0"
pytz = "2022.7.1"
sqlalchemy = "1.4.46"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
-8
View File
@@ -1,8 +0,0 @@
nextcord==2.4.2
python-dotenv==1.0.0
pytz==2022.7.1
hydra-core==1.3.2
sqlalchemy<2.0
pandas==1.5.2
fastapi==0.111.0
GitPython==3.1.43
+34 -44
View File
@@ -4,6 +4,7 @@ File contains util functions.
import os
from datetime import datetime
from enum import StrEnum
from typing import Iterable
import nextcord
@@ -24,6 +25,8 @@ REPO_DIR = "./dakiny-messages"
MESSAGES_DIR = f"{REPO_DIR}/messages"
TEMPLATES_DIR = f"{REPO_DIR}/message_templates"
VoteType = StrEnum("VoteType", ["COUNCIL", "DISCORDMANAGER", "CLANLEADER"])
def get_datetime(day: str) -> datetime:
"""
@@ -49,7 +52,7 @@ def get_datetime(day: str) -> datetime:
return datetime(year, month, day)
def get_election_cycle_name(config: DakinyConfig) -> str:
def get_election_name(config: DakinyConfig) -> str:
"""
Builds the unique name of the current election cycle
@@ -65,7 +68,7 @@ def get_election_cycle_name(config: DakinyConfig) -> str:
return f"vote-{get_datetime(current_cycle.term_start).year}-{current_cycle.name}"
def get_cycle_name(config: DakinyConfig) -> str:
def get_quarter_name(config: DakinyConfig) -> str:
"""
Builds the name of the current cycle/quarter
@@ -76,40 +79,12 @@ def get_cycle_name(config: DakinyConfig) -> str:
str: the name of the cycle.
"""
cycle = get_current_cycle(config)
cycle = get_quarter_cycle(config)
current_cycle = config.election_cycles[cycle]
return f"{get_datetime(current_cycle.term_start).year}-{current_cycle.name}"
def get_dm_election_name(config: DakinyConfig) -> str:
"""
creates the name of the discord manager election
Args:
config (DakinyConfig): Config sent to get_election_cycle_name
Returns:
str: the name of the election
"""
return f"{get_election_cycle_name(config)}-dm"
def get_cl_election_name(config: DakinyConfig) -> str:
"""
creates the name of the clan leader election
Args:
config (DakinyConfig): Config sent to get_election_cycle_name
Returns:
str: the name of the election
"""
return f"{get_election_cycle_name(config)}-cl"
def get_current_election_cycle(config: DakinyConfig) -> int:
"""
Returns index for active election. An election is considered active between the election start and the term start.
@@ -130,10 +105,11 @@ def get_current_election_cycle(config: DakinyConfig) -> int:
):
return cycle
return None
# It isn't a current election, get the quarter
return get_quarter_cycle(config)
def get_current_cycle(config: DakinyConfig) -> int:
def get_quarter_cycle(config: DakinyConfig) -> int:
"""
Returns the index for the current cycle/quarter. Defined as between term start and end. Shouldn't return none
@@ -169,9 +145,11 @@ def build_votes_str(config: DakinyConfig, guild: nextcord.Guild) -> str:
votes: dict[int, int] = {}
election_name = get_election_name(config)
with Session(engine) as session:
stmt = select(CouncilMembers).where(
CouncilMembers.ElectionCycle == get_election_cycle_name(config)
CouncilMembers.ElectionCycle == election_name
)
for nominee in sorted(
@@ -180,8 +158,10 @@ def build_votes_str(config: DakinyConfig, guild: nextcord.Guild) -> str:
):
votes[nominee.MemberId] = 0
stmt = select(Votes).where(
Votes.ElectionCycle == get_election_cycle_name(config)
stmt = (
select(Votes)
.where(Votes.ElectionCycle == election_name)
.where(Votes.Type == VoteType.COUNCIL)
)
for vote in session.scalars(stmt):
@@ -209,10 +189,12 @@ def build_highcouncil_votes_str(config: DakinyConfig, guild: nextcord.Guild) ->
cl_votes: dict[int, int] = {}
dm_votes: dict[int, int] = {}
election_name = get_election_name(config)
with Session(engine) as session:
stmt = (
select(CouncilMembers)
.where(CouncilMembers.ElectionCycle == get_election_cycle_name(config))
.where(CouncilMembers.ElectionCycle == election_name)
.filter(CouncilMembers.ClanLeaderSpeechId.is_not(None))
)
@@ -222,7 +204,11 @@ def build_highcouncil_votes_str(config: DakinyConfig, guild: nextcord.Guild) ->
):
cl_votes[nominee.MemberId] = 0
stmt = select(Votes).where(Votes.ElectionCycle == get_cl_election_name(config))
stmt = (
select(Votes)
.where(Votes.ElectionCycle == election_name)
.where(Votes.Type == VoteType.CLANLEADER)
)
for vote in session.scalars(stmt):
if vote.VotedForId is not None:
@@ -230,7 +216,7 @@ def build_highcouncil_votes_str(config: DakinyConfig, guild: nextcord.Guild) ->
stmt = (
select(CouncilMembers)
.where(CouncilMembers.ElectionCycle == get_election_cycle_name(config))
.where(CouncilMembers.ElectionCycle == election_name)
.filter(CouncilMembers.DiscordManagerSpeechId.is_not(None))
)
@@ -240,7 +226,11 @@ def build_highcouncil_votes_str(config: DakinyConfig, guild: nextcord.Guild) ->
):
dm_votes[nominee.MemberId] = 0
stmt = select(Votes).where(Votes.ElectionCycle == get_dm_election_name(config))
stmt = (
select(Votes)
.where(Votes.ElectionCycle == election_name)
.where(Votes.Type == VoteType.DISCORDMANAGER)
)
for vote in session.scalars(stmt):
if vote.VotedForId is not None:
@@ -338,7 +328,7 @@ def record_event_participation(config: DakinyConfig, users: list[str], is_member
is_member (bool): whether the users are a discord member or not
"""
cycle = get_cycle_name(config)
cycle = get_quarter_name(config)
participation_point_value = config.params.event_participate_points
with Session(engine) as session:
for user in users:
@@ -372,7 +362,7 @@ def record_event_host(config: DakinyConfig, user: int):
config (DakinyConfig): Dakiny config for getting points
user (int): Id of user that hosted.
"""
cycle = get_cycle_name(config)
cycle = get_quarter_name(config)
host_point_value = config.params.event_host_points
with Session(engine) as session:
stmt = (
@@ -545,7 +535,7 @@ async def edit_clan_council_info(guild: nextcord.Guild, config: DakinyConfig):
config.params.clan_info_channel_id
)
election = get_election_cycle_name(config)
election = get_election_name(config)
with Session(engine) as session:
stmt = (
select(CouncilMembers.MemberId)
@@ -571,7 +561,7 @@ async def edit_clan_council_info(guild: nextcord.Guild, config: DakinyConfig):
if id not in (discord_manager, clan_leader)
]
quarter = get_cycle_name(config)
quarter = get_quarter_name(config)
with open(
f"{TEMPLATES_DIR}/council_members.txt", mode="r", encoding="utf8"