import json import logging __all__ = ["Config"] from typing import List, Dict, Union import discord from tuxbot.core.data_manager import data_path log = logging.getLogger("tuxbot.config") class Config: def __init__( self, cog_instance: str = None ): self._cog_instance = cog_instance def __getitem__(self, item) -> Dict: path = data_path(self._cog_instance) if item != 'core': path = path / 'cogs' / item else: path /= 'core' settings_file = path / 'settings.json' if not settings_file.exists(): raise FileNotFoundError(f"Unable to find settings file " f"'{settings_file}'") else: with settings_file.open('r') as f: return json.load(f) def __call__(self, item): return self.__getitem__(item) def owners_id(self) -> List[int]: return self.__getitem__('core').get('owners_id') def token(self) -> str: return self.__getitem__('core').get('token') def get_prefixes(self, guild: discord.Guild) -> List[str]: core = self.__getitem__('core') prefixes = core\ .get('guild', {}) \ .get(guild.id, {}) \ .get('prefixes', []) return prefixes def get_blacklist(self, key: str) -> List[Union[str, int]]: core = self.__getitem__('core') blacklist = core \ .get('blacklist', {}) \ .get(key, []) return blacklist def update(self, cog_name, item, value) -> dict: datas = self.__getitem__(cog_name) path = data_path(self._cog_instance) datas[item] = value if cog_name != 'core': path = path / 'cogs' / cog_name else: path /= 'core' settings_file = path / 'settings.json' with settings_file.open('w') as f: json.dump(datas, f, indent=4) return datas