# GuardDen Migration Guide: Discord Commands to File-Based Configuration This guide explains how to migrate from Discord command-based configuration to the new file-based YAML configuration system. ## Why Migrate? The new file-based configuration system offers several advantages: - **✅ Version Control**: Track configuration changes with Git - **✅ No Discord Dependencies**: Configure without being in Discord - **✅ Backup & Restore**: Easy configuration backups and restoration - **✅ Hot-Reloading**: Changes apply without bot restarts - **✅ Better Organization**: Clean, structured configuration files - **✅ Schema Validation**: Automatic error checking and prevention - **✅ Bulk Operations**: Configure multiple servers efficiently ## Migration Overview ### Phase 1: Preparation 1. ✅ Update GuardDen to the latest version 2. ✅ Install new dependencies: `pip install -e ".[dev,ai]"` 3. ✅ Backup your current configuration (optional but recommended) ### Phase 2: Export Existing Settings 4. ✅ Run the migration tool to export Discord settings to files 5. ✅ Verify migration results 6. ✅ Review and customize exported configurations ### Phase 3: Switch to File-Based Configuration 7. ✅ Test the new configuration system 8. ✅ (Optional) Clean up database configurations ## Step-by-Step Migration ### Step 1: Update Dependencies ```bash # Install new required packages pip install -e ".[dev,ai]" # Or if you prefer individual packages: pip install pyyaml jsonschema watchfiles ``` ### Step 2: Run Migration Tool Export your existing Discord command settings to YAML files: ```bash # Export all guild configurations from database to files python -m guardden.cli.config migrate from-database # This will create files like: # config/guilds/guild-123456789.yml # config/guilds/guild-987654321.yml # etc. ``` **Migration Output Example:** ``` 🔄 Starting migration from database to files... 📦 Existing files will be backed up 📊 Migration Results: ✅ Migrated: 3 guilds ❌ Failed: 0 guilds ⏭️ Skipped: 0 guilds 📝 Banned words migrated: 45 ✅ Successfully migrated guilds: • 123456789: My Gaming Server (12 banned words) • 987654321: Friends Chat (8 banned words) • 555666777: Test Server (0 banned words) ``` ### Step 3: Verify Migration Check that the migration was successful: ```bash # Verify all guilds python -m guardden.cli.config migrate verify # Or verify specific guilds python -m guardden.cli.config migrate verify 123456789 987654321 ``` ### Step 4: Review Generated Configurations Examine the generated configuration files: ```bash # List all configurations python -m guardden.cli.config guild list # Validate configurations python -m guardden.cli.config guild validate ``` **Example Generated Configuration:** ```yaml # config/guilds/guild-123456789.yml guild_id: 123456789 name: "My Gaming Server" owner_id: 987654321 premium: false settings: general: prefix: "!" locale: "en" ai_moderation: enabled: true sensitivity: 80 nsfw_only_filtering: false # ← Your new NSFW-only feature! confidence_threshold: 0.7 automod: message_rate_limit: 5 scam_allowlist: - "discord.com" - "github.com" # Migrated banned words (if any) banned_words: - pattern: "spam" action: delete is_regex: false reason: "Anti-spam filter" ``` ### Step 5: Customize Your Configuration Now you can edit the YAML files directly or use the CLI: ```bash # Enable NSFW-only filtering (only block sexual content) python -m guardden.cli.config guild edit 123456789 ai_moderation.nsfw_only_filtering true # Adjust AI sensitivity python -m guardden.cli.config guild edit 123456789 ai_moderation.sensitivity 75 # Validate changes python -m guardden.cli.config guild validate 123456789 ``` **Or edit files directly:** ```yaml # Edit config/guilds/guild-123456789.yml ai_moderation: enabled: true sensitivity: 75 # Changed from 80 nsfw_only_filtering: true # Changed from false confidence_threshold: 0.7 ``` ### Step 6: Test the New System 1. **Restart GuardDen** to load the file-based configuration: ```bash python -m guardden ``` 2. **Test hot-reloading** by editing a config file: ```bash # Edit a setting in config/guilds/guild-123456789.yml # Changes should apply within seconds (check bot logs) ``` 3. **Verify settings in Discord** using read-only commands: ``` !config # View current settings !ai # View AI moderation settings !automod # View automod settings ``` ### Step 7: Manage Wordlists (Optional) Review and customize wordlist configurations: ```bash # View wordlist status python -m guardden.cli.config wordlist info # Edit wordlists directly: nano config/wordlists/banned-words.yml nano config/wordlists/domain-allowlists.yml nano config/wordlists/external-sources.yml ``` ## Post-Migration Tasks ### Backup Your Configuration ```bash # Create backups of specific guilds python -m guardden.cli.config guild backup 123456789 # Or backup the entire config directory cp -r config config-backup-$(date +%Y%m%d) ``` ### Version Control Setup Add configuration to Git for version tracking: ```bash # Initialize Git repository (if not already) git init git add config/ git commit -m "Add GuardDen file-based configuration" # Create .gitignore to exclude backups echo "config/backups/" >> .gitignore ``` ### Clean Up Database (Optional) **⚠️ WARNING: Only do this AFTER verifying migration is successful!** ```bash # This permanently deletes old configuration from database python -c " import asyncio from guardden.services.config_migration import ConfigurationMigrator from guardden.services.database import Database from guardden.services.guild_config import GuildConfigService from guardden.services.file_config import FileConfigurationManager async def cleanup(): db = Database('your-db-url') guild_service = GuildConfigService(db) file_manager = FileConfigurationManager() migrator = ConfigurationMigrator(db, guild_service, file_manager) # ⚠️ This deletes all guild settings from database results = await migrator.cleanup_database_configs(confirm=True) print(f'Cleaned up: {results}') await db.close() asyncio.run(cleanup()) " ``` ## Troubleshooting ### Common Issues **1. Migration Failed for Some Guilds** ```bash # Check the specific error messages python -m guardden.cli.config migrate from-database # Try migrating individual guilds if needed # (This may require manual file creation) ``` **2. Configuration Validation Errors** ```bash # Validate and see specific errors python -m guardden.cli.config guild validate # Common fixes: # - Check YAML syntax (indentation, colons, quotes) # - Verify Discord IDs are numbers, not strings # - Ensure boolean values are true/false, not True/False ``` **3. Hot-Reload Not Working** - Check bot logs for configuration errors - Ensure YAML syntax is correct - Verify file permissions are readable - Restart bot if needed: `python -m guardden` **4. Lost Configuration During Migration** - Check `config/backups/` directory for backup files - Database configurations are preserved during migration - Re-run migration if needed: `python -m guardden.cli.config migrate from-database` ### Getting Help **View CLI Help:** ```bash python -m guardden.cli.config --help python -m guardden.cli.config guild --help python -m guardden.cli.config migrate --help ``` **Check Configuration Status:** ```bash python -m guardden.cli.config guild list python -m guardden.cli.config guild validate python -m guardden.cli.config wordlist info ``` **Backup and Recovery:** ```bash # Create backup before making changes python -m guardden.cli.config guild backup # Recovery from backup (manual file copy) cp config/backups/guild-123456789_20260124_123456.yml config/guilds/guild-123456789.yml ``` ## Configuration Examples ### NSFW-Only Filtering Setup For gaming communities that want to allow violence but block sexual content: ```yaml # config/guilds/guild-123456789.yml ai_moderation: enabled: true sensitivity: 80 nsfw_only_filtering: true # Only block sexual content confidence_threshold: 0.7 nsfw_detection_enabled: true log_only: false ``` ### High-Security Server Setup For family-friendly or professional servers: ```yaml ai_moderation: enabled: true sensitivity: 95 # Very strict nsfw_only_filtering: false # Block all inappropriate content confidence_threshold: 0.6 # Lower threshold = more sensitive log_only: false automod: message_rate_limit: 3 # Stricter rate limiting message_rate_window: 5 duplicate_threshold: 2 # Less tolerance for duplicates ``` ### Development/Testing Server Setup For development or testing environments: ```yaml ai_moderation: enabled: true sensitivity: 50 # More lenient nsfw_only_filtering: false confidence_threshold: 0.8 # Higher threshold = less sensitive log_only: true # Only log, don't take action automod: message_rate_limit: 10 # More relaxed limits message_rate_window: 5 ``` ## Benefits of File-Based Configuration After migration, you'll enjoy: 1. **Easy Bulk Changes**: Edit multiple server configs at once 2. **Configuration as Code**: Version control your bot settings 3. **Environment Management**: Different configs for dev/staging/prod 4. **Disaster Recovery**: Easy backup and restore of all settings 5. **No Discord Dependency**: Configure servers before bot joins 6. **Better Organization**: All settings in structured, documented files 7. **Hot-Reloading**: Changes apply instantly without restarts 8. **Schema Validation**: Automatic error checking prevents misconfigurations **Welcome to the new GuardDen configuration system! 🎉**