Compare commits
15
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5668e4be7e | ||
|
|
43c1a5c6cd | ||
|
|
c278bae498 | ||
|
|
8b831fb6aa | ||
|
|
e7cfe8bd4c | ||
|
|
2640ebdad1 | ||
|
|
c5c242de21 | ||
|
|
369ea0dd55 | ||
|
|
25833364d7 | ||
|
|
d73b671257 | ||
|
|
f6e827fba5 | ||
|
|
2991f81e04 | ||
|
|
b1c0b7013d | ||
|
|
22ea29e8ea | ||
|
|
f9d6227db1 |
@@ -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
@@ -139,4 +139,4 @@ TODO.txt
|
|||||||
sql_tester.py
|
sql_tester.py
|
||||||
conf
|
conf
|
||||||
outputs
|
outputs
|
||||||
dakiny.db
|
database
|
||||||
+8
-3
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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))
|
||||||
|
|||||||
@@ -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
@@ -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)
|
||||||
Reference in New Issue
Block a user