Moderation
Content moderation, thread management, trade enforcement, and comprehensive audit logging.
Zagreus provides layered moderation tools that cover content filtering, trade enforcement, thread management, and audit logging. Every moderator action is permanently recorded and queryable, ensuring accountability and transparency.
Trade bans prevent users from posting in any monitored trade channel. Banned users' messages are automatically deleted and they receive an ephemeral notification explaining the ban.
Content Moderation
Per-user content blocking allows moderators to restrict specific types of content from individual users. This is more granular than channel-level permissions and does not require modifying Discord roles.
Blockable Content Types
| Content Type | Description |
|---|---|
| Images | Attached image files (PNG, JPG, GIF, WebP) |
| Videos | Attached video files (MP4, MOV, WebM) |
| Links | Any URL in the message content |
| Embeds | Rich embeds from links (previews, OpenGraph cards) |
| Files | Non-media file attachments (ZIP, PDF, etc.) |
| Sound | Voice messages and audio file attachments |
| Forwarded Messages | Messages forwarded from other channels or servers |
How It Works
- A moderator runs
/content-block add @user <type>to block a content type for a specific user - When the user posts a message containing the blocked content type, the message is automatically deleted
- The user receives an ephemeral message explaining what was blocked and why
- Optionally, a timeout can be applied — the block expires automatically after the specified duration
- Multiple content types can be blocked for the same user simultaneously
- Blocks are logged in the audit trail with the moderator who set them
Trade Enforcement
Trade Bans
Trade bans prevent a user from posting in any monitored trade channel across the entire server.
Temporary Bans
- Set a duration (hours, days, weeks) for the ban
- The ban auto-expires when the duration elapses
- The user receives a DM notification when banned and when the ban expires
- A reason is recorded in the audit log
Permanent Bans
- No expiry date — the ban persists until manually removed by a moderator
- The user is notified via DM
- Permanent bans are visually distinguished in the audit log and dashboard
Ban Behavior
- Messages posted by banned users in monitored channels are immediately deleted
- The user receives an ephemeral message with the ban reason and expiry (if temporary)
- Ban status is visible on the user's trade profile
- Bans are enforced even if the user leaves and rejoins the server
Trade Mutes
Trade mutes are a lighter alternative to bans. A muted user's messages are not deleted, but they are flagged and the user is rate-limited.
- Always temporary: Mutes require a duration and auto-expire
- Rate limiting: Muted users can only post one trade per configurable interval
- Visual indicator: Muted users' trades may be marked with a mute indicator
- DM notification: The user is informed of the mute, its reason, and when it expires
Suspicious Activity Detection
Zagreus automatically flags potentially suspicious trading behavior:
- New account trading: Users with accounts younger than a configurable threshold posting trades
- Rapid trade posting: Posting more than a configurable number of trades within a short window
- Cross-channel duplication: Identical trade content posted in multiple monitored channels
- Edited prices: Trade posts where the price was modified after initial posting
- Deleted and reposted: Trades that are deleted and immediately reposted (potential scam pattern)
Flagged activity is sent to the configured notification channel for moderator review. No automatic action is taken.
Thread Management
Thread Rules
Per-thread content restrictions that function similarly to content blocks but apply to everyone within a specific thread.
- Configure which content types are restricted in a thread (images, links, files, etc.)
- Messages violating thread rules are auto-deleted with an ephemeral explanation
- Optionally apply a timeout to rule violators — users who repeatedly break thread rules receive a Discord timeout
- Thread rules persist until manually removed or the thread is archived
| Configuration | Description |
|---|---|
| Restricted types | Which content types are blocked in the thread |
| Timeout duration | How long to timeout repeat violators (optional) |
| Warning threshold | Number of violations before a timeout is applied |
| Exempt roles | Roles that are not subject to thread rules |
Thread Bans
Thread bans prevent specific users from participating in a thread.
Temporary Thread Bans
- Set a duration for the ban
- The user is removed from the thread and cannot rejoin until the ban expires
- Auto-expiry with DM notification
Permanent Thread Bans
- The user is permanently removed from the thread
- If the user attempts to rejoin (via thread member updates), they are automatically removed again
- Join attempt notifications are sent to the moderator who set the ban
Thread Ban Enforcement
- When a banned user is detected joining a thread, they are immediately removed
- The
threadMembersUpdateevent handler monitors for banned users rejoining - A notification is sent to the configured log channel when enforcement occurs
Delete and Edit Logging
Zagreus can log deleted and edited messages to a designated channel, providing a record of removed content.
Configurable Log Channels
- Set one or more channels to receive delete/edit logs
- Different channels can be configured for different categories (trades vs. general)
Who-Deleted Detection
When a message is deleted, Zagreus attempts to determine who deleted it:
- Self-delete: The author deleted their own message
- Moderator delete: A moderator or bot deleted the message (detected via audit logs)
- Unknown: Could not determine the deleter (Discord audit log limitations)
Filtering
Fine-tune what gets logged to avoid noise:
| Filter | Description |
|---|---|
| Ignored channels | Messages deleted in these channels are not logged |
| Ignored roles | Messages from users with these roles are not logged when deleted |
| Ignored prefixes | Messages starting with these prefixes are not logged (useful for bot command prefixes) |
Uncached Message Logging
When a message is deleted that was not in the bot's cache (sent before the bot started or too old):
- The log entry shows "[Uncached Message]" with the message ID and channel
- If the message was a trade, the trade database record is referenced
Attachment Metadata
When a deleted message contained attachments:
- File names, sizes, and types are logged
- Image dimensions are recorded when available
- Attachment URLs are included (may expire after Discord's CDN retention period)
Audit Log
Every moderation action taken through Zagreus is permanently recorded in the audit log. This provides a complete, tamper-proof history of all moderation activity.
Recorded Actions
- Trade bans and unbans (with reason, duration, moderator)
- Trade mutes and unmutes
- Content blocks added and removed
- Thread bans and unbans
- Thread rules changes
- Giveaway moderation (end, cancel, reroll)
- Configuration changes (channel monitoring, role assignments)
Querying the Audit Log
The audit log can be queried via:
- Slash command:
/trade audit-logwith filters for user, action type, date range, and moderator - Web dashboard: Full-featured audit log viewer with search, filters, pagination, and export
Audit Log Fields
| Field | Description |
|---|---|
| Timestamp | When the action occurred |
| Action | The type of moderation action |
| Moderator | Who performed the action |
| Target | The user affected by the action |
| Reason | The reason provided (if any) |
| Duration | For temporary actions, the duration |
| Details | Additional context specific to the action type |
Commands
| Command | Description |
|---|---|
/content-block <add|remove|list> <user> [type] | Manage per-user content type restrictions. Add or remove blocks for images, videos, links, embeds, files, sound, or forwarded messages. List shows all active blocks for a user. |
/thread-rules <set|clear|view> [thread] | Configure content restrictions for a specific thread. Set restricted types, timeout duration, warning threshold, and exempt roles. |
/thread-ban <add|remove|list> <user> [thread] [duration] | Ban or unban a user from a specific thread. Supports temporary and permanent bans with duration. List shows all active thread bans. |
/log-prefs <set|view> | Configure delete/edit logging preferences. Set log channels, ignored channels, ignored roles, and ignored prefixes. |
All moderation commands require the Trade Moderator role. Admin-level actions (like configuring log channels) require Discord Administrator permission.