From 5af4311719bf019c24b81df73fb3947f62fc85f6 Mon Sep 17 00:00:00 2001 From: Slfhstd Date: Wed, 25 Feb 2026 22:18:02 +0000 Subject: [PATCH] config via docker environment variables --- docker-compose.yml | 2 ++ example.env | 17 ++++++++++++++ flairtimercomment.py | 55 +++++++++++++++++++++++++++++--------------- 3 files changed, 56 insertions(+), 18 deletions(-) create mode 100644 example.env diff --git a/docker-compose.yml b/docker-compose.yml index 5609fee..e933c29 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,6 +3,8 @@ services: image: ghcr.io/slfhstd/flairtimercomment:v0.0.1 container_name: bot-ftc-dev restart: unless-stopped + env_file: + - .env volumes: - /docker/data/flairtimercomment:/app/config diff --git a/example.env b/example.env new file mode 100644 index 0000000..bb71cc1 --- /dev/null +++ b/example.env @@ -0,0 +1,17 @@ +# Example .env file for FlairTimerComment +# Fill in your Reddit API and bot settings + +USERNAME=your_reddit_username +PASSWORD=your_reddit_password +CLIENT_ID=your_client_id +CLIENT_SECRET=your_client_secret +USER_AGENT=Flair Timer Comment Bot + +SUBREDDIT=your_subreddit +FLAIR_TEXT=Waiting for OP +INTERVAL=30 +HOURS=48 +SEARCHLIMIT=600 +COMMENT_MESSAGE=Your comment message here +LOCK_POST=False +DISTINGUISH_STICKY=False diff --git a/flairtimercomment.py b/flairtimercomment.py index 12257ab..7402975 100644 --- a/flairtimercomment.py +++ b/flairtimercomment.py @@ -1,33 +1,52 @@ -import praw + import praw import os import os.path import json import time -# Create default config/config.py if it doesn't exist + +# Helper to get env var or default +def env_or_default(var, default): + return os.environ.get(var, default) + +# Create config/config.py from environment if missing or empty default_config_path = os.path.join('config', 'config.py') -if not os.path.exists(default_config_path): +def write_config_from_env(): os.makedirs('config', exist_ok=True) with open(default_config_path, 'w') as f: f.write( - '# Reddit API credentials\n' - 'username = ""\n' - 'password = ""\n' - 'client_id = ""\n' - 'client_secret = ""\n' - 'user_agent = "Flair Timer Comment Bot" # Must be unique and descriptive\n' + f'username = "{env_or_default("USERNAME", "")}"\n' + f'password = "{env_or_default("PASSWORD", "")}"\n' + f'client_id = "{env_or_default("CLIENT_ID", "")}"\n' + f'client_secret = "{env_or_default("CLIENT_SECRET", "")}"\n' + f'user_agent = "{env_or_default("USER_AGENT", "Flair Timer Comment Bot")}"\n' '\n' - '# Subreddits\n' - 'subreddit = ""\n' - 'flair_text = "Waiting for OP"\n' - 'interval = 30\n' - 'hours = 48\n' - 'searchlimit = 600\n' - 'comment_message = ""\n' - 'lock_post = False\n' - 'distinguish_sticky = False\n' + f'subreddit = "{env_or_default("SUBREDDIT", "")}"\n' + f'flair_text = "{env_or_default("FLAIR_TEXT", "Waiting for OP")}"\n' + f'interval = {env_or_default("INTERVAL", "30")}\n' + f'hours = {env_or_default("HOURS", "48")}\n' + f'searchlimit = {env_or_default("SEARCHLIMIT", "600")}\n' + f'comment_message = "{env_or_default("COMMENT_MESSAGE", "")}"\n' + f'lock_post = {env_or_default("LOCK_POST", "False")}\n' + f'distinguish_sticky = {env_or_default("DISTINGUISH_STICKY", "False")}\n' ) + print(f"Configuration file auto-populated from environment variables at {default_config_path}.") + +# Check if config file exists and is non-empty, else generate from env +def config_needs_populating(): + if not os.path.exists(default_config_path): + return True + try: + with open(default_config_path, 'r') as f: + content = f.read().strip() + return len(content) == 0 + except Exception: + return True + +if config_needs_populating(): + write_config_from_env() + # Optionally exit after populating, or continue to run import config def authentication():