import logging import os import subprocess from pathlib import Path import tomllib log = logging.getLogger("jimmy.autoconf") if (Path.cwd() / ".git").exists(): try: log.debug("Attempting to auto-detect running version using git.") VERSION = subprocess.run( ["git", "rev-parse", "--short", "HEAD"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, text=True, check=True, ).stdout.strip() except subprocess.CalledProcessError: log.debug("Unable to auto-detect running version using git.", exc_info=True) VERSION = "unknown" else: log.debug("Unable to auto-detect running version using git, no .git directory exists.") VERSION = "unknown" try: with open("config.toml", "rb") as file: CONFIG = tomllib.load(file) except FileNotFoundError: cwd = Path.cwd() log.critical( "Unable to locate config.toml in %s. Using default configuration. Good luck!", cwd, exc_info=True ) CONFIG = {} CONFIG.setdefault("logging", {}) CONFIG.setdefault("jimmy", {}) CONFIG.setdefault("ollama", {}) CONFIG.setdefault("screenshot", {}) CONFIG.setdefault("responder", {}) CONFIG.setdefault("network", {}) CONFIG.setdefault("quote_a", {"channel": None}) CONFIG.setdefault("redis", {"host": "redis", "port": 6379, "decode_responses": True}) CONFIG.setdefault("starboard", {}) if CONFIG["redis"].pop("db", None) is not None: log.warning("`redis.db` cannot be manually specified, each cog that uses redis has its own db value! Value ignored") if CONFIG["redis"].pop("no_ping", None) is not None: log.warning("`redis.no_ping` was deprecated after 808D621F. Ping is now always mandatory.") CONFIG["redis"]["decode_responses"] = True for logger_name in CONFIG["logging"].get("verbose", []): _l = logging.getLogger(logger_name) _l.setLevel(logging.DEBUG) _l.debug("Logging level for this logger was forced to DEBUG by config.") if _t := os.getenv("JIMMY_TOKEN"): log.info("Overriding config with token from $JIMMY_TOKEN.") CONFIG["jimmy"]["token"] = _t