update
This commit is contained in:
124
README.md
124
README.md
@@ -19,9 +19,10 @@ GuardDen is a comprehensive Discord moderation bot designed to protect your comm
|
||||
### AI Moderation
|
||||
- **Text Analysis** - AI-powered content moderation using Claude or GPT
|
||||
- **NSFW Image Detection** - Automatic flagging of inappropriate images
|
||||
- **NSFW-Only Filtering** - Option to only filter sexual content, allowing violence/harassment
|
||||
- **NSFW-Only Filtering** - Enabled by default - only filters sexual content, allows violence/harassment
|
||||
- **Phishing Analysis** - AI-enhanced detection of scam URLs
|
||||
- **Configurable Sensitivity** - Adjust strictness per server (0-100)
|
||||
- **Public In-Channel Warnings** - Optional: sends temporary public channel messages when users have DMs disabled
|
||||
|
||||
### Verification System
|
||||
- **Multiple Challenge Types** - Button, captcha, math problems, emoji selection
|
||||
@@ -36,13 +37,6 @@ GuardDen is a comprehensive Discord moderation bot designed to protect your comm
|
||||
- Ban/unban events
|
||||
- All moderation actions
|
||||
|
||||
### Web Dashboard
|
||||
- Servers overview with plan status and quick config links
|
||||
- Users view with cross-guild search and strike totals
|
||||
- Chats view for moderated message logs with filters
|
||||
- Moderation logs, analytics, and configuration updates
|
||||
- Config export for backups
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Prerequisites
|
||||
@@ -108,7 +102,6 @@ GuardDen is a comprehensive Discord moderation bot designed to protect your comm
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
4. Open the dashboard (if configured): `http://localhost:8080`
|
||||
|
||||
### Local Development
|
||||
|
||||
@@ -254,13 +247,23 @@ ai_moderation:
|
||||
enabled: true # Enable AI content analysis
|
||||
sensitivity: 80 # 0-100 scale (higher = stricter)
|
||||
confidence_threshold: 0.7 # 0.0-1.0 confidence required
|
||||
nsfw_only_filtering: false # true = only sexual content, false = all content
|
||||
nsfw_only_filtering: true # true = only sexual content (DEFAULT), false = all content
|
||||
log_only: false # true = log only, false = take action
|
||||
|
||||
notifications:
|
||||
send_in_channel_warnings: false # Send temporary PUBLIC channel messages when DMs fail (DEFAULT: false)
|
||||
```
|
||||
|
||||
**NSFW-Only Filtering Guide:**
|
||||
**NSFW-Only Filtering Guide (Default: Enabled):**
|
||||
- `true` = Only block sexual/nude content, allow violence and other content types **(DEFAULT)**
|
||||
- `false` = Block ALL inappropriate content (sexual, violence, harassment, hate speech)
|
||||
- `true` = Only block sexual/nude content, allow violence and other content types
|
||||
|
||||
**Public In-Channel Warnings (Default: Disabled):**
|
||||
- **IMPORTANT**: These messages are PUBLIC and visible to everyone in the channel, NOT private
|
||||
- When enabled and a user has DMs disabled, sends a temporary public message in the channel
|
||||
- Messages auto-delete after 10 seconds to minimize clutter
|
||||
- **Privacy Warning**: The user's violation and reason will be visible to all users for 10 seconds
|
||||
- Set to `true` only if you prefer public transparency over privacy
|
||||
|
||||
**Automod Configuration:**
|
||||
```yaml
|
||||
@@ -310,16 +313,6 @@ Configuration changes are automatically detected and applied without restarting
|
||||
| `GUARDDEN_AI_PROVIDER` | AI provider (anthropic/openai/none) | `none` |
|
||||
| `GUARDDEN_ANTHROPIC_API_KEY` | Anthropic API key (if using Claude) | - |
|
||||
| `GUARDDEN_OPENAI_API_KEY` | OpenAI API key (if using GPT) | - |
|
||||
| `GUARDDEN_DASHBOARD_BASE_URL` | Dashboard base URL for OAuth callbacks | `http://localhost:8080` |
|
||||
| `GUARDDEN_DASHBOARD_SECRET_KEY` | Session secret for dashboard | Required |
|
||||
| `GUARDDEN_DASHBOARD_ENTRA_TENANT_ID` | Entra tenant ID | Required |
|
||||
| `GUARDDEN_DASHBOARD_ENTRA_CLIENT_ID` | Entra client ID | Required |
|
||||
| `GUARDDEN_DASHBOARD_ENTRA_CLIENT_SECRET` | Entra client secret | Required |
|
||||
| `GUARDDEN_DASHBOARD_DISCORD_CLIENT_ID` | Discord OAuth client ID | Required |
|
||||
| `GUARDDEN_DASHBOARD_DISCORD_CLIENT_SECRET` | Discord OAuth client secret | Required |
|
||||
| `GUARDDEN_DASHBOARD_OWNER_DISCORD_ID` | Discord user ID allowed | Required |
|
||||
| `GUARDDEN_DASHBOARD_OWNER_ENTRA_OBJECT_ID` | Entra object ID allowed | Required |
|
||||
| `GUARDDEN_DASHBOARD_CORS_ORIGINS` | Dashboard CORS origins | (empty = none) |
|
||||
| `GUARDDEN_WORDLIST_ENABLED` | Enable managed wordlist sync | `true` |
|
||||
| `GUARDDEN_WORDLIST_UPDATE_HOURS` | Managed wordlist sync interval | `168` |
|
||||
| `GUARDDEN_WORDLIST_SOURCES` | JSON array of wordlist sources | (empty = defaults) |
|
||||
@@ -427,20 +420,6 @@ Edit config/wordlists/banned-words.yml
|
||||
| `!verify test [type]` | Test a verification challenge |
|
||||
| `!verify reset @user` | Reset verification for a user |
|
||||
|
||||
## Dashboard
|
||||
|
||||
The dashboard provides owner-only visibility and configuration across all servers, including
|
||||
servers, users, chats, moderation logs, analytics, and settings.
|
||||
|
||||
1. Configure Entra + Discord OAuth credentials in `.env`.
|
||||
2. Run with Docker: `docker compose up -d dashboard` (builds the dashboard UI).
|
||||
3. For local development without Docker, build the frontend:
|
||||
`cd dashboard/frontend && npm install && npm run build`
|
||||
4. Start the dashboard: `python -m guardden.dashboard`
|
||||
5. OAuth callbacks:
|
||||
- Entra: `http://localhost:8080/auth/entra/callback`
|
||||
- Discord: `http://localhost:8080/auth/discord/callback`
|
||||
|
||||
## CI (Gitea Actions)
|
||||
|
||||
Workflows live under `.gitea/workflows/` and mirror the previous GitHub Actions
|
||||
@@ -481,7 +460,6 @@ guardden/
|
||||
│ └── templates/ # Configuration templates
|
||||
├── tests/ # Test suite
|
||||
├── migrations/ # Database migrations
|
||||
├── dashboard/ # Web dashboard (FastAPI + React)
|
||||
├── docker-compose.yml # Docker deployment
|
||||
├── pyproject.toml # Dependencies
|
||||
├── README.md # This file
|
||||
@@ -558,22 +536,64 @@ The AI analyzes content for:
|
||||
3. Actions are taken based on guild sensitivity settings
|
||||
4. All AI actions are logged to the mod log channel
|
||||
|
||||
### NSFW-Only Filtering Mode
|
||||
### NSFW-Only Filtering Mode (Enabled by Default)
|
||||
|
||||
For communities that only want to filter sexual content while allowing other content types:
|
||||
**Default Behavior:**
|
||||
GuardDen is configured to only filter sexual/NSFW content by default. This allows communities to have mature discussions about violence, politics, and controversial topics while still maintaining a "safe for work" environment.
|
||||
|
||||
```
|
||||
!ai nsfwonly true
|
||||
```
|
||||
|
||||
**When enabled:**
|
||||
**When enabled (DEFAULT):**
|
||||
- ✅ **Blocked:** Sexual content, nude images, explicit material
|
||||
- ❌ **Allowed:** Violence, harassment, hate speech, self-harm content
|
||||
|
||||
**When disabled (normal mode):**
|
||||
**When disabled (strict mode):**
|
||||
- ✅ **Blocked:** All inappropriate content categories
|
||||
|
||||
This mode is useful for gaming communities, mature discussion servers, or communities with specific content policies that allow violence but prohibit sexual material.
|
||||
**To change to strict mode:**
|
||||
```yaml
|
||||
# Edit config/guilds/guild-<id>.yml
|
||||
ai_moderation:
|
||||
nsfw_only_filtering: false
|
||||
```
|
||||
|
||||
This default is useful for:
|
||||
- Gaming communities (violence in gaming discussions)
|
||||
- Mature discussion servers (politics, news)
|
||||
- Communities with specific content policies that allow violence but prohibit sexual material
|
||||
|
||||
### Public In-Channel Warnings (Disabled by Default)
|
||||
|
||||
**IMPORTANT PRIVACY NOTICE**: In-channel warnings are **PUBLIC** and visible to all users in the channel, NOT private messages. This is a Discord API limitation.
|
||||
|
||||
When enabled and users have DMs disabled, moderation warnings are sent as temporary public messages in the channel where the violation occurred.
|
||||
|
||||
**How it works:**
|
||||
1. Bot tries to DM the user about the violation
|
||||
2. If DM fails (user has DMs disabled):
|
||||
- If `send_in_channel_warnings: true`: Sends a **PUBLIC** temporary message in the channel mentioning the user
|
||||
- If `send_in_channel_warnings: false` (DEFAULT): Silent failure, no notification sent
|
||||
- Message includes violation reason and any timeout information
|
||||
- Message auto-deletes after 10 seconds
|
||||
3. If DM succeeds, no channel message is sent
|
||||
|
||||
**To enable in-channel warnings:**
|
||||
```yaml
|
||||
# Edit config/guilds/guild-<id>.yml
|
||||
notifications:
|
||||
send_in_channel_warnings: true
|
||||
```
|
||||
|
||||
**Considerations:**
|
||||
|
||||
**Pros:**
|
||||
- Users are always notified of moderation actions, even with DMs disabled
|
||||
- Public transparency about what content is not allowed
|
||||
- Educational for other members
|
||||
|
||||
**Cons:**
|
||||
- **NOT PRIVATE** - Violation details visible to all users for 10 seconds
|
||||
- May embarrass users publicly
|
||||
- Could expose sensitive moderation information
|
||||
- Privacy-conscious communities may prefer silent failures
|
||||
|
||||
## Development
|
||||
|
||||
@@ -598,11 +618,21 @@ mypy src # Type checking
|
||||
|
||||
MIT License - see LICENSE file for details.
|
||||
|
||||
## Support
|
||||
|
||||
- **Issues**: Report bugs at https://github.com/anthropics/claude-code/issues
|
||||
- **Documentation**: See `docs/` directory
|
||||
- **Configuration Help**: Check `CLAUDE.md` for developer guidance
|
||||
|
||||
## Roadmap
|
||||
|
||||
- [x] AI-powered content moderation (Claude/OpenAI integration)
|
||||
- [x] NSFW image detection
|
||||
- [x] NSFW-only filtering mode (default)
|
||||
- [x] Optional public in-channel warnings when DMs disabled
|
||||
- [x] Verification/captcha system
|
||||
- [x] Rate limiting
|
||||
- [ ] Voice channel moderation
|
||||
- [x] Web dashboard
|
||||
- [ ] Slash commands with true ephemeral messages
|
||||
- [ ] Custom notification templates
|
||||
- [ ] Advanced analytics dashboard
|
||||
|
||||
Reference in New Issue
Block a user