diff --git a/bot.py b/bot.py index 921a64c..ab2b7d3 100644 --- a/bot.py +++ b/bot.py @@ -11,9 +11,14 @@ import pathlib load_dotenv() TOKEN = os.getenv('DISCORD_TOKEN') -# Load settings (we won't overwrite your file) +# Where to read settings from +CONFIG_PATH = os.getenv('SHAI_CONFIG', '/config/settings.conf') + +# Load settings config = ConfigParser() -config.read('settings.conf') +read_ok = config.read(CONFIG_PATH) +if not read_ok: + print(f"[Config] WARNING: could not read config at {CONFIG_PATH}; using in-image defaults where possible.") # Intents (enable Members + Message Content in Dev Portal) intents = discord.Intents.default() @@ -24,9 +29,12 @@ intents.reactions = True intents.emojis_and_stickers = True intents.voice_states = True +# Data file path (prefer INI, else env, else sensible default) +data_file = config['DEFAULT'].get('data_file', os.getenv('SHAI_DATA', '/data/data.json')) + bot = commands.Bot(command_prefix='!', intents=intents) bot.config = config -bot.data_manager = DataManager(config['DEFAULT']['data_file']) +bot.data_manager = DataManager(data_file) async def _guild_selfcheck(g: discord.Guild, cfg): problems = [] diff --git a/data_manager.py b/data_manager.py index b2a28b9..453d7e4 100644 --- a/data_manager.py +++ b/data_manager.py @@ -39,6 +39,8 @@ class DataManager: return default def _safe_write(self, data: dict): + # ensure parent dir exists + os.makedirs(os.path.dirname(self.json_path) or ".", exist_ok=True) tmp = self.json_path + ".tmp" with open(tmp, 'w') as f: json.dump(data, f, indent=4) diff --git a/docker-compose.yml b/docker-compose.yml index bc56a3e..8590ea3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,20 +1,16 @@ -version: "3.8" - services: shaiwatcher: - build: - context: . - dockerfile: dockerfile - container_name: shaiwatcher + build: . restart: unless-stopped environment: - DISCORD_TOKEN=${DISCORD_TOKEN} - # optional: set timezone - - TZ=UTC + # optional – only if you want non-default locations + # - SHAI_CONFIG=/config/settings.conf + # - SHAI_DATA=/data/data.json volumes: - # Persist your JSON data here - - shaiwatcher_data:/app/data - # use your repo’s settings.conf at runtime - - ./settings.conf:/app/settings.conf:ro + - ./config:/config # will contain settings.conf + - shaiwatcher_data:/data # persistent data.json + # if you deploy to a remote docker host via Portainer: no extra ports needed + volumes: shaiwatcher_data: diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100644 index 0000000..50042b1 --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,30 @@ +#!/bin/sh +set -e + +# Defaults (can be overridden) +: "${SHAI_CONFIG:=/config/settings.conf}" +: "${SHAI_DATA:=/data/data.json}" + +# Seed /config/settings.conf on first run if it doesn't exist +if [ ! -f "$SHAI_CONFIG" ]; then + mkdir -p "$(dirname "$SHAI_CONFIG")" + if [ -f /app/example/settings.conf ]; then + cp /app/example/settings.conf "$SHAI_CONFIG" + echo "Seeded default settings to $SHAI_CONFIG" + else + # Fall back: generate minimal config so the app can boot + cat > "$SHAI_CONFIG" <