Compare commits

...
9 Commits
Author SHA1 Message Date
imcompiling 85eb52d2e1 add word to message string.
build_develop / build (push) Successful in 1m31s
2023-09-14 11:33:27 -04:00
imcompiling 7d1b2f7cac Create cakedays function. 2023-09-14 11:24:25 -04:00
imcompiling c5c79015a9 Correct spelling. 2023-09-14 11:22:53 -04:00
imcompiling 7b335efbe6 Merge branch '22-daily-loop-not-starting-election'
build_latest / build (push) Successful in 44s
build_release / build (push) Successful in 43s
build_develop / build (push) Successful in 45s
2023-09-13 10:52:08 -04:00
imcompiling e686cf88e5 Be inclusive when checkign for an election cycle.
build_develop / build (push) Has been cancelled
2023-09-13 10:51:16 -04:00
imcompiling 117dea48c4 Standardize variable name of dates. 2023-09-13 10:42:01 -04:00
imcompiling 62e4417ce8 Use correct action on voting start. 2023-09-13 10:32:59 -04:00
imcompiling 672df41f19 Make the configs and timeline more clear. 2023-09-13 10:16:50 -04:00
imcompiling 328f3fea78 Merge branch 'main' into 22-daily-loop-not-starting-election 2023-09-13 09:31:53 -04:00
5 changed files with 52 additions and 26 deletions
+8 -8
View File
@@ -34,16 +34,16 @@ The Clan Council will be denoted by the Discord ranks of <@&{clan_council_id}> a
<:Rank_Owner:479008325137072155> Clan Leader
---message_break---
__Here's the timeline:__
Election begins: {election_start_date}
Term: {term_start_date} - {term_end_date}
Election begins: {election_start}
Term: {term_start} - {term_end}
**{election_start_date}**: Post here to announce candidacy
**{voting_start_date}**: Voting begins
**{voting_end_date}**: Votes are tallied and winners are announced
**{highcouncil_election_date}**: The new Clan Council votes who among them shall receive the two High Council positions of: Clan Leader and Discord Server Manager.
**{term_start_date}**: The new Clan Council is officially inaugurated and a drop party (or a giveaway event) begins to commemorate the new leadership.
**{election_start}**: Post here to announce candidacy
**{voting_start}**: Voting begins
**{voting_end}**: Votes are tallied and winners are announced
**{highcouncil_election}**: The new Clan Council votes who among them shall receive the two High Council positions of: Clan Leader and Discord Server Manager.
**{term_start}**: The new Clan Council is officially inaugurated and a drop party (or a giveaway event) begins to commemorate the new leadership.
This process will begin again next quarter on {next_election_start_date} with the inauguration scheduled for {term_end_date}.
This process will begin again next quarter on {next_election_start} with the inauguration scheduled for {term_end}.
---message_break---
**You may now announce your candidacy for a seat on the Dakiny Clan Council!
**
+1 -1
View File
@@ -2,7 +2,7 @@
<@&{clan_member_id}>, it's time to vote for clan council.
React with <{voting_emote_id}> to vote.
Voting ends next {voting_end_day}, {voting_end_date}.
Voting ends next {voting_end_day}, {voting_end}.
Results will then be announced.
After a candidate receives 3 votes, their spot is secured in the new council, but you can still vote for them to show your support.
+16 -15
View File
@@ -2,7 +2,7 @@
Contains the election cycle class
"""
from datetime import datetime, timedelta
from datetime import datetime
import nextcord
from sqlalchemy import select
@@ -20,6 +20,7 @@ class ElectionCycle:
"""
def __init__(self, cycle: int, config: DakinyConfig, guild: nextcord.Guild) -> None:
# TODO update
"""
Generates all dates relevant to the election cycle from input election start, term start and end dates.
@@ -37,9 +38,9 @@ class ElectionCycle:
self.term_end: datetime = get_datetime(self.elecion_cycle.term_end)
self.voting_start: datetime = get_datetime(self.elecion_cycle.voting_start)
self.voting_end: datetime = get_datetime(self.elecion_cycle.voting_end)
self.highcouncil_election_announce: datetime = self.voting_end + timedelta(days=1)
self.highcouncil_election_start: datetime = self.highcouncil_election_announce + timedelta(days=3)
self.highcouncil_election_end: datetime = self.term_start - timedelta(days=1)
self.highcouncil_election_announce: datetime = get_datetime(self.elecion_cycle.highcouncil_election_announce)
self.highcouncil_election_start: datetime = get_datetime(self.elecion_cycle.highcouncil_election_start)
self.highcouncil_election_end: datetime = get_datetime(self.elecion_cycle.highcouncil_election_end)
self.guild: nextcord.Guild = guild
self.election_over: bool = False
@@ -60,13 +61,13 @@ class ElectionCycle:
message = message.format(
clan_council_id=self.config.params.clan_council_role_id,
high_council_id=self.config.params.high_council_role_id,
election_start_date=self.election_start.strftime("%B %d"),
term_start_date=self.term_start.strftime("%B %d"),
term_end_date=self.term_end.strftime("%B %d"),
voting_start_date=self.voting_start.strftime("%B %d"),
voting_end_date=self.voting_end.strftime("%B %d"),
highcouncil_election_date=self.highcouncil_election_start.strftime("%B %d"),
next_election_start_date=next_election.strftime("%B %d"),
election_start=self.election_start.strftime("%B %d"),
term_start=self.term_start.strftime("%B %d"),
term_end=self.term_end.strftime("%B %d"),
voting_start=self.voting_start.strftime("%B %d"),
voting_end=self.voting_end.strftime("%B %d"),
highcouncil_election=self.highcouncil_election_start.strftime("%B %d"),
next_election_start=next_election.strftime("%B %d"),
)
return message.split("---message_break---")
@@ -87,7 +88,7 @@ class ElectionCycle:
highcouncil_election_announce=self.highcouncil_election_announce.strftime("%B %d"),
highcouncil_election_start=self.highcouncil_election_start.strftime("%B %d"),
highcouncil_election_end=self.highcouncil_election_end.strftime("%B %d"),
term_start_date=self.term_start.strftime("%B %d"),
term_start=self.term_start.strftime("%B %d"),
)
def build_highcouncil_vote_start(self) -> str:
@@ -103,7 +104,7 @@ class ElectionCycle:
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"),
term_start=self.term_start.strftime("%B %d"),
)
def build_vote_start(self) -> str:
@@ -121,7 +122,7 @@ class ElectionCycle:
return message.format(
clan_member_id=self.config.params.clan_member_role_id,
voting_emote_id=self.config.params.voting_emote_id,
voting_end_date=vote_end.strftime("%B %d"),
voting_end=vote_end.strftime("%B %d"),
voting_end_day=vote_end.strftime("%A"),
)
@@ -135,7 +136,7 @@ class ElectionCycle:
if today.date() == self.election_start.date():
await self.election_start_action()
elif today.date() == self.voting_start.date():
await self.voting_end_action()
await self.voting_start_action()
elif today.date() == self.voting_end.date():
await self.voting_end_action()
elif today.date() == self.highcouncil_election_start.date():
+23 -1
View File
@@ -54,6 +54,8 @@ class DailyLoop(commands.Cog, name="Daily Loop"):
kandy: nextcord.User = await self.bot.fetch_user(239547993106284544)
await kandy.send('Happy "Birthday"!')
await self.cakedays()
@daily_loop.before_loop
async def before_loop(self):
"""
@@ -81,7 +83,7 @@ class DailyLoop(commands.Cog, name="Daily Loop"):
for cycle, election in enumerate(config.election_cycles):
if (
today.date() >= get_datetime(election.election_start).date()
and today.date() < get_datetime(election.term_start).date()
and today.date() <= get_datetime(election.term_start).date()
):
current_election = ElectionCycle(cycle, config, self.bot.get_guild(config.params.guild_id))
@@ -104,3 +106,23 @@ class DailyLoop(commands.Cog, name="Daily Loop"):
with Session(engine) as session:
to_add = session.scalars(stmt)
birthday_list.extend(to_add.all())
async def cakedays(self) -> None:
"""
Loops through the guild's humans checking for joined_at dates that match today's date. Sends a message
saying happy cakeday.
"""
today = datetime.today()
guild: nextcord.Guild = self.bot.get_guild(self.bot.config.params.guild_id)
announce_channel: nextcord.TextChannel = guild.get_channel(self.bot.config.params.announcement_category_id)
cakedays: list[nextcord.Member] = [
human for human in guild.humans if human.joined_at.month == today.month and human.joined_at.day == today.day
]
for member in cakedays:
years = today.year - member.joined_at.year
year_str = "years" if years > 1 else "year"
msg = f"Happy Cake day! <@{member.id}> joined the discord {years} {year_str} ago!"
await announce_channel.send(msg)
+4 -1
View File
@@ -12,7 +12,7 @@ class Params:
active_category_id: int
admin_channel_id: int # might want to rename this...
annoucement_category_id: int
announcement_category_id: int
archive_channel_group_id: int
clan_council_elect_role_id: int
clan_council_role_id: int
@@ -31,6 +31,9 @@ class ElectionCycle:
"""
election_start: str
highcouncil_election_announce: str
highcouncil_election_end: str
highcouncil_election_start: str
name: str
term_end: str
term_start: str