mirror of
https://github.com/wlinator/luminara.git
synced 2024-10-02 20:23:12 +00:00
118 lines
5 KiB
Python
118 lines
5 KiB
Python
import os
|
|
from typing import Optional, Set, List, Dict
|
|
import yaml
|
|
import json
|
|
from functools import lru_cache
|
|
|
|
|
|
class _parser:
|
|
@lru_cache(maxsize=1048576) # Approximately 1MB
|
|
def read_yaml(self, path):
|
|
return self._read_file(f"settings/{path}.yaml", yaml.safe_load)
|
|
|
|
@lru_cache(maxsize=1048576) # Approximately 1MB
|
|
def read_json(self, path):
|
|
return self._read_file(f"settings/{path}.json", json.load)
|
|
|
|
def _read_file(self, file_path, load_func):
|
|
with open(file_path) as file:
|
|
return load_func(file)
|
|
|
|
|
|
class Constants:
|
|
_p = _parser()
|
|
_settings = _p.read_yaml("settings")
|
|
|
|
# bot credentials (.env file)
|
|
TOKEN: Optional[str] = os.environ.get("TOKEN")
|
|
INSTANCE: Optional[str] = os.environ.get("INSTANCE")
|
|
XP_GAIN_PER_MESSAGE: int = int(os.environ.get("XP_GAIN_PER_MESSAGE", 1))
|
|
XP_GAIN_COOLDOWN: int = int(os.environ.get("XP_GAIN_COOLDOWN", 8))
|
|
DBX_TOKEN: Optional[str] = os.environ.get("DBX_OAUTH2_REFRESH_TOKEN")
|
|
DBX_APP_KEY: Optional[str] = os.environ.get("DBX_APP_KEY")
|
|
DBX_APP_SECRET: Optional[str] = os.environ.get("DBX_APP_SECRET")
|
|
MARIADB_USER: Optional[str] = os.environ.get("MARIADB_USER")
|
|
MARIADB_PASSWORD: Optional[str] = os.environ.get("MARIADB_PASSWORD")
|
|
MARIADB_ROOT_PASSWORD: Optional[str] = os.environ.get("MARIADB_ROOT_PASSWORD")
|
|
MARIADB_DATABASE: Optional[str] = os.environ.get("MARIADB_DATABASE")
|
|
|
|
OWNER_IDS: Optional[Set[int]] = (
|
|
{int(id.strip()) for id in os.environ.get("OWNER_IDS", "").split(",") if id}
|
|
if "OWNER_IDS" in os.environ
|
|
else None
|
|
)
|
|
|
|
# metadata
|
|
TITLE: str = _settings["info"]["title"]
|
|
AUTHOR: str = _settings["info"]["author"]
|
|
LICENSE: str = _settings["info"]["license"]
|
|
VERSION: str = _settings["info"]["version"]
|
|
REPOSITORY_URL: str = _settings["info"]["repository_url"]
|
|
|
|
# images
|
|
ALLOWED_IMAGE_EXTENSIONS: List[str] = _settings["images"][
|
|
"allowed_image_extensions"
|
|
]
|
|
BIRTHDAY_GIF_URL: str = _settings["images"]["birthday_gif_url"]
|
|
|
|
# colors
|
|
COLOR_DEFAULT: int = _settings["colors"]["color_default"]
|
|
COLOR_WARNING: int = _settings["colors"]["color_warning"]
|
|
COLOR_ERROR: int = _settings["colors"]["color_error"]
|
|
|
|
# economy
|
|
DAILY_REWARD: int = _settings["economy"]["daily_reward"]
|
|
BLACKJACK_MULTIPLIER: float = _settings["economy"]["blackjack_multiplier"]
|
|
BLACKJACK_HIT_EMOJI: str = _settings["economy"]["blackjack_hit_emoji"]
|
|
BLACKJACK_STAND_EMOJI: str = _settings["economy"]["blackjack_stand_emoji"]
|
|
SLOTS_MULTIPLIERS: Dict[str, float] = _settings["economy"]["slots_multipliers"]
|
|
|
|
# art from git repository
|
|
_fetch_url: str = _settings["art"]["fetch_url"]
|
|
|
|
LUMI_LOGO_OPAQUE: str = _fetch_url + _settings["art"]["logo"]["opaque"]
|
|
LUMI_LOGO_TRANSPARENT: str = _fetch_url + _settings["art"]["logo"]["transparent"]
|
|
BOOST_ICON: str = _fetch_url + _settings["art"]["icons"]["boost"]
|
|
CHECK_ICON: str = _fetch_url + _settings["art"]["icons"]["check"]
|
|
CROSS_ICON: str = _fetch_url + _settings["art"]["icons"]["cross"]
|
|
EXCLAIM_ICON: str = _fetch_url + _settings["art"]["icons"]["exclaim"]
|
|
HAMMER_ICON: str = _fetch_url + _settings["art"]["icons"]["hammer"]
|
|
MONEY_BAG_ICON: str = _fetch_url + _settings["art"]["icons"]["money_bag"]
|
|
MONEY_COINS_ICON: str = _fetch_url + _settings["art"]["icons"]["money_coins"]
|
|
QUESTION_ICON: str = _fetch_url + _settings["art"]["icons"]["question"]
|
|
STREAK_ICON: str = _fetch_url + _settings["art"]["icons"]["streak"]
|
|
STREAK_BRONZE_ICON: str = _fetch_url + _settings["art"]["icons"]["streak_bronze"]
|
|
STREAK_GOLD_ICON: str = _fetch_url + _settings["art"]["icons"]["streak_gold"]
|
|
STREAK_SILVER_ICON: str = _fetch_url + _settings["art"]["icons"]["streak_silver"]
|
|
WARNING_ICON: str = _fetch_url + _settings["art"]["icons"]["warning"]
|
|
|
|
# art from imgur
|
|
FLOWERS_ART: str = _settings["art"]["juicybblue"]["flowers"]
|
|
TEAPOT_ART: str = _settings["art"]["juicybblue"]["teapot"]
|
|
MUFFIN_ART: str = _settings["art"]["juicybblue"]["muffin"]
|
|
CLOUD_ART: str = _settings["art"]["other"]["cloud"]
|
|
TROPHY_ART: str = _settings["art"]["other"]["trophy"]
|
|
|
|
# emotes
|
|
EMOTES_SERVER_ID: int = _settings["emotes"]["guild_id"]
|
|
EMOTE_IDS: Dict[str, int] = _settings["emotes"]["emote_ids"]
|
|
|
|
# introductions (currently only usable in ONE guild)
|
|
INTRODUCTIONS_GUILD_ID: int = _settings["introductions"]["intro_guild_id"]
|
|
INTRODUCTIONS_CHANNEL_ID: int = _settings["introductions"]["intro_channel_id"]
|
|
INTRODUCTIONS_QUESTION_MAPPING: Dict[str, str] = _settings["introductions"][
|
|
"intro_question_mapping"
|
|
]
|
|
|
|
# Response strings
|
|
# TODO: Implement switching between languages
|
|
STRINGS = _p.read_json("responses/strings.en-US")
|
|
LEVEL_MESSAGES = _p.read_json("responses/levels.en-US")
|
|
|
|
# birthday messages
|
|
_bday = _p.read_json("responses/bdays.en-US")
|
|
BIRTHDAY_MESSAGES = _bday["birthday_messages"]
|
|
BIRTHDAY_MONTHS = _bday["months"]
|
|
|
|
|
|
CONST = Constants()
|