moderation.
tools for keeping the peace.
the case record
every completed punishment creates a numbered case with the target, moderator, action, reason, and duration where one applies. staff with manage messages can inspect a member’s record, open one case, narrow history to an action, correct a reason, or review a moderator’s action counts.
| command | what it does | needs |
|---|---|---|
| /history <member> [action] | show up to 100 cases for a member, optionally filtered to one action | manage messages |
| /history view <case id> | open one case by its id | manage messages |
| /caselog <case id> | open one case by its id | manage messages |
| /warnings <member> | show only warning cases for a member | manage messages |
| /reason <case id> <reason> | replace the stored reason on a case | manage messages |
| /modstats <member> | count that moderator’s cases, grouped by action | manage messages |
| /history remove <member> <case id> | delete one case from that member’s history | manage messages |
| /history removeall <member> | delete every case for that member | administrator |
,warn @member repeated insults
,history @member
,history @member warn
,reason 184 repeated insults after staff reminder
/moderation caselog member_or_case_id: 184removing cases does not undo a ban, timeout, jail, or other punishment. deleted case ids are not reused, and history removeall removes the paper trail for that member rather than resetting the punishment.
warnings, kicks, and bans
a warning records the event and attempts to dm the member; closed dms do not prevent the case. a kick removes the member without blocking a return. the ban family differs in how long the block lasts and whether it removes recent messages.
| command | what it does | needs |
|---|---|---|
| /warn <member> <reason> | record a warning and try to notify the member | manage messages |
| /kick <member> <reason> | remove a present member; they may rejoin | kick members |
| /ban <member> [0 or duration] [reason] | ban an account; an optional window deletes recent message history | ban members |
| /softban <member> [0 or duration] [reason] | ban and immediately unban, usually to clear recent messages without keeping the block | ban members |
| /tempban <member> <duration> [reason] | ban now and schedule an automatic unban | ban members |
| /hardban <member> [reason] | store a persistent ban that is reapplied after an outside unban | administrator + antinuke admin |
| /unban <user id> <reason> | remove a ban and cancel stored tempban state; hardbans need antinuke access | ban members |
,ban @member 2h posting scam links
,softban @member 1d cleanup after spam
,tempban @member 7d repeated raids
/moderation unban id: 123456789012345678 reason: appeal acceptedonly 0 or a duration at the start of a ban or softban is treated as the message-deletion window. that window is capped at seven days. omit it when the first words belong to the reason.
ban lists and bulk work
use the listing commands before broad changes. ban recent shows the latest 50 ban-related cases;hardban list shows persistent hardbans. the bulk commands work in small, cancelable chunks rather than issuing every request at once.
| command | what it does | needs |
|---|---|---|
| /ban recent | list recent ban, tempban, hardban, softban, recentban, and raid cases | ban members |
| /hardban list | list the stored persistent hardbans | administrator + antinuke admin |
| /recentban <count> <reason> | ban the newest 1–1000 non-bot members by join time | ban members |
| /ban purge <duration> | ban through the current ban list again to remove message history for that window | manage guild + ban members |
| /unbanall | start unbanning every banned account | server owner + ban members |
| /unbanall cancel | request cancellation of the running unbanall task | server owner + ban members |
a canceled bulk operation keeps every action already completed. only one bulk moderation task runs per server at a time, and hierarchy or discord API failures are counted rather than silently retried forever.
timeouts and mute flavours
timeout and mute both use discord’s native timeout and accept a duration up to 28 days. their matching removal commands clear it. the shorter mute names change member-specific channel overwrites across every channel instead of stopping all participation.
- ::imute / iunmute
- deny or restore attach files and embed links. ordinary text and reactions remain available unless another permission blocks them.
- ::rmute / runmute
- deny or restore add reactions, external emoji, and external stickers. it does not remove existing reactions or stop ordinary messages.
- ::saved state
- havoc stores the previous overwrite values before applying these restrictions, then restores only fields it set to false. new channels receive the active restriction too.
| command | what it does | needs |
|---|---|---|
| /timeout <member> <duration> <reason> | apply a native discord timeout | moderate members |
| /untimeout <member> <reason> | clear a native timeout | moderate members |
| /mute <member> <duration> <reason> | apply the same native timeout mechanism | moderate members |
| /unmute <member> <reason> | clear the native timeout | moderate members |
| /timeout list | list members discord currently reports as timed out | moderate members |
| /imute <member> <reason> | apply attachment and embed restrictions | moderate members |
| /iunmute <member> <reason> | restore the saved attachment and embed permissions | moderate members |
| /rmute <member> <reason> | apply reaction and external expression restrictions | moderate members |
| /runmute <member> <reason> | restore the saved reaction and external expression permissions | moderate members |
jail and timed durability
jail is role isolation, not a timeout. run setupmute first to create the havoc jailed role and havoc-jail channel. jailing saves the member’s non-managed roles, removes them, adds the jail role, and schedules restoration. the jail role can see and write only in the jail channel and cannot connect to voice.
- 01
prepare isolation
run
,setupmutewith manage guild and manage channels, then check the generated role sits below havoc. - 02
apply a duration
run
,jail @member 2h reason. use,jaillistto inspect stored jail entries. - 03
release when appropriate
wait for expiry or use
,unjail @member reason; havoc restores eligible saved roles.
timed bans, timeouts, mutes, and jails are stored with scheduled release data, so a bot restart does not erase their expiry. if a jailed member leaves, the state is retained and jail is applied when they return. roles that were deleted, became managed, or moved above havoc cannot be restored.
nicknames and staff containment
one-time rename
rename <member> <new nickname> changes the nickname once and needs manage nicknames.
forced nickname
forcenickname <member> <nickname or off> saves and reapplies a nickname after changes and rejoins. forcenickname list shows saved entries.
effective permissions
permissions <member> <channel> shows the permissions discord resolves in that channel.
havoc cannot act on a member whose highest role is equal to or above its own, edit a higher role, or change the server owner. managed administrator roles can make jail unsafe, so jail refuses them. move havoc’s role above every role it must moderate; granting the command runner a permission does not bypass the bot’s own hierarchy.
what staff and members see
successful moderation replies include the action and case id. targets may receive a dm for supported actions, but closed dms are reported as a note and do not cancel the punishment. audit-log reasons include the acting moderator’s id. case history remains available to staff with manage messages, while expiration emits a moderation event for configured logging routes.
servers can replace punishment replies and dm wording through the invoke family. those 76 command paths are documented separately in custom responses; changing wording does not change permissions, case creation, or the underlying action.
