# -*- coding: utf-8 -*- """Essential set of functions needed for discord/telegram bots and other types of apps""" from types import NoneType from typing import Union from modules.functions import jsonLoad, jsonSave from os import sep def configGet(key: str, *args: str) -> any: """Get value of the config key ### Args: * key (str): The last key of the keys path. * *args (str): Path to key like: dict[args][key]. ### Returns: * any: Value of provided key """ this_dict = jsonLoad("config.json") this_key = this_dict for dict_key in args: this_key = this_key[dict_key] return this_key[key] def configAppend(key: str, value: Union[str, float, int, bool, dict, list, NoneType], *args: str) -> None: """Set key to a value ### Args: * key (str): The last key of the keys path. * value (Union[str, float, int, bool, dict, list, NoneType]): Some needed value. * *args (str): Path to key like: dict[args][key]. """ this_dict = jsonLoad("config.json") string = "this_dict" for arg in args: string += f'["{arg}"]' if type(value) in [str]: string += f'["{key}"].append("{value}")' else: string += f'["{key}"].append({value})' exec(string) jsonSave(this_dict, "config.json") return def configRemove(key: str, value: Union[str, float, int, bool, dict, list, NoneType]) -> None: """Remove value from config's list key ### Args: * key (str): The last key of the keys path. * value (Union[str, float, int, bool, dict, list, NoneType]): Some needed value. """ config = jsonLoad("config.json") config[key].remove(value) jsonSave("config.json", config) def locale(key: str, *args: str, locale=configGet("locale")) -> str: """Get value of locale string ### Args: * key (str): The last key of the locale's keys path. * *args (list): Path to key like: dict[args][key]. * locale (str): Locale to looked up in. Defaults to config's locale value. ### Returns: * any: Value of provided locale key """ if (locale == None): locale = configGet("locale") try: this_dict = jsonLoad(f'locale{sep}{locale}.json') except FileNotFoundError: try: this_dict = jsonLoad(f'locale{sep}{configGet("locale")}.json') except FileNotFoundError: return f'⚠ Locale in config is invalid: could not get "{key}" in {str(args)} from locale "{locale}"' this_key = this_dict for dict_key in args: this_key = this_key[dict_key] try: return this_key[key] except KeyError: return f'⚠ Locale in config is invalid: could not get "{key}" in {str(args)} from locale "{locale}"' def userSet(userid: Union[str, int], key: str, value: Union[str, float, int, bool, dict, list, NoneType]) -> None: """Set user's variable ### Args: * userid (Union[str, int]): ID of a user. * key (str): Key of a user's variable. * value (Union[str, float, int, bool, dict, list, NoneType]): Some needed value. """ user = jsonLoad(f"data{sep}users{sep}{userid}.json") user[key] = value jsonSave(f"data{sep}users{sep}{userid}.json", user) def userGet(userid: Union[str, int], key: str) -> any: """Get user's variable ### Args: * userid (Union[str, int]): ID of a user. * key (str): Key of a user's variable. ### Returns: * any: Value of requested key or None """ try: return jsonLoad(f"data{sep}users{sep}{userid}.json")[key] except KeyError: return None except FileNotFoundError: return None def userClear(userid: Union[str, int], key: str) -> None: """Clear user's variable ### Args: * userid (Union[str, int]): ID of a user. * key (str): Key of a user's variable. """ try: user = jsonLoad(f"data{sep}users{sep}{userid}.json") del user[key] jsonSave(f"data{sep}users{sep}{userid}.json", user) except KeyError: pass