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.

case and history commands
commandwhat it doesneeds
/history <member> [action]show up to 100 cases for a member, optionally filtered to one actionmanage messages
/history view <case id>open one case by its idmanage messages
/caselog <case id>open one case by its idmanage messages
/warnings <member>show only warning cases for a membermanage messages
/reason <case id> <reason>replace the stored reason on a casemanage messages
/modstats <member>count that moderator’s cases, grouped by actionmanage messages
/history remove <member> <case id>delete one case from that member’s historymanage messages
/history removeall <member>delete every case for that memberadministrator
,warn @member repeated insults
,history @member
,history @member warn
,reason 184 repeated insults after staff reminder
/moderation caselog member_or_case_id: 184
dangerhistory deletion is permanent

removing 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.

warning and removal commands
commandwhat it doesneeds
/warn <member> <reason>record a warning and try to notify the membermanage messages
/kick <member> <reason>remove a present member; they may rejoinkick members
/ban <member> [0 or duration] [reason]ban an account; an optional window deletes recent message historyban members
/softban <member> [0 or duration] [reason]ban and immediately unban, usually to clear recent messages without keeping the blockban members
/tempban <member> <duration> [reason]ban now and schedule an automatic unbanban members
/hardban <member> [reason]store a persistent ban that is reapplied after an outside unbanadministrator + antinuke admin
/unban <user id> <reason>remove a ban and cancel stored tempban state; hardbans need antinuke accessban members
,ban @member 2h posting scam links
,softban @member 1d cleanup after spam
,tempban @member 7d repeated raids
/moderation unban id: 123456789012345678 reason: appeal accepted

only 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.

ban inspection and bulk commands
commandwhat it doesneeds
/ban recentlist recent ban, tempban, hardban, softban, recentban, and raid casesban members
/hardban listlist the stored persistent hardbansadministrator + antinuke admin
/recentban <count> <reason>ban the newest 1–1000 non-bot members by join timeban members
/ban purge <duration>ban through the current ban list again to remove message history for that windowmanage guild + ban members
/unbanallstart unbanning every banned accountserver owner + ban members
/unbanall cancelrequest cancellation of the running unbanall taskserver owner + ban members
warningcancellation is not rollback

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.
timeouts and mute flavours commands
commandwhat it doesneeds
/timeout <member> <duration> <reason>apply a native discord timeoutmoderate members
/untimeout <member> <reason>clear a native timeoutmoderate members
/mute <member> <duration> <reason>apply the same native timeout mechanismmoderate members
/unmute <member> <reason>clear the native timeoutmoderate members
/timeout listlist members discord currently reports as timed outmoderate members
/imute <member> <reason>apply attachment and embed restrictionsmoderate members
/iunmute <member> <reason>restore the saved attachment and embed permissionsmoderate members
/rmute <member> <reason>apply reaction and external expression restrictionsmoderate members
/runmute <member> <reason>restore the saved reaction and external expression permissionsmoderate 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.

  1. 01

    prepare isolation

    run ,setupmute with manage guild and manage channels, then check the generated role sits below havoc.

  2. 02

    apply a duration

    run ,jail @member 2h reason. use ,jaillist to inspect stored jail entries.

  3. 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.

warningdiscord hierarchy still decides

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.