Compare commits
7
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7a91cd37ec | ||
|
|
efadcb30c7 | ||
|
|
1a8c5616ef | ||
|
|
0710db0654 | ||
|
|
077119acdd | ||
|
|
ac8d1bc681 | ||
|
|
df8cb3dd49 |
@@ -1,28 +0,0 @@
|
||||
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}}
|
||||
@@ -5,6 +5,7 @@ Cog loader. Adds all command cogs to the bot.
|
||||
from nextcord.ext import commands
|
||||
|
||||
from cogs.commands.request import RequestCog
|
||||
from cogs.commands.set import setCog
|
||||
from cogs.commands.test import TestCog
|
||||
|
||||
|
||||
@@ -14,5 +15,7 @@ def setup(bot: commands.Bot):
|
||||
"""
|
||||
Adds all command classes to bot.
|
||||
"""
|
||||
|
||||
bot.add_cog(RequestCog(bot))
|
||||
bot.add_cog(TestCog(bot))
|
||||
bot.add_cog(setCog())
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
"""
|
||||
Contains commands and views for set commands.
|
||||
"""
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
import nextcord
|
||||
from nextcord.ext import commands
|
||||
from sqlalchemy import delete, select
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from dakiny_bot import birthday_list
|
||||
from database_setup.sql_data_classes import UserBirthday, engine
|
||||
|
||||
|
||||
class setCog(commands.Cog, name="Set Commands"):
|
||||
"""
|
||||
Class holds set commands.
|
||||
"""
|
||||
|
||||
def __init__(self) -> None:
|
||||
"""
|
||||
Default constructor for SetCog class. Does nothing.
|
||||
"""
|
||||
|
||||
@nextcord.slash_command()
|
||||
async def set(self, interaction: nextcord.Interaction):
|
||||
"""
|
||||
Parent slash command for set. Never called.
|
||||
"""
|
||||
|
||||
@set.subcommand(description="Sets your birth month and day for the Birthday Fun. Use 0/0 to remove yourself.")
|
||||
async def birthday(
|
||||
self,
|
||||
interaction: nextcord.Interaction,
|
||||
month: int = nextcord.SlashOption(required=True, min_value=0, max_value=12, description="Your birth month."),
|
||||
day: int = nextcord.SlashOption(required=True, min_value=0, max_value=31, description="Your birth day."),
|
||||
):
|
||||
"""
|
||||
Sets a user's birthday in the database. Removes on input 0/0. If birthday is today, adds to the birthday_list.
|
||||
|
||||
Args:
|
||||
interaction (nextcord.Interaction): Interaction that invoked the command.
|
||||
month (int, optional): The month a user was born. Is SlashOption.
|
||||
day (int, optional): The day a user was born. Is SlashOption.
|
||||
"""
|
||||
|
||||
# Must be deferred, apparently datetime takes a little bit on invalid dates.
|
||||
await interaction.response.defer(ephemeral=True)
|
||||
|
||||
if month == 0 and day == 0:
|
||||
stmt = delete(UserBirthday).where(UserBirthday.UserId == interaction.user.id)
|
||||
with Session(engine) as session:
|
||||
session.execute(stmt)
|
||||
session.commit()
|
||||
await interaction.followup.send("Removed birthday.", ephemeral=True)
|
||||
return
|
||||
|
||||
# check if valid day
|
||||
today = datetime.today()
|
||||
try:
|
||||
birthday = datetime(today.year, month, day)
|
||||
except ValueError:
|
||||
await interaction.followup.send(f"Invalid date: {month}/{day}.", ephemeral=True)
|
||||
return
|
||||
|
||||
# If the birthday is today, add to birthday_list
|
||||
if today.date() == birthday.date():
|
||||
birthday_list.append(interaction.user.id)
|
||||
|
||||
new_birthday = UserBirthday(UserId=interaction.user.id, Birthday=f"{month}/{day}")
|
||||
with Session(engine) as session:
|
||||
try:
|
||||
session.add(new_birthday)
|
||||
session.commit()
|
||||
except IntegrityError:
|
||||
# User already has birthday, change it instead.
|
||||
session.rollback()
|
||||
stmt = select(UserBirthday).where(UserBirthday.UserId == interaction.user.id)
|
||||
new_birthday = session.scalar(stmt)
|
||||
new_birthday.Birthday = f"{month}/{day}"
|
||||
session.commit()
|
||||
|
||||
await interaction.followup.send(f"Birthday set to {month}/{day}.", ephemeral=True)
|
||||
@@ -2,13 +2,18 @@
|
||||
Defines the daily loop that runs the Dakiny bot functions.
|
||||
"""
|
||||
|
||||
import random
|
||||
from datetime import datetime, time
|
||||
|
||||
from nextcord.ext import commands, tasks
|
||||
from pytz import timezone
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from classes.election_cycle import ElectionCycle
|
||||
from config import DakinyConfig
|
||||
from dakiny_bot import birthday_list
|
||||
from database_setup.sql_data_classes import UserBirthday, engine
|
||||
from utils import get_datetime
|
||||
|
||||
|
||||
@@ -20,6 +25,7 @@ class DailyLoop(commands.Cog, name="Daily Loop"):
|
||||
def __init__(self, bot: commands.Bot) -> None:
|
||||
self.bot = bot
|
||||
self.current_election = None
|
||||
self.update_birthdays()
|
||||
|
||||
# pylint doesn't recognize that daily_loop is subclassed from tasks.loop.
|
||||
self.daily_loop.start() # pylint: disable=no-member
|
||||
@@ -40,6 +46,8 @@ class DailyLoop(commands.Cog, name="Daily Loop"):
|
||||
if self.current_election.election_over:
|
||||
self.current_election = None
|
||||
|
||||
self.update_birthdays()
|
||||
|
||||
@daily_loop.before_loop
|
||||
async def before_loop(self):
|
||||
"""
|
||||
@@ -72,3 +80,21 @@ class DailyLoop(commands.Cog, name="Daily Loop"):
|
||||
current_election = ElectionCycle(cycle, config, self.bot.get_guild(config.params.guild_id))
|
||||
|
||||
return current_election
|
||||
|
||||
def update_birthdays(self) -> None:
|
||||
"""
|
||||
Goes through database to collect all birthdays that are today. Adds user's id to birthday list.
|
||||
"""
|
||||
birthday_list.clear()
|
||||
|
||||
# kandy's 1% chance
|
||||
if random.randint(0, 99) == 0:
|
||||
birthday_list.append(239547993106284544)
|
||||
|
||||
today = datetime.today()
|
||||
birthday = f"{today.month}/{today.day}"
|
||||
|
||||
stmt = select(UserBirthday.UserId).where(UserBirthday.Birthday == birthday)
|
||||
with Session(engine) as session:
|
||||
to_add = session.scalars(stmt)
|
||||
birthday_list.extend(to_add.all())
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
"""
|
||||
Defines cog for on message listener.
|
||||
"""
|
||||
|
||||
import nextcord
|
||||
from nextcord.ext import commands
|
||||
|
||||
from dakiny_bot import birthday_list
|
||||
|
||||
|
||||
class SubmissionListener(commands.Cog, name="Message Listener"):
|
||||
"""Sets up message listener."""
|
||||
|
||||
def __init__(self, bot: commands.Bot):
|
||||
self.bot = bot
|
||||
|
||||
@commands.Cog.listener()
|
||||
async def on_message(self, message: nextcord.Message):
|
||||
"""Listener for message creation. Adds score and attachments to submission."""
|
||||
# don't want to process any messages from bot.
|
||||
if message.author.id == self.bot.user.id:
|
||||
return
|
||||
|
||||
await birthday_action(message)
|
||||
|
||||
|
||||
# This function will be called when this extension is loaded.
|
||||
# It is necessary to add these functions to the bot.
|
||||
def setup(bot: commands.Bot):
|
||||
"""Adds function to bot"""
|
||||
bot.add_cog(SubmissionListener(bot))
|
||||
|
||||
|
||||
async def birthday_action(message: nextcord.Message) -> None:
|
||||
"""
|
||||
Checks a message's auther and mentions to see if they are in the birthday list.
|
||||
|
||||
Args:
|
||||
message (nextcord.Message): The message to check for a birthday person.
|
||||
"""
|
||||
|
||||
if message.author.id in birthday_list or bool(set(message.raw_mentions) & set(birthday_list)):
|
||||
await message.add_reaction("🎂")
|
||||
@@ -13,6 +13,8 @@ from config import DakinyConfig
|
||||
cs = ConfigStore.instance()
|
||||
cs.store(name="dakiny_config", node=DakinyConfig)
|
||||
|
||||
birthday_list: list[int] = []
|
||||
|
||||
logger = logging.getLogger("nextcord")
|
||||
logger.setLevel(logging.DEBUG)
|
||||
handler = logging.FileHandler(filename="nextcord.log", encoding="utf-8", mode="w")
|
||||
|
||||
@@ -14,3 +14,4 @@ Base.prepare(autoload_with=engine)
|
||||
ElectionInformation = Base.classes.ElectionInformation
|
||||
CouncilMembers = Base.classes.CouncilMembers
|
||||
Votes = Base.classes.Votes
|
||||
UserBirthday = Base.classes.UserBirthday
|
||||
|
||||
Reference in New Issue
Block a user