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 <:Rank_Owner:479008325137072155> Clan Leader
---message_break--- ---message_break---
__Here's the timeline:__ __Here's the timeline:__
Election begins: {election_start_date} Election begins: {election_start}
Term: {term_start_date} - {term_end_date} Term: {term_start} - {term_end}
**{election_start_date}**: Post here to announce candidacy **{election_start}**: Post here to announce candidacy
**{voting_start_date}**: Voting begins **{voting_start}**: Voting begins
**{voting_end_date}**: Votes are tallied and winners are announced **{voting_end}**: 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. **{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_date}**: The new Clan Council is officially inaugurated and a drop party (or a giveaway event) begins to commemorate the new leadership. **{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--- ---message_break---
**You may now announce your candidacy for a seat on the Dakiny Clan Council! **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. <@&{clan_member_id}>, it's time to vote for clan council.
React with <{voting_emote_id}> to vote. 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. 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. 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 Contains the election cycle class
""" """
from datetime import datetime, timedelta from datetime import datetime
import nextcord import nextcord
from sqlalchemy import select from sqlalchemy import select
@@ -20,6 +20,7 @@ class ElectionCycle:
""" """
def __init__(self, cycle: int, config: DakinyConfig, guild: nextcord.Guild) -> None: 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. 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.term_end: datetime = get_datetime(self.elecion_cycle.term_end)
self.voting_start: datetime = get_datetime(self.elecion_cycle.voting_start) self.voting_start: datetime = get_datetime(self.elecion_cycle.voting_start)
self.voting_end: datetime = get_datetime(self.elecion_cycle.voting_end) 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_announce: datetime = get_datetime(self.elecion_cycle.highcouncil_election_announce)
self.highcouncil_election_start: datetime = self.highcouncil_election_announce + timedelta(days=3) self.highcouncil_election_start: datetime = get_datetime(self.elecion_cycle.highcouncil_election_start)
self.highcouncil_election_end: datetime = self.term_start - timedelta(days=1) self.highcouncil_election_end: datetime = get_datetime(self.elecion_cycle.highcouncil_election_end)
self.guild: nextcord.Guild = guild self.guild: nextcord.Guild = guild
self.election_over: bool = False self.election_over: bool = False
@@ -60,13 +61,13 @@ class ElectionCycle:
message = message.format( message = message.format(
clan_council_id=self.config.params.clan_council_role_id, clan_council_id=self.config.params.clan_council_role_id,
high_council_id=self.config.params.high_council_role_id, high_council_id=self.config.params.high_council_role_id,
election_start_date=self.election_start.strftime("%B %d"), election_start=self.election_start.strftime("%B %d"),
term_start_date=self.term_start.strftime("%B %d"), term_start=self.term_start.strftime("%B %d"),
term_end_date=self.term_end.strftime("%B %d"), term_end=self.term_end.strftime("%B %d"),
voting_start_date=self.voting_start.strftime("%B %d"), voting_start=self.voting_start.strftime("%B %d"),
voting_end_date=self.voting_end.strftime("%B %d"), voting_end=self.voting_end.strftime("%B %d"),
highcouncil_election_date=self.highcouncil_election_start.strftime("%B %d"), highcouncil_election=self.highcouncil_election_start.strftime("%B %d"),
next_election_start_date=next_election.strftime("%B %d"), next_election_start=next_election.strftime("%B %d"),
) )
return message.split("---message_break---") return message.split("---message_break---")
@@ -87,7 +88,7 @@ class ElectionCycle:
highcouncil_election_announce=self.highcouncil_election_announce.strftime("%B %d"), highcouncil_election_announce=self.highcouncil_election_announce.strftime("%B %d"),
highcouncil_election_start=self.highcouncil_election_start.strftime("%B %d"), highcouncil_election_start=self.highcouncil_election_start.strftime("%B %d"),
highcouncil_election_end=self.highcouncil_election_end.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: def build_highcouncil_vote_start(self) -> str:
@@ -103,7 +104,7 @@ class ElectionCycle:
return message.format( return message.format(
clan_council_elect_role_id=self.config.params.clan_council_elect_role_id, 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: def build_vote_start(self) -> str:
@@ -121,7 +122,7 @@ class ElectionCycle:
return message.format( return message.format(
clan_member_id=self.config.params.clan_member_role_id, clan_member_id=self.config.params.clan_member_role_id,
voting_emote_id=self.config.params.voting_emote_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"), voting_end_day=vote_end.strftime("%A"),
) )
@@ -135,7 +136,7 @@ class ElectionCycle:
if today.date() == self.election_start.date(): if today.date() == self.election_start.date():
await self.election_start_action() await self.election_start_action()
elif today.date() == self.voting_start.date(): elif today.date() == self.voting_start.date():
await self.voting_end_action() await self.voting_start_action()
elif today.date() == self.voting_end.date(): elif today.date() == self.voting_end.date():
await self.voting_end_action() await self.voting_end_action()
elif today.date() == self.highcouncil_election_start.date(): 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) kandy: nextcord.User = await self.bot.fetch_user(239547993106284544)
await kandy.send('Happy "Birthday"!') await kandy.send('Happy "Birthday"!')
await self.cakedays()
@daily_loop.before_loop @daily_loop.before_loop
async def before_loop(self): async def before_loop(self):
""" """
@@ -81,7 +83,7 @@ class DailyLoop(commands.Cog, name="Daily Loop"):
for cycle, election in enumerate(config.election_cycles): for cycle, election in enumerate(config.election_cycles):
if ( if (
today.date() >= get_datetime(election.election_start).date() 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)) 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: with Session(engine) as session:
to_add = session.scalars(stmt) to_add = session.scalars(stmt)
birthday_list.extend(to_add.all()) 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 active_category_id: int
admin_channel_id: int # might want to rename this... admin_channel_id: int # might want to rename this...
annoucement_category_id: int announcement_category_id: int
archive_channel_group_id: int archive_channel_group_id: int
clan_council_elect_role_id: int clan_council_elect_role_id: int
clan_council_role_id: int clan_council_role_id: int
@@ -31,6 +31,9 @@ class ElectionCycle:
""" """
election_start: str election_start: str
highcouncil_election_announce: str
highcouncil_election_end: str
highcouncil_election_start: str
name: str name: str
term_end: str term_end: str
term_start: str term_start: str