All three are in
config.lua under the same webhooks block:
config.lua
The master switch
enabled = false silences every webhook surface at once, regardless of whether URLs are configured. Useful for development - leave your live URLs in place and just flip the master switch off.
Channel archives
Posts a Discord embed for every message sent in a channel that has a URL configured./global in Discord but always want /staffchat).
Embed shape
Anonymous channels redact the author block to just
Anonymous (no avatar, no [ID N]) when the channel has anonymousInWebhook enabled. Without that flag, the channel hides the sender in-game but the webhook still shows the real character name - default behaviour, staff audit trail wins over RP anonymity.
Violations log
Posts a colour-coded embed every time a player trips a moderation rule.Fields included
Every violation embed carries:- Author - the offending player’s character name + server id + avatar.
- Description - the offending message in a code block (truncated to 1900 chars).
- Channel - the channel id and label (inline).
- Matched - the blocked-word entry that triggered the match (inline, blocked-word violations only).
- License - the player’s
license:identifier, full-width code block. Copy/paste for cross-session lookup. - Discord - mention ping of the player’s linked Discord account (inline, if linked).
Fun-commands log
Audit trail for/roll, /coinflip, /8ball, /random. These commands render only as 3D floating text above the sender - they never enter chat - so the webhook IS the audit trail.
Each embed carries:
- Author - real character name + server id + avatar (the audit point - chat saw none of this).
- Command + Result (both inline).
- Question (
/8ballonly) - the player’s original question. - Options (
/randomonly) - the comma-joined option list. - License + Discord ping fields.
Why this matters
The 3D-only model is great for RP privacy (“only nearby players see my dice roll”) but it leaves staff without a way to verify “did Brogan really roll a 20?”. Setwebhooks.funCommands and that audit trail comes back, without bringing the chat row back.
Error handling
If a webhook URL is wrong (typo, deleted from Discord, geo-blocked), the request fails silently in production. Setdebug = true in config.lua to log the HTTP status code:
Re-using URLs
You can point multiple surfaces at the same Discord channel if you want, e.g. one consolidated#chat-audit channel for both violations and fun-commands. The embed titles + colours keep them visually distinct.