Compare commits

...
Author SHA1 Message Date
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
imcompiling 18751bc85c Inform Kandy when it is her "birthday".
build_release / build (push) Successful in 48s
build_latest / build (push) Successful in 43s
build_develop / build (push) Successful in 43s
2023-09-12 13:17:25 -04:00
imcompiling e243b40be7 Merge branch '19-birthday-tracking'
build_latest / build (push) Successful in 44s
build_develop / build (push) Successful in 42s
build_release / build (push) Successful in 42s
2023-09-09 13:48:36 -04:00
imcompiling 5668e4be7e Add release workflow.
build_release / build (push) Successful in 44s
build_develop / build (push) Successful in 43s
build_latest / build (push) Successful in 44s
2023-09-09 11:49:56 -04:00
6 changed files with 63 additions and 25 deletions
+28
View File
@@ -0,0 +1,28 @@
name: build_release
on:
push:
tags: ["v[0-9].[0-9].[0-9]"]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Install Docker
uses: https://github.com/papodaca/install-docker-action@v1
- name: Log into container registry
uses: docker/login-action@v2
with:
registry: gitea.cheezers.org
username: imcompiling
password: ${{ secrets.PASSWORD }}
- name: Set env
run: echo "GIT_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Build Docker Image
run: docker build -t gitea.cheezers.org/imcompiling/dakiny-bot:${{env.GIT_TAG}} .
- name: Push Tagged Image
run: docker push gitea.cheezers.org/imcompiling/dakiny-bot:${{env.GIT_TAG}}
+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():
+7 -1
View File
@@ -5,6 +5,7 @@ Defines the daily loop that runs the Dakiny bot functions.
import random import random
from datetime import datetime, time from datetime import datetime, time
import nextcord
from nextcord.ext import commands, tasks from nextcord.ext import commands, tasks
from pytz import timezone from pytz import timezone
from sqlalchemy import select from sqlalchemy import select
@@ -48,6 +49,11 @@ class DailyLoop(commands.Cog, name="Daily Loop"):
self.update_birthdays() self.update_birthdays()
if 239547993106284544 in birthday_list:
# inform kandy that it is her "birthday"
kandy: nextcord.User = await self.bot.fetch_user(239547993106284544)
await kandy.send('Happy "Birthday"!')
@daily_loop.before_loop @daily_loop.before_loop
async def before_loop(self): async def before_loop(self):
""" """
@@ -75,7 +81,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))
+3
View File
@@ -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