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.
| command | what it does | needs |
|---|---|---|
| /invoke | show configured actions, supported destinations, usage, and placeholders | manage server |
| /invoke <action> | show whether that action uses built-in or stored response and dm wording | manage server |
| /invoke <action> message <template> | set the channel response for one action | manage server |
| /invoke <action> dm <template> | set its member dm where that action supports dms | manage server |
| /invoke <action> message view | show the exact stored response template | manage server |
| /invoke <action> dm view | show the exact stored dm template | manage 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.
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.
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
- 01
save the response
choose the exact action and
messagedestination, then write the template as the rest of the command. - 02
read it back
use the registered
message viewpath to inspect the raw stored text rather than example values. - 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 spamthe 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 viewinvoke 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.
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.
| command | what it does | needs |
|---|---|---|
| /invoke ban | show the current ban response and dm state | manage server |
| /invoke ban message view | show the stored ban response template | manage server |
| /invoke ban dm view | show the stored ban dm template | manage server |
| /invoke ban message default | clear the custom response and return to built-in wording | manage server |
| /invoke ban dm default | clear the custom dm and return to its built-in behavior | manage 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.
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.
