Renamed to DakinySettings. Converted dataclass to YAMLWizard.
build_develop / build (push) Failing after 17s
build_develop / build (push) Failing after 17s
This commit is contained in:
@@ -1,11 +1,15 @@
|
||||
"""File contains classes defining the Hydra configuration structure."""
|
||||
"""File contains classes defining Dakiny settings structure."""
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
from dataclass_wizard import YAMLWizard
|
||||
|
||||
CONFIG_LOCATION = "conf/config.yaml"
|
||||
|
||||
|
||||
@dataclass
|
||||
class Params:
|
||||
"""Class defines the various configuration parameters."""
|
||||
class Settings:
|
||||
"""Class defines settings editable by Clan Council."""
|
||||
|
||||
admin_channel_id: int # might want to rename this...
|
||||
announcement_category_id: int
|
||||
@@ -13,28 +17,34 @@ class Params:
|
||||
clan_council_role_id: int
|
||||
clan_info_channel_id: int
|
||||
clan_member_role_id: int
|
||||
discord_token: str
|
||||
event_host_points: int
|
||||
event_host_role_id: int
|
||||
event_participate_points: int
|
||||
event_points_weekly_limit: int
|
||||
event_post_channel_id: int
|
||||
general_channel_id: int
|
||||
git_branch: str
|
||||
guild_id: int
|
||||
high_council_role_id: int
|
||||
voting_parent_id: int
|
||||
|
||||
|
||||
@dataclass
|
||||
class Params:
|
||||
"""Class defines start parameters that shouldn't be changed."""
|
||||
|
||||
discord_token: str
|
||||
git_branch: str
|
||||
guild_id: int
|
||||
|
||||
|
||||
@dataclass
|
||||
class Election:
|
||||
"""Class defines relevant election dates."""
|
||||
|
||||
name: str
|
||||
election_start: str
|
||||
highcouncil_election_announce: str
|
||||
highcouncil_election_end: str
|
||||
highcouncil_election_start: str
|
||||
name: str
|
||||
term_end: str
|
||||
term_start: str
|
||||
voting_end: str
|
||||
@@ -42,8 +52,16 @@ class Election:
|
||||
|
||||
|
||||
@dataclass
|
||||
class DakinyConfig:
|
||||
class DakinySettings(YAMLWizard):
|
||||
"""Class defines all configs required for Dakiny Bot."""
|
||||
|
||||
election_cycles: list[Election]
|
||||
params: Params
|
||||
settings: Settings
|
||||
|
||||
def save(self) -> None:
|
||||
"""Saves settings to the yaml file."""
|
||||
self.to_yaml_file(CONFIG_LOCATION)
|
||||
|
||||
|
||||
settings = DakinySettings.from_yaml_file(CONFIG_LOCATION)
|
||||
+3
-3
@@ -9,7 +9,7 @@ from classes.nominate_highcouncil_views import NominateHighCouncilView
|
||||
from classes.nominate_views import NominateView
|
||||
from classes.voting_highcouncil_views import VoteHighcouncilView
|
||||
from classes.voting_views import VoteView
|
||||
from DakinyConfig import DakinyConfig
|
||||
from DakinySettings import DakinySettings
|
||||
from database_setup.sql_data_classes import (
|
||||
CouncilMembers,
|
||||
ElectionInformation,
|
||||
@@ -39,7 +39,7 @@ class Election:
|
||||
the cycle.
|
||||
"""
|
||||
|
||||
def __init__(self, cycle: int, config: DakinyConfig, guild: nextcord.Guild) -> None:
|
||||
def __init__(self, cycle: int, config: DakinySettings, guild: nextcord.Guild) -> None:
|
||||
"""
|
||||
Generates all dates relevant to the election cycle determined by the config and cycle.
|
||||
|
||||
@@ -48,7 +48,7 @@ class Election:
|
||||
config (DakinyConfig): The entire config object.
|
||||
guild (nextcord.Guild): The guild that this election is running in.
|
||||
"""
|
||||
self.config: DakinyConfig = config
|
||||
self.config: DakinySettings = config
|
||||
self.cycle = cycle
|
||||
self.election_cycle = self.config.election_cycles[self.cycle]
|
||||
self.election_start: datetime = get_datetime(self.election_cycle.election_start)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"""Contains various views to be used in the high council nomination process."""
|
||||
|
||||
import nextcord
|
||||
from DakinyConfig import DakinyConfig
|
||||
from DakinySettings import DakinySettings
|
||||
from database_setup.sql_data_classes import CouncilMembers, engine
|
||||
from nextcord.interactions import Interaction
|
||||
from sqlalchemy import select
|
||||
@@ -23,7 +23,7 @@ class NominateDMModal(nextcord.ui.Modal):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
config: DakinyConfig,
|
||||
config: DakinySettings,
|
||||
usr_id: int,
|
||||
usr_nominated: bool, # noqa: FBT001
|
||||
speech_content: str,
|
||||
@@ -33,7 +33,7 @@ class NominateDMModal(nextcord.ui.Modal):
|
||||
timeout=5 * 60, # 5 minutes
|
||||
)
|
||||
self.usr_id: int = usr_id
|
||||
self.config: DakinyConfig = config
|
||||
self.config: DakinySettings = config
|
||||
self.usr_nominated = usr_nominated
|
||||
|
||||
self.speech = nextcord.ui.TextInput(
|
||||
@@ -85,7 +85,7 @@ class NominateCLModal(nextcord.ui.Modal):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
config: DakinyConfig,
|
||||
config: DakinySettings,
|
||||
usr_id: int,
|
||||
usr_nominated: bool, # noqa: FBT001
|
||||
speech_content: str,
|
||||
@@ -95,7 +95,7 @@ class NominateCLModal(nextcord.ui.Modal):
|
||||
timeout=5 * 60, # 5 minutes
|
||||
)
|
||||
self.usr_id: int = usr_id
|
||||
self.config: DakinyConfig = config
|
||||
self.config: DakinySettings = config
|
||||
self.usr_nominated = usr_nominated
|
||||
|
||||
self.speech = nextcord.ui.TextInput(
|
||||
@@ -141,9 +141,9 @@ class NominateCLModal(nextcord.ui.Modal):
|
||||
class NominateHighCouncilView(nextcord.ui.View):
|
||||
"""The buttons to press to start your High Council nomination."""
|
||||
|
||||
def __init__(self, config: DakinyConfig, guild: nextcord.Guild):
|
||||
def __init__(self, config: DakinySettings, guild: nextcord.Guild):
|
||||
super().__init__(timeout=None)
|
||||
self.config: DakinyConfig = config
|
||||
self.config: DakinySettings = config
|
||||
self.guild: nextcord.Guild = guild
|
||||
|
||||
@nextcord.ui.button(
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"""Contains various views to be used in the nomination process."""
|
||||
|
||||
import nextcord
|
||||
from DakinyConfig import DakinyConfig
|
||||
from DakinySettings import DakinySettings
|
||||
from database_setup.sql_data_classes import CouncilMembers, engine
|
||||
from nextcord.interactions import Interaction
|
||||
from sqlalchemy import select
|
||||
@@ -18,7 +18,7 @@ class NominateModal(nextcord.ui.Modal):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
config: DakinyConfig,
|
||||
config: DakinySettings,
|
||||
usr_id: int,
|
||||
usr_nominated: bool, # noqa: FBT001
|
||||
speech_content: str,
|
||||
@@ -28,7 +28,7 @@ class NominateModal(nextcord.ui.Modal):
|
||||
timeout=5 * 60, # 5 minutes
|
||||
)
|
||||
self.usr_id: int = usr_id
|
||||
self.config: DakinyConfig = config
|
||||
self.config: DakinySettings = config
|
||||
self.usr_nominated = usr_nominated
|
||||
|
||||
self.speech = nextcord.ui.TextInput(
|
||||
@@ -79,9 +79,9 @@ class NominateModal(nextcord.ui.Modal):
|
||||
class NominateView(nextcord.ui.View):
|
||||
"""The button to press to start your nomination."""
|
||||
|
||||
def __init__(self, config: DakinyConfig, guild: nextcord.Guild):
|
||||
def __init__(self, config: DakinySettings, guild: nextcord.Guild):
|
||||
super().__init__(timeout=None)
|
||||
self.config: DakinyConfig = config
|
||||
self.config: DakinySettings = config
|
||||
self.guild: nextcord.Guild = guild
|
||||
|
||||
@nextcord.ui.button(
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"""Contains various views to be used while voting for high council. Controls the logic when performing the vote."""
|
||||
|
||||
import nextcord
|
||||
from DakinyConfig import DakinyConfig
|
||||
from DakinySettings import DakinySettings
|
||||
from database_setup.sql_data_classes import (
|
||||
CouncilMembers,
|
||||
ElectionInformation,
|
||||
@@ -18,7 +18,7 @@ from utils import VoteType, build_highcouncil_votes_str, get_election_name
|
||||
class VoteSelect(nextcord.ui.StringSelect):
|
||||
"""Vote view string select."""
|
||||
|
||||
def __init__(self, options: list["SelectOption"], config: DakinyConfig, election_type: str) -> None:
|
||||
def __init__(self, options: list["SelectOption"], config: DakinySettings, election_type: str) -> None:
|
||||
super().__init__(
|
||||
placeholder="Choose 1",
|
||||
min_values=1,
|
||||
@@ -83,7 +83,7 @@ class VoteSelect(nextcord.ui.StringSelect):
|
||||
class VoteHighcouncilView(nextcord.ui.View):
|
||||
"""The button to press to start voting for HighCouncil."""
|
||||
|
||||
def __init__(self, config: DakinyConfig, guild: nextcord.Guild):
|
||||
def __init__(self, config: DakinySettings, guild: nextcord.Guild):
|
||||
super().__init__(timeout=None)
|
||||
self.config = config
|
||||
self.guild = guild
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"""Contains various views to be used while voting. Controls the logic when performing the vote."""
|
||||
|
||||
import nextcord
|
||||
from DakinyConfig import DakinyConfig
|
||||
from DakinySettings import DakinySettings
|
||||
from database_setup.sql_data_classes import (
|
||||
CouncilMembers,
|
||||
ElectionInformation,
|
||||
@@ -18,7 +18,7 @@ from utils import VoteType, build_votes_str, get_election_name
|
||||
class VoteSelect(nextcord.ui.StringSelect):
|
||||
"""Vote view string select."""
|
||||
|
||||
def __init__(self, options: list["SelectOption"], config: DakinyConfig) -> None:
|
||||
def __init__(self, options: list["SelectOption"], config: DakinySettings) -> None:
|
||||
super().__init__(
|
||||
placeholder="Choose 1",
|
||||
min_values=1,
|
||||
@@ -79,7 +79,7 @@ class VoteSelect(nextcord.ui.StringSelect):
|
||||
class VoteView(nextcord.ui.View):
|
||||
"""The button to press to start your nomination."""
|
||||
|
||||
def __init__(self, config: DakinyConfig, guild: nextcord.Guild):
|
||||
def __init__(self, config: DakinySettings, guild: nextcord.Guild):
|
||||
super().__init__(timeout=None)
|
||||
self.config = config
|
||||
self.guild = guild
|
||||
|
||||
@@ -14,7 +14,7 @@ from utils import REPO_DIR, edit_clan_council_info, update_clan_messages
|
||||
if TYPE_CHECKING:
|
||||
import nextcord
|
||||
|
||||
from DakinyConfig import DakinyConfig
|
||||
from DakinySettings import DakinySettings
|
||||
|
||||
app = FastAPI()
|
||||
REPO_URL = "https://gitea.cheezers.org/imcompiling/dakiny-messages.git"
|
||||
@@ -30,7 +30,7 @@ class ClanMessages(commands.Cog, name="Clan Messages"):
|
||||
|
||||
def __init__(self, bot: commands.Bot):
|
||||
self.bot = bot
|
||||
self.config: DakinyConfig = self.bot.config
|
||||
self.config: DakinySettings = self.bot.config
|
||||
self.repo_setup()
|
||||
|
||||
@commands.Cog.listener()
|
||||
|
||||
@@ -4,7 +4,7 @@ import nextcord
|
||||
from discord import TextInputStyle
|
||||
from nextcord.ext import commands
|
||||
|
||||
from DakinyConfig import DakinyConfig
|
||||
from DakinySettings import DakinySettings
|
||||
from utils import GUILDS, MAX_DISCORD_MESSAGE_LENGTH, record_event_points
|
||||
|
||||
|
||||
@@ -155,11 +155,11 @@ class EventView(nextcord.ui.View):
|
||||
Also contains a UserSelect object to pick discord members.
|
||||
"""
|
||||
|
||||
def __init__(self, name: str, config: DakinyConfig, host_id: int):
|
||||
def __init__(self, name: str, config: DakinySettings, host_id: int):
|
||||
super().__init__()
|
||||
|
||||
self.name: str = name
|
||||
self.config: DakinyConfig = config
|
||||
self.config: DakinySettings = config
|
||||
self.host_id: int = host_id
|
||||
|
||||
self.event_participants = ParticipantSelect()
|
||||
|
||||
@@ -9,7 +9,7 @@ from sqlalchemy.orm import Session
|
||||
from database_setup.sql_data_classes import Presences, engine
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from DakinyConfig import DakinyConfig
|
||||
from DakinySettings import DakinySettings
|
||||
|
||||
|
||||
class RequestCog(commands.Cog, name="Request Commands"):
|
||||
@@ -41,7 +41,7 @@ class RequestCog(commands.Cog, name="Request Commands"):
|
||||
interaction (nextcord.Interaction): Interaction that invoked the command.
|
||||
presence (str): The presence to add.
|
||||
"""
|
||||
config: DakinyConfig = self.bot.config
|
||||
config: DakinySettings = self.bot.config
|
||||
content = f'<@{interaction.user.id}> would like to add presence "{presence}."'
|
||||
view = PresenceChange(presence)
|
||||
await self.bot.get_channel(config.params.admin_channel_id).send(content=content, view=view)
|
||||
@@ -65,7 +65,7 @@ class RequestCog(commands.Cog, name="Request Commands"):
|
||||
interaction (nextcord.Interaction): Interaction that invoked the command.
|
||||
new_nickname(str): The username to change to.
|
||||
"""
|
||||
config: DakinyConfig = self.bot.config
|
||||
config: DakinySettings = self.bot.config
|
||||
content = f'<@{interaction.user.id}> would like to change their username to "{new_nickname}."'
|
||||
view = UsernameRequest(interaction.user.id, new_nickname)
|
||||
await self.bot.get_channel(config.params.admin_channel_id).send(content=content, view=view)
|
||||
|
||||
@@ -9,7 +9,7 @@ from classes.election import Election
|
||||
from utils import GUILDS, get_current_election_cycle
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from DakinyConfig import DakinyConfig
|
||||
from DakinySettings import DakinySettings
|
||||
|
||||
|
||||
ME = 206602713511886849
|
||||
@@ -44,7 +44,7 @@ class TestCog(commands.Cog, name="Test commands."):
|
||||
Args:
|
||||
interaction (nextcord.Interaction): Interaction with the message.
|
||||
"""
|
||||
config: DakinyConfig = self.bot.config
|
||||
config: DakinySettings = self.bot.config
|
||||
cycle = Election(
|
||||
get_current_election_cycle(config),
|
||||
config,
|
||||
@@ -62,7 +62,7 @@ class TestCog(commands.Cog, name="Test commands."):
|
||||
Args:
|
||||
interaction (nextcord.Interaction): Interaction with the message.
|
||||
"""
|
||||
config: DakinyConfig = self.bot.config
|
||||
config: DakinySettings = self.bot.config
|
||||
cycle = Election(
|
||||
get_current_election_cycle(config),
|
||||
config,
|
||||
@@ -80,7 +80,7 @@ class TestCog(commands.Cog, name="Test commands."):
|
||||
Args:
|
||||
interaction (nextcord.Interaction): Interaction with the message.
|
||||
"""
|
||||
config: DakinyConfig = self.bot.config
|
||||
config: DakinySettings = self.bot.config
|
||||
cycle = Election(
|
||||
get_current_election_cycle(config),
|
||||
config,
|
||||
@@ -98,7 +98,7 @@ class TestCog(commands.Cog, name="Test commands."):
|
||||
Args:
|
||||
interaction (nextcord.Interaction): Interaction with the message.
|
||||
"""
|
||||
config: DakinyConfig = self.bot.config
|
||||
config: DakinySettings = self.bot.config
|
||||
cycle = Election(
|
||||
get_current_election_cycle(config),
|
||||
config,
|
||||
@@ -116,7 +116,7 @@ class TestCog(commands.Cog, name="Test commands."):
|
||||
Args:
|
||||
interaction (nextcord.Interaction): Interaction with the message.
|
||||
"""
|
||||
config: DakinyConfig = self.bot.config
|
||||
config: DakinySettings = self.bot.config
|
||||
cycle = Election(
|
||||
get_current_election_cycle(config),
|
||||
config,
|
||||
@@ -134,7 +134,7 @@ class TestCog(commands.Cog, name="Test commands."):
|
||||
Args:
|
||||
interaction (nextcord.Interaction): Interaction with the message.
|
||||
"""
|
||||
config: DakinyConfig = self.bot.config
|
||||
config: DakinySettings = self.bot.config
|
||||
cycle = Election(
|
||||
get_current_election_cycle(config),
|
||||
config,
|
||||
@@ -152,7 +152,7 @@ class TestCog(commands.Cog, name="Test commands."):
|
||||
Args:
|
||||
interaction (nextcord.Interaction): Interaction with the message.
|
||||
"""
|
||||
config: DakinyConfig = self.bot.config
|
||||
config: DakinySettings = self.bot.config
|
||||
cycle = Election(
|
||||
get_current_election_cycle(config),
|
||||
config,
|
||||
|
||||
@@ -17,7 +17,7 @@ from utils import get_current_election_cycle
|
||||
if TYPE_CHECKING:
|
||||
import nextcord
|
||||
|
||||
from DakinyConfig import DakinyConfig
|
||||
from DakinySettings import DakinySettings
|
||||
|
||||
KANDY = 239547993106284544
|
||||
|
||||
@@ -76,7 +76,7 @@ class DailyLoop(commands.Cog, name="Daily Loop"):
|
||||
Returns:
|
||||
Election: Current election cycle, None if there is no election happening.
|
||||
"""
|
||||
config: DakinyConfig = self.bot.config
|
||||
config: DakinySettings = self.bot.config
|
||||
cycle = get_current_election_cycle(config)
|
||||
|
||||
# prevent exception from using cycle as an Int in an array
|
||||
|
||||
@@ -10,7 +10,7 @@ from classes.nominate_highcouncil_views import NominateHighCouncilView
|
||||
from classes.nominate_views import NominateView
|
||||
from classes.voting_highcouncil_views import VoteHighcouncilView
|
||||
from classes.voting_views import VoteView
|
||||
from DakinyConfig import DakinyConfig
|
||||
from DakinySettings import DakinySettings
|
||||
from database_setup import create_database
|
||||
|
||||
birthday_list: list[int] = []
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ pytz = "^2024.1"
|
||||
sqlalchemy = "^2.0.30"
|
||||
aiofiles = "^23.2.1"
|
||||
setuptools = "^70.0.0"
|
||||
pyyaml = "^6.0.2"
|
||||
dataclass-wizard = "^0.22.3"
|
||||
|
||||
|
||||
[tool.poetry.group.dev.dependencies]
|
||||
|
||||
@@ -12,7 +12,7 @@ import nextcord
|
||||
from sqlalchemy import select, true, update
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from DakinyConfig import DakinyConfig
|
||||
from DakinySettings import DakinySettings
|
||||
from database_setup.sql_data_classes import (
|
||||
CouncilMembers,
|
||||
EventPoints,
|
||||
@@ -57,7 +57,7 @@ def get_datetime(day: str) -> datetime:
|
||||
return datetime(year, month, day, tzinfo=UTC)
|
||||
|
||||
|
||||
def get_election_name(config: DakinyConfig) -> str:
|
||||
def get_election_name(config: DakinySettings) -> str:
|
||||
"""
|
||||
Builds the unique name of the current election cycle.
|
||||
|
||||
@@ -72,7 +72,7 @@ def get_election_name(config: DakinyConfig) -> str:
|
||||
return f"vote-{get_datetime(current_cycle.term_start).year}-{current_cycle.name}"
|
||||
|
||||
|
||||
def get_quarter_name(config: DakinyConfig) -> str:
|
||||
def get_quarter_name(config: DakinySettings) -> str:
|
||||
"""
|
||||
Builds the name of the current cycle/quarter.
|
||||
|
||||
@@ -88,7 +88,7 @@ def get_quarter_name(config: DakinyConfig) -> str:
|
||||
return f"{get_datetime(current_cycle.term_start).year}-{current_cycle.name}"
|
||||
|
||||
|
||||
def get_current_election_cycle(config: DakinyConfig) -> int:
|
||||
def get_current_election_cycle(config: DakinySettings) -> int:
|
||||
"""
|
||||
Returns index for active election. An election is considered active between the election start and the term start.
|
||||
|
||||
@@ -111,7 +111,7 @@ def get_current_election_cycle(config: DakinyConfig) -> int:
|
||||
return get_quarter_cycle(config)
|
||||
|
||||
|
||||
def get_quarter_cycle(config: DakinyConfig) -> int:
|
||||
def get_quarter_cycle(config: DakinySettings) -> int:
|
||||
"""
|
||||
Returns the index for the current cycle/quarter. Defined as between term start and end. Shouldn't return none.
|
||||
|
||||
@@ -132,7 +132,7 @@ def get_quarter_cycle(config: DakinyConfig) -> int:
|
||||
return None
|
||||
|
||||
|
||||
def build_votes_str(config: DakinyConfig, guild: nextcord.Guild) -> str:
|
||||
def build_votes_str(config: DakinySettings, guild: nextcord.Guild) -> str:
|
||||
"""
|
||||
Creates a string that contains all nominees and their votes to be sent as a discord message.
|
||||
|
||||
@@ -168,7 +168,7 @@ def build_votes_str(config: DakinyConfig, guild: nextcord.Guild) -> str:
|
||||
return votes_str
|
||||
|
||||
|
||||
def build_highcouncil_votes_str(config: DakinyConfig, guild: nextcord.Guild) -> str:
|
||||
def build_highcouncil_votes_str(config: DakinySettings, guild: nextcord.Guild) -> str:
|
||||
"""
|
||||
Creates a string that contains all high council nominees and their votes to be sent as a discord message.
|
||||
|
||||
@@ -302,7 +302,7 @@ def decorate_dm_nomination(user_id: int, speech: str) -> str:
|
||||
return msg
|
||||
|
||||
|
||||
def record_event_points(config: DakinyConfig, users: Sequence[str], add_points: int, *, is_member: bool) -> None:
|
||||
def record_event_points(config: DakinySettings, users: Sequence[str], add_points: int, *, is_member: bool) -> None:
|
||||
"""
|
||||
Adds event points to all users listed.
|
||||
|
||||
@@ -502,7 +502,7 @@ async def edit_clan_message(
|
||||
session.commit()
|
||||
|
||||
|
||||
async def edit_clan_council_info(guild: nextcord.Guild, config: DakinyConfig) -> None:
|
||||
async def edit_clan_council_info(guild: nextcord.Guild, config: DakinySettings) -> None:
|
||||
"""
|
||||
Gets the winners of the elections and updates the permanent message that states the current council.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user