Add STARTUP_ANNOUNCEMENT_CHANNEL_ID to control where startup announcements are sent. Changes: - New config: STARTUP_ANNOUNCEMENT_CHANNEL_ID - Announcements sent only to specified channel - Falls back to first CHANNEL_ID if not set - Prevents announcement spam in all stock update channels 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
import os
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
|
|
class Config:
|
|
"""Application configuration loaded from environment variables."""
|
|
|
|
# Discord configuration
|
|
DISCORD_TOKEN = os.getenv('DISCORD_TOKEN')
|
|
CHANNEL_ID = os.getenv('CHANNEL_ID')
|
|
CHANNEL_IDS = [id.strip() for id in os.getenv('CHANNEL_ID', '').split(',') if id.strip()]
|
|
COMMAND_PREFIX = os.getenv('COMMAND_PREFIX', '!')
|
|
STARTUP_ANNOUNCEMENT = os.getenv('STARTUP_ANNOUNCEMENT', '')
|
|
STARTUP_ANNOUNCEMENT_CHANNEL_ID = os.getenv('STARTUP_ANNOUNCEMENT_CHANNEL_ID', '')
|
|
|
|
# Stock configuration
|
|
PRIMARY_TICKER = os.getenv('PRIMARY_TICKER', 'PYPL')
|
|
STOCK_API_PROVIDER = os.getenv('STOCK_API_PROVIDER', 'finnhub') # 'yahoo' or 'finnhub'
|
|
FINNHUB_API_KEY = os.getenv('FINNHUB_API_KEY')
|
|
|
|
# Scheduling configuration
|
|
UPDATE_INTERVAL_HOURS = int(os.getenv('UPDATE_INTERVAL_HOURS', '1'))
|
|
|
|
@classmethod
|
|
def validate(cls) -> bool:
|
|
"""
|
|
Validate that required configuration values are present.
|
|
|
|
Returns:
|
|
True if configuration is valid, False otherwise
|
|
"""
|
|
if not cls.DISCORD_TOKEN:
|
|
print("ERROR: DISCORD_TOKEN not set in environment")
|
|
return False
|
|
|
|
if not cls.CHANNEL_ID:
|
|
print("ERROR: CHANNEL_ID not set in environment")
|
|
return False
|
|
|
|
if not cls.CHANNEL_IDS:
|
|
print("ERROR: No valid channel IDs found in CHANNEL_ID")
|
|
return False
|
|
|
|
try:
|
|
for channel_id in cls.CHANNEL_IDS:
|
|
int(channel_id)
|
|
except ValueError:
|
|
print("ERROR: CHANNEL_ID must contain numeric Discord channel IDs (comma-separated)")
|
|
return False
|
|
|
|
if cls.STOCK_API_PROVIDER == 'finnhub' and not cls.FINNHUB_API_KEY:
|
|
print("ERROR: FINNHUB_API_KEY not set in environment (required when STOCK_API_PROVIDER=finnhub)")
|
|
return False
|
|
|
|
return True
|