custom responses.

making havoc speak in your server’s voice instead of its own.

how invoke templates work

invoke stores wording per server, punishment, and destination. a message template replaces the confirmation staff see in the command channel. where supported, a dm template controls the private notice sent to the affected member. changing one action never changes another action.

how invoke templates work commands
commandwhat it doesneeds
/invokeshow configured actions, supported destinations, usage, and placeholdersmanage server
/invoke <action>show whether that action uses built-in or stored response and dm wordingmanage server
/invoke <action> message <template>set the channel response for one actionmanage server
/invoke <action> dm <template>set its member dm where that action supports dmsmanage server
/invoke <action> message viewshow the exact stored response templatemanage server
/invoke <action> dm viewshow the exact stored dm templatemanage server

the registry exposes separate slash paths for every action and operation, while prefix commands follow the shapes above. templates may be plain text or the same validated embed json accepted by embed. each template is limited to 4000 stored characters; plain text output is capped to discord’s 2000-character message limit.

which punishments can be rewritten

actions fall into two groups. use only the destinations listed for that group; response-only actions do not register a dm command.

::response and dm
ban, kick, mute, unmute, timeout, untimeout, jail, unjail, warn, softban, tempban, and unban.
::response only
hardban, imute, iunmute, rmute, and runmute.

the many registry entries are the combinations of these actions with message, message view, and, where applicable, dm and dm view. there is no server-wide template that implicitly rewrites every punishment.

notebuilt-in dm behavior

warn has a built-in dm. other actions send no default dm unless their moderation path provides one or you configure a dm template. the action summary tells you whether the current state is a stored template, a built-in default, or no dm.

placeholder reference

placeholders are case-insensitive names inside braces. substitution runs through plain text and every string value in embed json. unknown placeholder names become empty text rather than producing an error.

::{user}
the punished member’s display name.
::{user.mention}
the punished member’s mention text.
::{user.name}
the punished member’s account name.
::{user.id}
the punished member’s discord id.
::{moderator}
the moderator’s display name.
::{moderator.mention}
the moderator’s mention text.
::{moderator.name}
the moderator’s account name.
::{moderator.id}
the moderator’s discord id.
::{server}
the current server’s name.
::{server.id}
the current server’s discord id.
::{reason}
the reason supplied with the moderation command.
::{duration}
a compact duration for timed punishments, otherwise empty.
::{case}
the moderation case id when one is available.
::{action}
the punishment command name, such as ban or timeout.
::{timestamp}
the event time as a full discord timestamp.
warningmentions are deliberately inert

havoc sends templates with allowed mentions disabled. {user.mention} and {moderator.mention} display as mentions but do not ping. do not depend on a custom response to alert staff or the punished member.

worked example: a plain response

  1. 01

    save the response

    choose the exact action and message destination, then write the template as the rest of the command.

  2. 02

    read it back

    use the registered message view path to inspect the raw stored text rather than example values.

  3. 03

    run the punishment normally

    the template is rendered only after that moderation action completes.

,invoke ban message case {case}: {user} was banned by {moderator} — {reason}
,invoke ban message view
,ban @member 1d repeated invite spam

the optional ban history window in the last command is part of ban, not invoke. when the ban succeeds, the channel response receives the real case, user, moderator, and reason values. if a configured response becomes invalid, havoc uses its built-in confirmation and reports that fallback instead of undoing or blocking the punishment.

worked example: an embed dm

an embed template uses the normal embed object shape. placeholders belong in string values, not property names. parsing happens before substitution, so quotes or braces in a moderation reason cannot alter the json structure.

,invoke timeout dm {"title":"timeout in {server}","description":"{user}, you were timed out for {duration}.\nreason: {reason}","color":"#5865f2","footer":{"text":"case {case} · {timestamp}"}}
,invoke timeout dm view

invoke accepts the embed properties validated by havoc: title, description, url, color, timestamp, footer, image, thumbnail, author, and fields. normal discord embed limits still apply, including 25 fields and 6000 total text characters.

warningcase ids can be empty in early dms

ban, kick, softban, and tempban dms are sent before the member is removed, which is before the case is created. {case} is therefore empty in those dms. keep it out of their dm template or write surrounding text that still reads correctly without a value.

viewing and restoring defaults

use invoke for the overview, invoke <action> for one punishment, and a destination’s view command for its complete raw value. overview previews are shortened, so the view form is the right check before replacing a long embed.

viewing and restoring defaults commands
commandwhat it doesneeds
/invoke banshow the current ban response and dm statemanage server
/invoke ban message viewshow the stored ban response templatemanage server
/invoke ban dm viewshow the stored ban dm templatemanage server
/invoke ban message defaultclear the custom response and return to built-in wordingmanage server
/invoke ban dm defaultclear the custom dm and return to its built-in behaviormanage server

default is template input handled by the set command, not a separate registry subcommand. the reset words defaults, none, reset, clear, off, and remove have the same effect when supplied as the entire template. clearing one destination does not clear the other.

delivery order and failure behavior

for ban, kick, softban, and tempban, havoc tries the dm before removing the member from the server. other supported dms are delivered as part of recording the case. a closed dm does not stop the punishment; the channel confirmation receives a note that delivery failed.

response embeds cannot contain the separate delivery note, so havoc sends that note as accompanying text. malformed stored templates also cannot stop moderation: response failures fall back to built-in wording, and invalid dm templates are skipped with a note. this keeps server-specific presentation separate from the action’s safety and audit trail.

dangertest the exact action

a save command previews example values, but it cannot reproduce a member’s closed dms, role hierarchy, or an empty early case id. view the stored template, check its destination, and test with the same punishment type before relying on it in a staff procedure.