diff --git a/bot_messages/highcouncil_election.txt b/bot_messages/highcouncil_election.txt index 50f5422..b6fdeb9 100644 --- a/bot_messages/highcouncil_election.txt +++ b/bot_messages/highcouncil_election.txt @@ -10,4 +10,4 @@ From {highcouncil_election_announce} to {highcouncil_election_start}, you will b Each member of the CCE can cast one for each category by using the emotes: <:Rank_Owner:479008325137072155> for Clan Leader and <:Rank_Deputy:479008295319896064> for Discord Server Manager. If needed, the icon 🤷 can be used to abstain to vote in any or both categories and it should be apply to all candidates of that category. -Votes can be cast until the {highcouncil_election_end}, so we can announce and have everyone set up to start the term by {term_start} \ No newline at end of file +Votes can be cast until the {highcouncil_election_end}, so we can announce and have everyone set up to start the term by {term_start}. \ No newline at end of file diff --git a/bot_messages/highcouncil_vote.txt b/bot_messages/highcouncil_vote.txt new file mode 100644 index 0000000..b561dac --- /dev/null +++ b/bot_messages/highcouncil_vote.txt @@ -0,0 +1 @@ +<@&{clan_council_elect_role_id}> it is now time to vote for the high council! You have until {term_start} to complete the vote. \ No newline at end of file diff --git a/classes/election_cycle.py b/classes/election_cycle.py index b45f44d..2f5a888 100644 --- a/classes/election_cycle.py +++ b/classes/election_cycle.py @@ -90,6 +90,22 @@ class ElectionCycle: term_start_date=self.term_start.strftime("%B %d"), ) + def build_highcouncil_vote_start(self) -> str: + """ + Builds the message to announce that highcouncil voting has started. + + Returns: + str: Message to send. + """ + + with open("bot_messages/highcouncil_vote.txt", mode="r", encoding="utf8") as file: + message = file.read() + + return message.format( + clan_council_elect_role_id=self.config.params.clan_council_elect_role_id, + term_start_date=self.term_start.strftime("%B %d"), + ) + def build_vote_start(self) -> str: """ Builds the voting start message out of template and configurations. @@ -123,7 +139,7 @@ class ElectionCycle: elif today.date() == self.voting_end.date(): await self.voting_end_action() elif today.date() == self.highcouncil_election_start.date(): - await self.highcouncil_election_action() + await self.highcouncil_election_start_action() elif today.date() == self.term_start.date(): await self.term_start_action() elif today.date() == self.term_end.date(): @@ -159,14 +175,9 @@ class ElectionCycle: """ message = self.build_vote_start() clan_member_role: nextcord.Role = self.guild.get_role(self.config.params.clan_member_role_id) - with Session(engine) as session: - stmt = select(ElectionInformation).where( - ElectionInformation.ElectionCycle == self.get_election_cycle_name() - ) - election_info = session.scalar(stmt) - election_channel = self.guild.get_channel(election_info.ElectionChannel) - await election_channel.send(message) - await election_channel.set_permissions(clan_member_role, send_messages=False) + election_channel = self.guild.get_channel(self.get_election_info().ElectionChannel) + await election_channel.send(message) + await election_channel.set_permissions(clan_member_role, send_messages=False) async def voting_end_action(self) -> None: """ @@ -174,20 +185,18 @@ class ElectionCycle: """ message = self.build_highcouncil_election_announce() council_elect_role: nextcord.Role = self.guild.get_role(self.config.params.clan_council_elect_role_id) - with Session(engine) as session: - stmt = select(ElectionInformation).where( - ElectionInformation.ElectionCycle == self.get_election_cycle_name() - ) - election_info = session.scalar(stmt) - election_channel = self.guild.get_channel(election_info.ElectionChannel) - await election_channel.send(message) - await election_channel.set_permissions(council_elect_role, send_messages=True) + election_channel = self.guild.get_channel(self.get_election_info().ElectionChannel) + await election_channel.send(message) + await election_channel.set_permissions(council_elect_role, send_messages=True) - async def highcouncil_election_action(self) -> None: + async def highcouncil_election_start_action(self) -> None: """ Performs required actions for when the highcouncil is elected. """ - print("Highcouncil election has started.") + + message = self.build_highcouncil_vote_start() + election_channel = self.guild.get_channel(self.get_election_info().ElectionChannel) + await election_channel.send(message) async def term_start_action(self) -> None: msg: str = "the term has started" @@ -206,3 +215,17 @@ class ElectionCycle: """ return f"{self.election_start.year} {self.elecion_cycle.name} election" + + def get_election_info(self) -> ElectionInformation: + """ + Gets information for current election. + + Returns: + ElectionInformation: The information from the database about the current election. + """ + + with Session(engine) as session: + stmt = select(ElectionInformation).where( + ElectionInformation.ElectionCycle == self.get_election_cycle_name() + ) + return session.scalar(stmt)