Properly auto-load cogs
All checks were successful
Build and Publish Jimmy.2 / build_and_publish (push) Successful in 7s

This commit is contained in:
Nexus 2024-04-29 01:41:02 +01:00
parent 01d61248d5
commit a44556626d
Signed by: nex
GPG key ID: 0FA334385D0B689F
2 changed files with 33 additions and 15 deletions

View file

@ -1,4 +1,5 @@
import logging import logging
import os
import subprocess import subprocess
from pathlib import Path from pathlib import Path
@ -25,14 +26,22 @@ else:
try: try:
CONFIG = toml.load("config.toml") 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: except FileNotFoundError:
cwd = Path.cwd() cwd = Path.cwd()
log.critical("Unable to locate config.toml in %s.", cwd, exc_info=True) log.critical(
raise "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

View file

@ -1,5 +1,6 @@
import asyncio import asyncio
import datetime import datetime
import glob
import logging import logging
import random import random
import shutil import shutil
@ -12,7 +13,6 @@ from threading import Event, Thread
import discord import discord
import httpx import httpx
import uvicorn
from discord.ext import commands from discord.ext import commands
from rich.console import Console from rich.console import Console
from rich.logging import RichHandler from rich.logging import RichHandler
@ -118,14 +118,23 @@ bot = Client(
intents=discord.Intents.all(), 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: 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: 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: else:
log.info(f"Loaded extension cogs.{ext}") log.info(f"Loaded extension {module}")
@bot.event @bot.event
async def on_ready(): async def on_ready():