Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b0e3162123 | ||
|
|
8c1eb8d11f | ||
|
|
40d220e2bb |
+41
-14
@@ -7,11 +7,16 @@ from typing import List
|
||||
import nextcord
|
||||
from nextcord import SelectOption
|
||||
from nextcord.interactions import Interaction
|
||||
from sqlalchemy import exc, select
|
||||
from sqlalchemy import exc, select, update
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from config import DakinyConfig
|
||||
from database_setup.sql_data_classes import CouncilMembers, ElectionInformation, Votes, engine
|
||||
from database_setup.sql_data_classes import (
|
||||
CouncilMembers,
|
||||
ElectionInformation,
|
||||
Votes,
|
||||
engine,
|
||||
)
|
||||
from utils import build_votes_str, get_election_cycle_name
|
||||
|
||||
|
||||
@@ -38,7 +43,11 @@ class VoteSelect(nextcord.ui.StringSelect):
|
||||
else:
|
||||
voted_for = int(self.values[0])
|
||||
|
||||
new_vote = Votes(ElectionCycle=election_name, VoterId=interaction.user.id, VotedForId=voted_for)
|
||||
new_vote = Votes(
|
||||
ElectionCycle=election_name,
|
||||
VoterId=interaction.user.id,
|
||||
VotedForId=voted_for,
|
||||
)
|
||||
|
||||
try:
|
||||
session.add(new_vote)
|
||||
@@ -47,16 +56,18 @@ class VoteSelect(nextcord.ui.StringSelect):
|
||||
except exc.IntegrityError:
|
||||
session.rollback()
|
||||
stmt = (
|
||||
select(Votes)
|
||||
update(Votes)
|
||||
.where(Votes.ElectionCycle == election_name)
|
||||
.where(Votes.VoterId == interaction.user.id)
|
||||
.values(VotedForId=voted_for)
|
||||
)
|
||||
vote = session.scalar(stmt)
|
||||
vote.VotedForId = voted_for
|
||||
session.execute(stmt)
|
||||
session.commit()
|
||||
|
||||
vote_message_str = build_votes_str(self.config)
|
||||
vote_msg: nextcord.Message = await interaction.channel.fetch_message(vote_msg_id)
|
||||
vote_msg: nextcord.Message = await interaction.channel.fetch_message(
|
||||
vote_msg_id
|
||||
)
|
||||
await vote_msg.edit(content=vote_message_str)
|
||||
|
||||
if voted_for is not None:
|
||||
@@ -77,10 +88,15 @@ class VoteView(nextcord.ui.View):
|
||||
self.config = config
|
||||
self.guild = guild
|
||||
|
||||
@nextcord.ui.button(label="Vote", style=nextcord.ButtonStyle.primary, custom_id="vote")
|
||||
async def vote(self, button: nextcord.ui.Button, interaction: nextcord.Interaction) -> None:
|
||||
@nextcord.ui.button(
|
||||
label="Vote", style=nextcord.ButtonStyle.primary, custom_id="vote"
|
||||
)
|
||||
async def vote(
|
||||
self, button: nextcord.ui.Button, interaction: nextcord.Interaction
|
||||
) -> None:
|
||||
"""
|
||||
TODO
|
||||
Enforces only members vote. Gets election cycle, creates voting options (checking if user has voted already),
|
||||
then sends the voting view.
|
||||
|
||||
Args:
|
||||
button (nextcord.ui.Button): Unused. idk why its needed in the decorator
|
||||
@@ -88,9 +104,13 @@ class VoteView(nextcord.ui.View):
|
||||
"""
|
||||
|
||||
# enforce members only
|
||||
if self.guild.get_role(self.config.params.clan_member_role_id) not in interaction.user.roles:
|
||||
if (
|
||||
self.guild.get_role(self.config.params.clan_member_role_id)
|
||||
not in interaction.user.roles
|
||||
):
|
||||
await interaction.response.send_message(
|
||||
f"You must have the <@&{self.config.params.clan_member_role_id}> role to vote.", ephemeral=True
|
||||
f"You must have the <@&{self.config.params.clan_member_role_id}> role to vote.",
|
||||
ephemeral=True,
|
||||
)
|
||||
return
|
||||
|
||||
@@ -104,7 +124,9 @@ class VoteView(nextcord.ui.View):
|
||||
)
|
||||
voted_for = session.scalar(stmt)
|
||||
|
||||
stmt = select(CouncilMembers.MemberId).where(CouncilMembers.ElectionCycle == election)
|
||||
stmt = select(CouncilMembers.MemberId).where(
|
||||
CouncilMembers.ElectionCycle == election
|
||||
)
|
||||
|
||||
options = [
|
||||
SelectOption(
|
||||
@@ -115,7 +137,12 @@ class VoteView(nextcord.ui.View):
|
||||
)
|
||||
for nominee in session.scalars(stmt)
|
||||
]
|
||||
options.append(SelectOption(label="Abstain ☑️" if voted_for is None else "Abstain", value="Abstain"))
|
||||
options.append(
|
||||
SelectOption(
|
||||
label="Abstain ☑️" if voted_for is None else "Abstain",
|
||||
value="Abstain",
|
||||
)
|
||||
)
|
||||
|
||||
view = nextcord.ui.View()
|
||||
view.add_item(VoteSelect(options=options, config=self.config))
|
||||
|
||||
Reference in New Issue
Block a user