Docs/Plugins/Infractions
Infractions
Warnings, mutes, kicks, bans and friends - numbered, searchable, reversible, with reports, self-mutes and appeals.
Infractions are HepBoat's moderation records. Every action - warn, mute, timeout, kick, softban, ban, tempban, cleanban - creates a numbered infraction you can search, annotate, edit and reverse, from chat or from the dashboard's Infractions page.
plugins:
infractions:
mute_role: 674638268135047186
notify: {} # DM templates per action, optional
The essentials
mute_role- required for!mute(role-based mutes). Discord-native timeouts (!timeout) work without it.notify/notify_actions- DM the target when actioned, with per-action templates and an optional timezone (notify_tz) for rendered timestamps.reason_edit_level/duration_edit_level- who may edit an existing infraction's reason or duration.vc_mute- when a muted member is connected to voice, move them tovc_mute_channel(or your server's AFK channel if that is unset) so a role mute silences them there too.
Timed actions
mute, tempban and timeout take a duration like 30m, 2h, 1d, given
after the member: !mute @user 2h spam. A mute with no duration stays until
you lift it.
Expiries are stored and reversed by a background sweep, so they survive
restarts. The dashboard can also expire any timed infraction early with one
click.
To lift an action early from chat, use the matching un-command: !unban,
!unmute, or !untimeout @user [reason]. Each closes the active infraction
and writes its own mod log entry naming the moderator and the reason - so a
lifted punishment is just as auditable as the punishment itself.
infractions clearall wipes every non-note infraction for one member at
once, for the rare case where a record needs to start clean. It asks for
confirmation and is admin-only.
Deleting an infraction - from the dashboard or with infractions delete -
erases its audit history, and for a timed one, its expiry timer with it. If
the punishment is still in effect (a ban, mute or timeout), deleting also
lifts it automatically, so nobody is left muted by a deleted timer. The
confirmation says so before you commit, and the mod log records whether the
lift succeeded.
Command variants
Most punitive commands accept inline variants: a trailing dm (force a DM),
quiet (skip the DM), or anon (DM without naming the moderator). For
example !ban quiet @user reason. The classic short forms still work too -
!qwarn, !qmute, !qban and friends are the same as the quiet
variants. Variants are prefix-only, so a server that runs on slash commands
alone cannot reach them.
Variants follow the base command's access rules: a command override that
changes the level of warn (on the Access page or in the YAML) applies to
warn quiet, warn dm, and warn anon as well - you never have to
configure them separately.
!ban doubles as a temp ban: when the reason starts with a duration, the ban
expires after it. !ban @user 2h spam and !tempban @user 2h spam do the
same thing. Note the argument order on !tempban - the member comes first,
then the duration.
Right-click moderation
Moderators can act straight from the right-click menu. Opt the apps ...
commands in on the dashboard's Slash Commands page and they appear under
Apps when you right-click a member (Warn / Timeout / Kick / Ban) or a
message (Delete and Warn). Each one opens a small form for the reason - and a
duration where it applies - so nothing fires from a stray click. The same
level rules and hierarchy checks apply as for the typed commands, and the
result lands on the member's infraction record exactly the same way.
Discord only shows these menu items to members with the matching built-in permission (Moderate / Kick / Ban Members); you can retune who sees them under Server Settings > Integrations.
The mobile mod panel
!minfo @user (or /minfo, or the modpanel alias) posts a mod panel built for phones: a summary
card - identity, join date, whether they are currently timed out, muted or
banned, and their recent infractions - with rows of one-tap action buttons
underneath: Warn / Timeout / Mute / Kick / Ban, then Tempban / Softban /
Untimeout / Unmute / Clean, and Quiet warn (records the warning without
DMing the member - it follows your server's rules for warn quiet). Every
button opens a small form for the reason (and a duration or message count
where it applies), so nothing fires from a stray tap.
The same action buttons also appear under !info @user when you look up
someone else - so the everyday lookup command doubles as a quick moderation
surface for staff.
The buttons are honest: you only see the ones you could run as typed commands in that channel - your level, any command overrides, and lockdown rules all apply. Other moderators can use the buttons on your panel too; every tap is re-checked against the person tapping, including the usual hierarchy rules. Actions taken from the panel post publicly, name the acting moderator, and land on the record like any typed command.
For a fully private version, opt in the apps mod-panel command and
right-click a member > Apps > Mod Panel: the same panel appears only
to you, and the action confirmations stay hidden too - nothing shows in
chat.
Moderator notes
note @user text puts an observation on a member's record without punishing
anyone - the target is never DMed, and nothing happens to them; it is context
for the next moderator who looks them up (the mod log records who added it,
like any other action). note search and note info read them back, note delete
removes one (with a confirmation that shows the note first), and the
dashboard's Notes page browses and manages them all.
Reports and self-mutes
- Reports - members report a user or message; reports land in
report_channel(optionally pingingreport_role) with a templatedreport_response. - Message reports - a report can attach the message itself: paste a
message link (or its ID) first with
!report, or fill themessageoption on/report. A bare ID works from any channel - the bot finds the message wherever it was posted in your server, as long as it has seen it. The staff embed then shows the reported message highlighted inside the surrounding conversation, the author's profile (name, ID, avatar), a jump link, and a row of one-click mod actions: delete the message, softban, delete + ban, delete + kick, or kick + warn. Buttons require moderator level and respect the role hierarchy, and one action resolves the report. Setreport_require_message: true(also on the Setup - Reports page) to refuse reports that do not attach a message. - Self-mutes - with
selfmute: trueand a dedicatedselfmute_role, members can!selfmute 2hthemselves;selfmute_maxcaps the duration. A self-mute cannot be lifted early by its target - that is the point.
Appeals
With the appeals form enabled (dashboard → Appeals, requires the
APPEALS feature), banned users receive an appeal link, fill in your custom
form, and submissions land in a review queue with approve/deny actions and
full history. Reviewing existing appeals keeps working even if the feature is
later revoked. The Ban appeal submitted modlog entry includes the
submitted answers - as a field on the pretty embed, or quoted under the
one-line entry in plain mode - so staff can read an appeal (and react-vote
on it) right in Discord before anyone opens the dashboard.
Temporary bans never carry an appeal link - they lift on their own. If you want staff notified the moment an appeal comes in, set a notify channel (and optionally a role to ping) on the Appeals form page.
When you approve an appeal, the bot unbans the user first and then DMs them the decision with a way back in: a single-use, week-long invite minted for the channel you pick on the Appeals form page (Rejoin invite channel). Left unset, the bot falls back to your server's vanity URL, then its system channel, then its rules channel - and if none of those work, the DM simply goes out without a link.
Reappeal chains
By default an appeal is one-shot: a denial is final. Set reappeal waits
on the Appeals form page (for example 2w, 30d, 90d) and appeals become an
escalating chain instead:
- The first appeal only opens the first wait after the ban - the ban DM says
exactly when, and the form itself stays locked until then. Put
{appeal_opens_at}in your custom ban message to render that time in your own wording. - Each denial automatically hands the user their next attempt: a fresh link in the denial DM, opening after the next wait. They stay in the holding server between attempts so the response reaches them.
- A denial after the last wait is permanent - and reviewers can end the chain early on any denial with the Permanent - no further appeals checkbox, for something unforgivable or an appeal bad enough to burn the remaining tries. Permanent denials say so in the DM, on the appeal page, and in the mod log.
The review queue shows each appeal's attempt number and, for future attempts, when they open.
Changing the waits applies to users who are already waiting: shorten a wait (or clear the chain) and their appeal opens sooner - immediately, if the new wait has already passed. The appeal page always shows the current open time, even if an earlier DM quoted the old one. The one exception: appeals that were handed out with no wait stay open, even if you add waits afterwards.
Commands
| Command | What it does |
|---|---|
/ban |
Permanently ban a user (or raw user ID, even if not in the guild). |
/softban |
Ban then immediately unban - clears recent messages from the user. |
/tempban |
Ban a user for a duration. Auto-unban when the timer expires. |
/cleanban |
Ban a user and delete their last N days of messages in one shot. |
/unban |
Lift a ban on a user. |
/kick |
Kick a user from the guild. |
/mute |
Mute a user. Optional duration (e.g. 30m, 2h, 1d) for a temp mute. |
/unmute |
Remove the mute role from a user. |
/muterole |
Set up a "Muted" role and deny SEND_MESSAGES + ADD_REACTIONS in every channel (admin). |
/timeout |
Apply Discord's built-in timeout (max 28 days). |
/untimeout |
Remove an active timeout from a member early, with an optional reason. |
/selfmute |
Voluntarily mute yourself for up to the configured maximum duration. |
/warn |
Issue a formal warning that goes on the user's infraction record. |
/note |
Add a private moderator note about a user (no infraction posted). |
/report |
Send a report to the guild's configured report channel. |
/minfo |
Mobile-friendly mod panel: user summary plus one-tap warn / timeout / mute / kick / ban / clean buttons. |
/mban |
Ban multiple users in one command (space-separated IDs, optional -r reason). |
/mkick |
Kick multiple users in one command. |
/mmute |
Mute multiple users in one command. |
/munmute |
Unmute multiple users in one command. |
/munban |
Unban multiple users in one command. |
/mwarn |
Warn multiple users in one command. |
/mtimeout |
Timeout multiple users in one command (Discord-native, max 28d). |
/timeleft |
Show your active mute's remaining time. |
/infractions reason |
Set or update the reason on an existing infraction by id. |
/infractions duration |
Adjust the expiry on an existing temp infraction by id. |
/infractions info |
Show full details for one infraction by id. |
/infractions search |
Search infractions by user or text. Defaults to the caller's recent activity. |
/infractions bans |
Recent ban-family infractions in this guild. |
/infractions mutes |
Recent mute-family infractions in this guild. |
/infractions warnings |
Recent warnings issued in this guild. |
/infractions active |
Currently-active infractions in this guild. |
/infractions recent |
Most recent infractions across all action types. |
/infractions delete |
Permanently delete one infraction record (admin). |
/infractions clearall |
Permanently delete every non-note infraction for a user (admin). |
/note search |
Search moderator notes by user or text. |
/note info |
Show one moderator note by id. |
/note delete |
Delete a moderator note by id (admin). |
/apps warn |
Right-click a member > Apps > Warn User. Opens a reason form. |
/apps timeout |
Right-click a member > Apps > Timeout User. Asks duration + reason. |
/apps kick |
Right-click a member > Apps > Kick User. Opens a reason form. |
/apps ban |
Right-click a member > Apps > Ban User. Optional duration = tempban. |
/apps delete-warn |
Right-click a message > Apps > Delete and Warn its author. |
/apps mod-panel |
Right-click a member > Apps > Mod Panel. The minfo panel, fully ephemeral - nothing shows in chat. |