Infraction tracking and moderation commands for Dreamliner.
#Commands
#Punishment commands
| Command | Permission | Description |
|---|---|---|
/warn | can_warn | Issue a warning |
/note | can_note | Add a staff note |
/mute | can_mute | Timeout a member via Discord (max 28d; duration optional if default_duration.tempmute is set) |
/unmute | can_mute | Clear a member's Discord timeout |
/kick | can_kick | Kick a member |
/ban | can_ban | Permanently ban a member |
/tempban | can_ban | Temporarily ban a member (duration optional if default_duration.tempban is set) |
/unban | can_unban | Unban by user ID |
/softban | can_softban | Ban and immediately unban to purge messages |
#Case management
| Command | Permission | Description |
|---|---|---|
/infraction view | can_view | View infraction details by ID |
/infraction search | can_view | Search by ID, user, mod, or reason text |
/infraction reason | can_edit_reason | Edit an infraction reason |
/infraction duration | can_edit_duration | Extend or set duration (from creation time) |
/infraction delete | can_delete | Delete an infraction record |
#Configuration
plugins:
infractions:
config:
ban_delete_message_days: 0
softban_delete_message_days: 7
notify:
warn:
dm: true
mute:
dm: false
require_reason: # Per-action: reject the command if no reason is given
warn: true
ban: true
default_duration: # Fallback duration (ms) when the command's duration option is blank
tempmute: 600000 # 10m
tempban: 86400000 # 1d
escalation: # Auto-escalation ladder for repeat offenders
enabled: true
count_types: ["warn"] # Which infraction types count toward the strike total
window_ms: 0 # 0 = count all-time; otherwise only strikes within this window
steps:
- after: 3
type: mute
duration_ms: 1800000 # 30m
- after: 5
type: ban
Grant can_warn, can_note, can_mute, can_kick, can_ban, can_unban, can_softban, can_view,
can_edit_reason, can_edit_duration, and can_delete to a Dreamliner Role on the dashboard's Roles page
(or /permissions role grant) — see permissions.md. Editing another moderator's case only
requires the same can_edit_reason/can_edit_duration permission as editing your own — there's no separate
elevated threshold.
#DMs and appeals
With notify.<action>.dm on, the target is DMed about their infraction. Ban, tempban, softban and kick
DMs go out before the action, while the bot still shares a server with them; if the action then
fails, the new case is removed again. When the Appeals plugin is on and that infraction
type is appealable, the DM carries an Appeal button linking straight to the appeal page for that case.
#Auto-escalation
When escalation.enabled is true, Dreamliner counts a member's qualifying infractions (escalation.count_types, within escalation.window_ms if set) after every punishment command. If the new total exactly matches a step's after value, that step's punishment is applied automatically and logged as its own case with reason Auto-escalation: reached N infractions. Steps only fire on an exact match, so keep after values strictly increasing (e.g. 3, 5, 8).
Configure all of this — punishment-specific reason requirements, default durations, and the escalation ladder — from the dashboard's Infractions page, which opens each punishment type into its own settings panel similar to Automod.
#Duration format
Timed actions use Dreamliner duration formats: 30s, 5m, 2h, 1d, 1w.
#Expiration
Timed mutes and bans are checked every minute. When a tempmute or tempban expires, the bot clears the timeout or unbans the user and marks the infraction inactive.
Manual /unmute or /unban also clears active infraction records.
#Case log
When the server's moderation_log_channel_id is set (Dashboard → Logging), each action posts a log line to that channel. Case updates, deletions, and expirations are also logged there.