# Discord Bot Configuration DISCORD_TOKEN=your_bot_token_here MONITOR_GUILD_ID=your_guild_id_here TEXT_GUILD_ID=optional_text_guild_id TEXT_CHANNEL_ID=optional_text_channel_id # Recording Configuration RECORDINGS_DIR=./recordings RECORDING_SEGMENT_MS=5000 VERBOSE=false # Decoder Configuration DECODER_ROTATE_MS=5000 DECODER_COOLDOWN_MS=30000 # Audio Configuration AUDIO_STREAM_SILENCE_DURATION_MS=3000 PACKET_FILTER_MIN_SIZE=8 OPUS_FRAME_SIZE=960 AUDIO_SAMPLE_RATE=48000 AUDIO_CHANNELS=2 AVATAR_SIZE=64 # Webserver Configuration WEBSERVER_PORT=3000 # Connection Configuration VOICE_CONNECTION_TIMEOUT_MS=15000 RECONNECT_TIMEOUT_MS=5000 # Voice Recording Selection # VOICE_GUILD_ID falls back to legacy GUILD_ID when omitted. GUILD_ID=legacy_voice_guild_id VOICE_GUILD_ID=voice_guild_id VOICE_CHANNEL_ID=voice_channel_id # Logging Configuration LOG_LEVEL=info NODE_ENV=development # Moderation Configuration TELE_UPLOAD_URL=https://upload.asepharyana.my.id/api/upload ATTACHMENT_UPLOAD_TIMEOUT_MS=30000 ATTACHMENT_MAX_SIZE_MB=100 ATTACHMENT_RETRY_ATTEMPTS=3 BACKLOG_SYNC_HOURS=24 BACKLOG_SYNC_BATCH_SIZE=100 # AI Analysis Configuration AI_ANALYSIS_ENABLED=false AI_LLM_API_KEY=your_9router_key_here AI_LLM_BASE_URL=https://9router.asepharyana.my.id/v1 AI_LLM_MODEL=text # Vision model for image/video moderation (falls back to AI_LLM_MODEL if unset) AI_LLM_VISION_MODEL=multimodal # Max concurrent LLM API calls (default: 5) AI_LLM_MAX_CONCURRENT=5 # Maximum image dimension in pixels before resize for vision API (default: 1024) AI_LLM_IMAGE_MAX_DIMENSION=1024 # Maximum messages per text-only moderation batch (default: 20) AI_LLM_TEXT_BATCH_SIZE=20 # Timeout in ms for individual media analysis calls (default: 60000) AI_LLM_MEDIA_ANALYSIS_TIMEOUT_MS=60000 # AI Moderation Analysis Tuning (advanced) AI_ANALYSIS_DEBOUNCE_MS=500 AI_ANALYSIS_RECOVERY_INTERVAL_MS=15000 AI_ANALYSIS_ERROR_COOLDOWN_MS=30000 # Max messages fetched per conversation batch (default: 200) AI_ANALYSIS_MAX_BATCH_SIZE=200 AI_ANALYSIS_MAX_CONTEXT_TOKENS=8000 # Token budget for target messages specifically (default: 4000) AI_ANALYSIS_MAX_TARGET_TOKENS=4000 AI_ANALYSIS_CONTEXT_MESSAGE_LIMIT=20 # How long a conversation is locked while being processed (default: 120000ms) AI_ANALYSIS_PROCESSING_TIMEOUT_MS=120000 # Max concurrent individual-fallback jobs (default: 50) AI_ANALYSIS_INDIVIDUAL_MAX_CONCURRENT=50 # Consecutive errors before individual circuit breaker trips (default: 50) AI_ANALYSIS_INDIVIDUAL_CB_THRESHOLD=50 # OpenAI Moderation (optional separate provider) # OPENAI_MODERATION_API_KEY=your_key_here # OPENAI_MODERATION_BASE_URL=https://api.openai.com/v1 # OPENAI_MODERATION_MODEL=omni-moderation-latest # Admin ADMIN_PASSWORD=admin123 # Database Configuration (PostgreSQL) # Option 1: Use DATABASE_URL for connection string # DATABASE_URL=postgresql://user:password@localhost:5432/discord_bot # Option 2: Use individual connection parameters # POSTGRES_HOST=localhost # POSTGRES_PORT=5432 # POSTGRES_USER=postgres # POSTGRES_PASSWORD=your_password_here # POSTGRES_DB=discord_bot # Redis Configuration (queue + persistent KV store) # REDIS_URL=redis://localhost:6379 # PostgreSQL Connection Pool Configuration # POSTGRES_POOL_MIN=2 # POSTGRES_POOL_MAX=10 # Auto-Delete Configuration AUTO_DELETE_FLAGGED_ENABLED=true AUTO_DELETE_FLAGGED_DRY_RUN=true AUTO_DELETE_FLAGGED_DELAY_MS=0 AUTO_DELETE_MIN_CONFIDENCE=0.50 AUTO_DELETE_ALLOWED_SEVERITIES=critical,high,medium,low AUTO_DELETE_NOTIFY_USER=false # Optional: comma-separated channel/user IDs to exclude # AUTO_DELETE_EXCLUDED_CHANNEL_IDS= # AUTO_DELETE_EXCLUDED_USER_IDS= # Optional: comma-separated category filter (empty = all categories) # AUTO_DELETE_ALLOWED_CATEGORIES= # Optional: log channel ID for auto-delete actions # AUTO_DELETE_LOG_CHANNEL_ID= # Retention Configuration (0 = disabled) RETENTION_MESSAGES_DAYS=0 RETENTION_ATTACHMENTS_DAYS=0 RETENTION_VOICE_DAYS=0 # Cleanup interval in ms (default: 24h) RETENTION_CLEANUP_INTERVAL_MS=86400000 RETENTION_DRY_RUN=true # Database Migration Configuration # Safe default: run migrations on startup before the app accepts traffic. AUTO_MIGRATE_ON_STARTUP=true # Worker Pool Configuration # PISCINA_MAX_THREADS=4