371 lines
9.7 KiB
Markdown
371 lines
9.7 KiB
Markdown
# 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 <guild_id>
|
|
|
|
# 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! 🎉** |