mirror of
https://github.com/wlinator/luminara.git
synced 2024-10-02 22:23:13 +00:00
136 lines
4.6 KiB
Python
136 lines
4.6 KiB
Python
|
from typing import Any
|
||
|
|
||
|
from db import database
|
||
|
|
||
|
|
||
|
class GuildConfig:
|
||
|
def __init__(self, guild_id: int) -> None:
|
||
|
self.guild_id: int = guild_id
|
||
|
self.birthday_channel_id: int | None = None
|
||
|
self.command_channel_id: int | None = None
|
||
|
self.intro_channel_id: int | None = None
|
||
|
self.welcome_channel_id: int | None = None
|
||
|
self.welcome_message: str | None = None
|
||
|
self.boost_channel_id: int | None = None
|
||
|
self.boost_message: str | None = None
|
||
|
self.boost_image_url: str | None = None
|
||
|
self.level_channel_id: int | None = None
|
||
|
self.level_message: str | None = None
|
||
|
self.level_message_type: int = 1
|
||
|
|
||
|
self.fetch_or_create_config()
|
||
|
|
||
|
def fetch_or_create_config(self) -> None:
|
||
|
"""
|
||
|
Gets a Guild Config from the database or inserts a new row if it doesn't exist yet.
|
||
|
"""
|
||
|
query: str = """
|
||
|
SELECT birthday_channel_id, command_channel_id, intro_channel_id,
|
||
|
welcome_channel_id, welcome_message, boost_channel_id,
|
||
|
boost_message, boost_image_url, level_channel_id,
|
||
|
level_message, level_message_type
|
||
|
FROM guild_config WHERE guild_id = %s
|
||
|
"""
|
||
|
|
||
|
try:
|
||
|
self._extracted_from_fetch_or_create_config_14(query)
|
||
|
except (IndexError, TypeError):
|
||
|
# No record found for the specified guild_id
|
||
|
query = "INSERT INTO guild_config (guild_id) VALUES (%s)"
|
||
|
database.execute_query(query, (self.guild_id,))
|
||
|
|
||
|
# TODO Rename this here and in `fetch_or_create_config`
|
||
|
def _extracted_from_fetch_or_create_config_14(self, query: str) -> None:
|
||
|
result: tuple[Any, ...] = database.select_query(query, (self.guild_id,))[0]
|
||
|
(
|
||
|
self.birthday_channel_id,
|
||
|
self.command_channel_id,
|
||
|
self.intro_channel_id,
|
||
|
self.welcome_channel_id,
|
||
|
self.welcome_message,
|
||
|
self.boost_channel_id,
|
||
|
self.boost_message,
|
||
|
self.boost_image_url,
|
||
|
self.level_channel_id,
|
||
|
self.level_message,
|
||
|
self.level_message_type,
|
||
|
) = result
|
||
|
|
||
|
def push(self) -> None:
|
||
|
query: str = """
|
||
|
UPDATE guild_config
|
||
|
SET
|
||
|
birthday_channel_id = %s,
|
||
|
command_channel_id = %s,
|
||
|
intro_channel_id = %s,
|
||
|
welcome_channel_id = %s,
|
||
|
welcome_message = %s,
|
||
|
boost_channel_id = %s,
|
||
|
boost_message = %s,
|
||
|
boost_image_url = %s,
|
||
|
level_channel_id = %s,
|
||
|
level_message = %s,
|
||
|
level_message_type = %s
|
||
|
WHERE guild_id = %s;
|
||
|
"""
|
||
|
|
||
|
database.execute_query(
|
||
|
query,
|
||
|
(
|
||
|
self.birthday_channel_id,
|
||
|
self.command_channel_id,
|
||
|
self.intro_channel_id,
|
||
|
self.welcome_channel_id,
|
||
|
self.welcome_message,
|
||
|
self.boost_channel_id,
|
||
|
self.boost_message,
|
||
|
self.boost_image_url,
|
||
|
self.level_channel_id,
|
||
|
self.level_message,
|
||
|
self.level_message_type,
|
||
|
self.guild_id,
|
||
|
),
|
||
|
)
|
||
|
|
||
|
@staticmethod
|
||
|
def get_prefix(message: Any) -> str:
|
||
|
"""
|
||
|
Gets the prefix from a given guild.
|
||
|
This function is done as static method to make the prefix fetch process faster.
|
||
|
"""
|
||
|
query: str = """
|
||
|
SELECT prefix
|
||
|
FROM guild_config
|
||
|
WHERE guild_id = %s
|
||
|
"""
|
||
|
|
||
|
prefix: str | None = database.select_query_one(
|
||
|
query,
|
||
|
(message.guild.id if message.guild else None,),
|
||
|
)
|
||
|
|
||
|
return prefix or "."
|
||
|
|
||
|
@staticmethod
|
||
|
def get_prefix_from_guild_id(guild_id: int) -> str:
|
||
|
query: str = """
|
||
|
SELECT prefix
|
||
|
FROM guild_config
|
||
|
WHERE guild_id = %s
|
||
|
"""
|
||
|
|
||
|
return database.select_query_one(query, (guild_id,)) or "."
|
||
|
|
||
|
@staticmethod
|
||
|
def set_prefix(guild_id: int, prefix: str) -> None:
|
||
|
"""
|
||
|
Sets the prefix for a given guild.
|
||
|
"""
|
||
|
query: str = """
|
||
|
UPDATE guild_config
|
||
|
SET prefix = %s
|
||
|
WHERE guild_id = %s;
|
||
|
"""
|
||
|
|
||
|
database.execute_query(query, (prefix, guild_id))
|