utilities & info.

the small commands people use every day.

afk status and mentions

afk saves a status and tries to add [afk] to your nickname. if havoc cannot change the nickname, the status is still active. mentioning an afk member records a link for them, and speaking again clears their afk state without overwriting a nickname someone changed in the meantime.

afk status and mentions commands
commandwhat it doesneeds
/afk [status]set or update your afk status; the default is “away”anyone
/afk mentionsshow accessible mention links saved during the last 30 daysanyone
,afk back after lunch
/afk mentions

statuses may be up to 500 characters. havoc retains at most the latest 50 mention records and only displays records from channels where you can currently view the channel and read message history.

member and server lookups

these commands are available to everyone and read current discord data. omitting the member from avatar or user looks up the caller.

member and server lookups commands
commandwhat it doesneeds
/avatar [member]return the member’s current display avatar url; alias: avanyone
/user [member]show display name, id, creation and join dates, and role count; alias: userinfoanyone
/serverinfoshow server id, owner, counts, and creation date; alias: sianyone

use ids when names are ambiguous. avatar returns a direct media url rather than reposting the file, while user and server information are compact text intended for quick checks.

bot status and navigation

bot status and navigation commands
commandwhat it doesneeds
/pingshow current discord gateway latencyanyone
/uptimeshow time since this bot process startedanyone
/statsshow library version, server count, command count, and local persistent jobsanyone
/botinfoshow the same bot runtime informationanyone
/invitecreate an oauth link for the bot and application commandsanyone
/help [category or command]list categories or show live usage, aliases, and access requirementsanyone
,help utility
,help reactionhistory
/utility ping
/help query: embed edit

uptime resets when the process restarts; it is not the age of the bot account. the invite link itself requests no broad bot permissions, so server administrators can grant only the permissions needed by the modules they use.

recent deleted and changed messages

snipes are short-lived, in-memory records for the current channel. each cache holds up to 30 deleted messages, edits, and removed reactions, and entries expire after one hour. index 1 is the most recent record; higher indexes walk backward.

recent deleted and changed messages commands
commandwhat it doesneeds
/snipe [index]view a recently deleted message in this channelchannel access
/editsnipe [index]view a recent message edit in this channelchannel access
/reactionsnipe [index]view a recently removed reaction in this channelchannel access
/reactionhistory <message link>list cached removed reactions belonging to one messagemanage messages
/clearsnipeclear all three snipe caches for this channelmanage messages

callers must be able to view the channel and read its message history. reactionhistory accepts a discord message link and filters the cached reaction removals to that message.

warninga cache is not an audit log

entries disappear after an hour, on process restart, when an active-channel cache is evicted, or when staff run clearsnipe. use logging for a durable moderation record. clearing affects only the current channel and cannot be undone.

sending exact text

say sends plain text as havoc with all mentions disabled. by default it posts in the current channel. a leading channel mention chooses another channel in the same server, and --replysearches that channel’s latest 100 messages for the named user and replies to the newest match.

sending exact text commands
commandwhat it doesneeds
/say [#channel] [--reply userid] <message>send 1–2000 characters to a channel where both caller and bot can postmanage messages
,say #announcements Maintenance starts in ten minutes.
,say #support --reply 123456789012345678 Please include the error text.

the reply id must be numeric. reply lookup additionally needs read message history for both havoc and the command runner. if no recent message from that user is found, nothing is sent.

writing embed json

embed commands accept one nonempty json object. use a fenced json block or compact json after the command. the top-level properties below are the complete accepted set; unknown properties are rejected.

::title, description, url, color, timestamp
title is limited to 256 characters, description to 4096, urls must be public http or https, color is a hex value, and timestamp must be an ISO-style discord timestamp.
::author
an object with required name and optional url and icon_url.
::footer
an object with required text and optional icon_url.
::image, thumbnail
an object containing a required public url.
::fields
an array of at most 25 objects with name, value, and optional boolean inline.
,embed create {"title":"status","description":"services are online","color":"#5865f2","fields":[{"name":"region","value":"us-east","inline":true}],"footer":{"text":"updated by staff"}}

field names are limited to 256 characters and values to 1024; footer text allows 2048. all embed text together is limited to 6000 characters, and the object needs visible content. embed json does not substitute placeholder variables: text such as {user} remains literal here.

creating and editing embeds

creating and editing embeds commands
commandwhat it doesneeds
/embed <json>validate and post an embed in the current channelmanage messages
/embed create <json>the explicit create form; alias: createembedmanage messages
/embed edit <message link> <json>replace an embed previously sent by havoc; alias: editembedmanage messages

havoc needs send messages and embed links to create an embed, and embed links in the target channel to edit one. editing accepts only a message authored directly by havoc, not a webhook message. it replaces the existing embed with the validated object.

notejson quoting is strict

json requires double quotes around property names and string values. a trailing comma, a single-quoted value, a private or credential-bearing url, or an unsupported property causes validation to stop before the message is sent or edited.