diff --git a/src/conf.py b/src/conf.py index cf1bdb1..04b0d7c 100644 --- a/src/conf.py +++ b/src/conf.py @@ -1,4 +1,5 @@ import logging +import os import subprocess from pathlib import Path @@ -25,14 +26,22 @@ else: try: CONFIG = toml.load("config.toml") - CONFIG.setdefault("logging", {}) - CONFIG.setdefault("jimmy", {}) - CONFIG.setdefault("ollama", {}) - CONFIG.setdefault("screenshot", {}) - CONFIG.setdefault("responder", {}) - CONFIG.setdefault("quote_a", {"channel": None}) - CONFIG.setdefault("redis", {"host": "redis", "port": 6379, "decode_responses": True}) except FileNotFoundError: cwd = Path.cwd() - log.critical("Unable to locate config.toml in %s.", cwd, exc_info=True) - raise + 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("quote_a", {"channel": None}) +CONFIG.setdefault("redis", {"host": "redis", "port": 6379, "decode_responses": True}) + +if _t := os.getenv("JIMMY_TOKEN"): + log.info("Overriding config with token from $JIMMY_TOKEN.") + CONFIG["jimmy"]["token"] = _t diff --git a/src/main.py b/src/main.py index 5d16fba..0b22116 100644 --- a/src/main.py +++ b/src/main.py @@ -1,5 +1,6 @@ import asyncio import datetime +import glob import logging import random import shutil @@ -12,7 +13,6 @@ from threading import Event, Thread import discord import httpx -import uvicorn from discord.ext import commands from rich.console import Console from rich.logging import RichHandler @@ -118,14 +118,23 @@ bot = Client( intents=discord.Intents.all(), ) -for ext in ("ytdl", "net", "screenshot", "ollama", "ffmeta", "quote_quota", "auto_responder"): +for module in CONFIG["jimmy"].get("modules", ["cogs/*.py"]): try: - bot.load_extension(f"cogs.{ext}") + bot.load_extension(module) + except discord.ExtensionNotFound: + log.debug("%r does not exist - trying as glob pattern", module) + for ext in glob.glob(module, recursive=True): + ext = ext.replace("/", ".")[:-3] # foo/bar.py -> foo.bar + try: + bot.load_extension(ext) + except discord.ExtensionError as e: + log.error(f"Failed to load extension {ext}", exc_info=e) + else: + log.info(f"Loaded extension {ext}") except discord.ExtensionError as e: - log.error(f"Failed to load extension cogs.{ext}", exc_info=e) + log.error(f"Failed to load extension {module}", exc_info=e) else: - log.info(f"Loaded extension cogs.{ext}") - + log.info(f"Loaded extension {module}") @bot.event async def on_ready():