1
0
Fork 0
forked from waifu/kemoverse
kemoverse/bot/config.py
2025-06-07 19:23:17 +01:00

58 lines
1.8 KiB
Python

'''Essentials for the bot to function'''
import configparser
import json
from os import environ, path
class ConfigError(Exception):
'''Could not find config file'''
def get_config_file() -> str:
'''Gets the path to the config file in the current environment'''
env: str | None = environ.get('KEMOVERSE_ENV')
if not env:
raise ConfigError('Error: KEMOVERSE_ENV is unset')
if not (env in ['prod', 'dev']):
raise ConfigError(f'Error: Invalid environment: {env}')
config_path: str = f'config_{env}.ini'
if not path.isfile(config_path):
raise ConfigError(f'Could not find {config_path}')
return config_path
def get_rarity_to_weight(
config_section: configparser.SectionProxy) -> dict[int, float]:
"""Parses Rarity_X keys from config and returns a {rarity: weight} dict."""
rarity_weights = {}
for key, value in config_section.items():
if key.startswith("rarity_"):
rarity = int(key.removeprefix("rarity_"))
rarity_weights[rarity] = float(value)
return rarity_weights
config = configparser.ConfigParser()
config.read(get_config_file())
# Username for the bot
USER = config['credentials']['User'].lower()
# API key for the bot
KEY = config['credentials']['Token']
# Bot's Misskey instance URL
INSTANCE = config['credentials']['Instance'].lower()
# Fedi handles in the traditional 'user@domain.tld' style, allows these users
# to use extra admin exclusive commands with the bot
ADMINS = json.loads(config['application']['DefaultAdmins'])
# SQLite Database location
DB_PATH = config['application']['DatabaseLocation']
NOTIFICATION_POLL_INTERVAL = int(config['notification']['PollInterval'])
NOTIFICATION_BATCH_SIZE = int(config['notification']['BatchSize'])
GACHA_ROLL_INTERVAL = int(config['gacha']['RollInterval'])
RARITY_TO_WEIGHT = get_rarity_to_weight(config['gacha'])