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
|
||||
conf
|
||||
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
|
||||
# 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
|
||||
|
||||
COPY cogs cogs/
|
||||
COPY dakiny_bot.py dakiny_bot.py
|
||||
COPY requirements.txt requirements.txt
|
||||
|
||||
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 cogs cogs/
|
||||
COPY database_setup database_setup/
|
||||
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ from sqlalchemy import select
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
||||
@@ -99,5 +99,5 @@ class UsernameRequest(nextcord.ui.View):
|
||||
button (nextcord.ui.Button): Unused.
|
||||
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)
|
||||
|
||||
+15
-10
@@ -19,16 +19,10 @@ class DailyLoop(commands.Cog, name="Daily Loop"):
|
||||
|
||||
def __init__(self, bot: commands.Bot) -> None:
|
||||
self.bot = bot
|
||||
self.current_election = self.get_current_cycle()
|
||||
self.current_election = None
|
||||
|
||||
@commands.Cog.listener()
|
||||
async def on_ready(self):
|
||||
"""
|
||||
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
|
||||
# pylint doesn't recognize that daily_loop is subclassed from tasks.loop.
|
||||
self.daily_loop.start() # pylint: disable=no-member
|
||||
|
||||
@tasks.loop(time=time(hour=0, tzinfo=timezone("GMT")))
|
||||
async def daily_loop(self):
|
||||
@@ -46,6 +40,17 @@ class DailyLoop(commands.Cog, name="Daily Loop"):
|
||||
if self.current_election.election_over:
|
||||
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:
|
||||
"""
|
||||
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):
|
||||
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()
|
||||
):
|
||||
current_election = ElectionCycle(cycle, config, self.bot.get_guild(config.params.guild_id))
|
||||
|
||||
@@ -11,7 +11,7 @@ class Params:
|
||||
"""
|
||||
|
||||
active_category_id: int
|
||||
admin_channel_id: int
|
||||
admin_channel_id: int # might want to rename this...
|
||||
annoucement_category_id: int
|
||||
archive_channel_group_id: int
|
||||
clan_council_elect_role_id: int
|
||||
|
||||
+11
-2
@@ -1,3 +1,4 @@
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
|
||||
@@ -6,12 +7,18 @@ import nextcord
|
||||
from hydra.core.config_store import ConfigStore
|
||||
from nextcord.ext import commands
|
||||
|
||||
import database.create_database as create_database
|
||||
import database_setup.create_database as create_database
|
||||
from config import DakinyConfig
|
||||
|
||||
cs = ConfigStore.instance()
|
||||
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")
|
||||
def main(cfg: DakinyConfig):
|
||||
@@ -48,4 +55,6 @@ def main(cfg: DakinyConfig):
|
||||
|
||||
if __name__ == "__main__":
|
||||
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
|
||||
from os.path import exists
|
||||
|
||||
if not exists("dakiny.db"):
|
||||
with sqlite3.connect("dakiny.db") as con:
|
||||
if not exists("database/dakiny.db"):
|
||||
with sqlite3.connect("database/dakiny.db") as con:
|
||||
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()
|
||||
cur.executescript(database_script)
|
||||
con.commit()
|
||||
@@ -1,6 +1,3 @@
|
||||
-- CREATE DATABASE dakiny;
|
||||
-- use dakiny;
|
||||
|
||||
CREATE TABLE ElectionInformation(
|
||||
ElectionCycle varchar(30) not null unique,
|
||||
ElectionChannel bigint unsigned not null,
|
||||
@@ -25,3 +22,9 @@ CREATE TABLE Votes(
|
||||
FOREIGN KEY (ElectionCycle) REFERENCES ElectionInformation(ElectionCycle),
|
||||
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
|
||||
|
||||
# connect with sql alchemy and autoload schema
|
||||
URL = "sqlite+pysqlite:///dakiny.db"
|
||||
URL = "sqlite+pysqlite:///database/dakiny.db"
|
||||
engine = create_engine(URL)
|
||||
Base = automap_base()
|
||||
Base.prepare(autoload_with=engine)
|
||||
Reference in New Issue
Block a user