103 lines
3.6 KiB
Python
103 lines
3.6 KiB
Python
"""
|
|
Contains the election cycle class
|
|
"""
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
import nextcord
|
|
from nextcord.ext import commands
|
|
|
|
|
|
class ElectionCycle:
|
|
"""
|
|
This class represents all the dates required for an election cycle along with all the functions needed to operate
|
|
the cycle.
|
|
"""
|
|
|
|
def __init__(self, election_start: datetime, term_start: datetime, term_end: datetime, bot) -> None:
|
|
"""
|
|
Generates all dates relevant to the election cycle from input election start, term start and end dates.
|
|
|
|
Args:
|
|
election_start (datetime): Date the election cycle starts.
|
|
term_start (datetime): Date the term being elected starts.
|
|
term_end (datetime): Date the term being elected ends.
|
|
bot: the discord bot instance
|
|
"""
|
|
self._election_start: datetime = election_start
|
|
self._term_start: datetime = term_start
|
|
self._term_end: datetime = term_end # might not be needed
|
|
self._voting_start: datetime = self._election_start + timedelta(days=1)
|
|
self._voting_end: datetime = self._voting_start + timedelta(days=1)
|
|
self._highcouncil_election: datetime = self._voting_end + timedelta(days=1)
|
|
self._bot: commands.Bot = bot
|
|
|
|
async def check_date(self) -> None:
|
|
"""
|
|
Function checks current date to see if something needs to be run.
|
|
"""
|
|
today = datetime.today()
|
|
print("checking the date")
|
|
|
|
# check all dates if action is needed
|
|
if today.date() == self._election_start.date():
|
|
await self.election_start_action()
|
|
elif today.date() == self._voting_start.date():
|
|
await self.voting_end_action()
|
|
elif today.date() == self._voting_end.date():
|
|
await self.voting_end_action()
|
|
elif today.date() == self._highcouncil_election.date():
|
|
await self.highcouncil_election_action()
|
|
elif today.date() == self._term_start.date():
|
|
await self.term_start_action()
|
|
elif today.date() == self._term_end.date():
|
|
await self.term_end_action()
|
|
else:
|
|
print("today was not a special date")
|
|
print(today)
|
|
|
|
async def election_start_action(self) -> None:
|
|
"""
|
|
Performs required actions for when the election cycle starts.
|
|
"""
|
|
print("election cycle has started")
|
|
await self.message_me("election cycle has started")
|
|
|
|
async def voting_start_action(self) -> None:
|
|
"""
|
|
Performs required actions for when voting for candidates starts.
|
|
"""
|
|
print("Voting has started")
|
|
await self.message_me("Voting has started")
|
|
|
|
async def voting_end_action(self) -> None:
|
|
"""
|
|
Performs required actions for when voting time has ended.
|
|
"""
|
|
print("voting has ended")
|
|
await self.message_me("voting has ended")
|
|
|
|
async def highcouncil_election_action(self) -> None:
|
|
"""
|
|
Performs required actions for when the highcouncil is elected.
|
|
"""
|
|
print("Highcouncil election has started.")
|
|
await self.message_me("Highcouncil election has started.")
|
|
|
|
async def term_start_action(self) -> None:
|
|
msg: str = "the term has started"
|
|
print(msg)
|
|
self.message_me(msg)
|
|
|
|
async def term_end_action(self):
|
|
msg: str = "the term has ended"
|
|
print(msg)
|
|
self.message_me(msg)
|
|
|
|
async def message_me(self, msg: str):
|
|
"""
|
|
message a string to me
|
|
"""
|
|
imcompiling: nextcord.User = await self._bot.fetch_user(206602713511886849)
|
|
await imcompiling.send(msg)
|