Compare commits

..
Author SHA1 Message Date
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
imcompiling 43c1a5c6cd Merge branch '22-daily-loop-not-starting-election'
build_develop / build (push) Successful in 43s
build_latest / build (push) Successful in 42s
2023-09-09 11:39:31 -04:00
imcompiling c278bae498 I forgot to give the docker image the message files.
build_develop / build (push) Successful in 1m24s
2023-09-09 11:38:22 -04:00
imcompiling 8b831fb6aa start loop in init, use before loop, waiting on bot ready, to set up needed data. 2023-09-09 11:38:03 -04:00
imcompiling e7cfe8bd4c Fix logging issue.
build_develop / build (push) Successful in 1m24s
2023-09-08 20:07:08 -04:00
imcompiling 2640ebdad1 Move current_election setting. The bot needs to be ready first.
build_develop / build (push) Successful in 1m22s
2023-09-08 11:42:34 -04:00
imcompiling c5c242de21 Correct comparison in get_current_cycle().
build_develop / build (push) Successful in 1m30s
build_latest / build (push) Successful in 47s
2023-09-06 14:14:33 -04:00
imcompiling 369ea0dd55 Add logging 2023-09-03 21:12:42 -04:00
imcompiling 25833364d7 Whoops, period on wrong side of bracket.
build_latest / build (push) Successful in 42s
build_develop / build (push) Successful in 44s
2023-08-26 22:15:12 -04:00
imcompiling d73b671257 Copy utils.py into docker image. sort copying.
build_develop / build (push) Successful in 1m25s
build_latest / build (push) Successful in 44s
2023-08-26 21:39:07 -04:00
imcompiling f6e827fba5 Rename a directory, need to store the db file in a directory. 2023-08-26 21:36:18 -04:00
imcompiling 2991f81e04 Update python version.
build_develop / build (push) Successful in 2m4s
build_latest / build (push) Successful in 42s
2023-08-26 21:02:22 -04:00
imcompiling b1c0b7013d Update dockerfile to include database.
build_develop / build (push) Successful in 1m45s
build_latest / build (push) Successful in 42s
2023-08-26 20:52:31 -04:00
imcompiling 22ea29e8ea Merge branch '10-name-change-request'
build_develop / build (push) Successful in 42s
build_latest / build (push) Successful in 42s
2023-07-29 21:13:59 -04:00
imcompiling f9d6227db1 Add the birthday table. 2023-07-29 15:16:23 -04:00
11 changed files with 76 additions and 26 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}}
+1 -1
View File
@@ -139,4 +139,4 @@ TODO.txt
sql_tester.py sql_tester.py
conf conf
outputs outputs
dakiny.db database
+8 -3
View File
@@ -1,4 +1,4 @@
FROM python:3.8.10-slim FROM python:3.10.6-slim
# install dependencies for mysqlclient # install dependencies for mysqlclient
# RUN apt-get update && apt-get -y upgrade && apt-get -y install python3-dev default-libmysqlclient-dev build-essential # RUN apt-get update && apt-get -y upgrade && apt-get -y install python3-dev default-libmysqlclient-dev build-essential
@@ -7,11 +7,16 @@ RUN pip install --upgrade pip
WORKDIR /home WORKDIR /home
COPY cogs cogs/
COPY dakiny_bot.py dakiny_bot.py
COPY requirements.txt requirements.txt COPY requirements.txt requirements.txt
COPY config.py config.py COPY config.py config.py
COPY dakiny_bot.py dakiny_bot.py
COPY utils.py utils.py
COPY bot_messages bot_messages/
COPY classes classes/ COPY classes classes/
COPY cogs cogs/
COPY database_setup database_setup/
RUN pip install -r requirements.txt RUN pip install -r requirements.txt
+1 -1
View File
@@ -9,7 +9,7 @@ from sqlalchemy import select
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from config import DakinyConfig from config import DakinyConfig
from database.sql_data_classes import ElectionInformation, engine from database_setup.sql_data_classes import ElectionInformation, engine
from utils import get_datetime from utils import get_datetime
+1 -1
View File
@@ -99,5 +99,5 @@ class UsernameRequest(nextcord.ui.View):
button (nextcord.ui.Button): Unused. button (nextcord.ui.Button): Unused.
interaction (nextcord.Interaction): The interaction of the user clicking the button. interaction (nextcord.Interaction): The interaction of the user clicking the button.
""" """
content = interaction.message.content + f"\nDenied by <@{interaction.user.id}.>" content = interaction.message.content + f"\nDenied by <@{interaction.user.id}>."
await interaction.response.edit_message(content=content, view=None) await interaction.response.edit_message(content=content, view=None)
+15 -10
View File
@@ -19,16 +19,10 @@ class DailyLoop(commands.Cog, name="Daily Loop"):
def __init__(self, bot: commands.Bot) -> None: def __init__(self, bot: commands.Bot) -> None:
self.bot = bot self.bot = bot
self.current_election = self.get_current_cycle() self.current_election = None
@commands.Cog.listener() # pylint doesn't recognize that daily_loop is subclassed from tasks.loop.
async def on_ready(self): self.daily_loop.start() # pylint: disable=no-member
"""
Starts the loop when bot is ready.
"""
await self.bot.wait_until_ready()
# pylint doesn't recognize that periodic_update_guild_data is subclassed from tasks.loop.
await self.daily_loop.start() # pylint: disable=no-member
@tasks.loop(time=time(hour=0, tzinfo=timezone("GMT"))) @tasks.loop(time=time(hour=0, tzinfo=timezone("GMT")))
async def daily_loop(self): async def daily_loop(self):
@@ -46,6 +40,17 @@ class DailyLoop(commands.Cog, name="Daily Loop"):
if self.current_election.election_over: if self.current_election.election_over:
self.current_election = None self.current_election = None
@daily_loop.before_loop
async def before_loop(self):
"""
Actions run before the loop starts. Want to wait for bot to be ready and get the current cycle.
"""
await self.bot.wait_until_ready()
# Bot needs to know guilds to get the current cycle.
self.current_election = self.get_current_cycle()
def get_current_cycle(self) -> ElectionCycle: def get_current_cycle(self) -> ElectionCycle:
""" """
Creates an object for the current election cycle if one is active. An election is considered active Creates an object for the current election cycle if one is active. An election is considered active
@@ -61,7 +66,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))
+1 -1
View File
@@ -11,7 +11,7 @@ class Params:
""" """
active_category_id: int active_category_id: int
admin_channel_id: int admin_channel_id: int # might want to rename this...
annoucement_category_id: int annoucement_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
+11 -2
View File
@@ -1,3 +1,4 @@
import logging
import os import os
import sys import sys
@@ -6,12 +7,18 @@ import nextcord
from hydra.core.config_store import ConfigStore from hydra.core.config_store import ConfigStore
from nextcord.ext import commands from nextcord.ext import commands
import database.create_database as create_database import database_setup.create_database as create_database
from config import DakinyConfig from config import DakinyConfig
cs = ConfigStore.instance() cs = ConfigStore.instance()
cs.store(name="dakiny_config", node=DakinyConfig) cs.store(name="dakiny_config", node=DakinyConfig)
logger = logging.getLogger("nextcord")
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(filename="nextcord.log", encoding="utf-8", mode="w")
handler.setFormatter(logging.Formatter("%(asctime)s:%(levelname)s:%(name)s: %(message)s"))
logger.addHandler(handler)
@hydra.main(config_path="conf", config_name="config") @hydra.main(config_path="conf", config_name="config")
def main(cfg: DakinyConfig): def main(cfg: DakinyConfig):
@@ -48,4 +55,6 @@ def main(cfg: DakinyConfig):
if __name__ == "__main__": if __name__ == "__main__":
sys.argv.append("hydra.job.chdir=False") sys.argv.append("hydra.job.chdir=False")
main() sys.argv.append("hydra/job_logging=none")
sys.argv.append("hydra/hydra_logging=none")
main() # pylint: disable=no-value-for-parameter
@@ -5,11 +5,11 @@ Small script to create the database if it doesn't already exist.
import sqlite3 import sqlite3
from os.path import exists from os.path import exists
if not exists("dakiny.db"): if not exists("database/dakiny.db"):
with sqlite3.connect("dakiny.db") as con: with sqlite3.connect("database/dakiny.db") as con:
cur = con.cursor() cur = con.cursor()
with open("database/database.sql", mode="r", encoding="utf-8") as file: with open("database_setup/database.sql", mode="r", encoding="utf-8") as file:
database_script = file.read() database_script = file.read()
cur.executescript(database_script) cur.executescript(database_script)
con.commit() con.commit()
@@ -1,6 +1,3 @@
-- CREATE DATABASE dakiny;
-- use dakiny;
CREATE TABLE ElectionInformation( CREATE TABLE ElectionInformation(
ElectionCycle varchar(30) not null unique, ElectionCycle varchar(30) not null unique,
ElectionChannel bigint unsigned not null, ElectionChannel bigint unsigned not null,
@@ -25,3 +22,9 @@ CREATE TABLE Votes(
FOREIGN KEY (ElectionCycle) REFERENCES ElectionInformation(ElectionCycle), FOREIGN KEY (ElectionCycle) REFERENCES ElectionInformation(ElectionCycle),
PRIMARY KEY (ElectionCycle, VoterId) PRIMARY KEY (ElectionCycle, VoterId)
); );
CREATE TABLE UserBirthday (
UserId bigint unsigned not null,
Birthday varchar(5) not null,
PRIMARY KEY (UserId)
);
@@ -5,7 +5,7 @@ from sqlalchemy import create_engine
from sqlalchemy.ext.automap import automap_base from sqlalchemy.ext.automap import automap_base
# connect with sql alchemy and autoload schema # connect with sql alchemy and autoload schema
URL = "sqlite+pysqlite:///dakiny.db" URL = "sqlite+pysqlite:///database/dakiny.db"
engine = create_engine(URL) engine = create_engine(URL)
Base = automap_base() Base = automap_base()
Base.prepare(autoload_with=engine) Base.prepare(autoload_with=engine)