Other modules
The remaining files in modules/. Moderation has
its own page, and so do
reports.yml, web.yml,
system-messages.yml and
minimessage-tags.yml.
Mentions
Section titled “Mentions”enabled: true # ships offhighlight: "<yellow>@<player></yellow>"cooldown: 5ssound: enabled: true key: "minecraft:entity.experience_orb.pickup" source: master volume: 1.0 pitch: 1.2Typing @name highlights the name for the mentioned player and plays them a sound.
highlight is how the mention is rendered, with <player> being the mentioned name.
Sending a mention needs voxen.chat.mention. Receiving them is a personal toggle,
/voxen mentions. The cooldown limits how often one player can mention others;
voxen.bypass.mention-cooldown skips it.
On a network, mentions reach the player wherever they are. Permission and cooldown are checked on the sending server, the toggle on the receiving one.
Private messages
Section titled “Private messages”enabled: true # ships offsender-format: "<gray>[<gold>You</gold> → <gold><target></gold>]</gray> <white><message></white>"receiver-format: "<gray>[<gold><player></gold> → <gold>You</gold>]</gray> <white><message></white>"spy-format: "<dark_gray>[Spy] <gray><player> → <target>:</gray> <message>"notify-monitored: falserespect-mutes: truesound: enabled: true key: "minecraft:block.note_block.pling" source: master volume: 1.0 pitch: 1.5The three formats take <player> (sender), <target> and <message>.
Players refuse private messages with /voxen pm; voxen.bypass.pmtoggle gets through
anyway. Ignoring someone with /ignore also blocks their private messages, and
voxen.bypass.ignore overrides that.
respect-mutes: true makes a server-wide mute cover /msg and /r as well. A mute limited
to one channel never applies here. The other moderation checks have their own affect-pm
switches in modules/moderation.yml, see Moderation.
Social spy
Section titled “Social spy”/voxen spy with voxen.socialspy shows other players’ conversations using
spy-format. notify-monitored: true warns both sides that someone watched.
Parties
Section titled “Parties”enabled: falsemax-members: 8invite-expiry: 60sOff by default, because most servers already get their groups from a party, faction or guild
plugin. enabled: true brings back /party after a restart.
Party chat goes through the party channel, or the # quick prefix from anywhere. That
channel ships disabled too, so turn channels/party.yml on in the same pass.
Membership is stored in the database, so with MySQL a party survives a server hop.
Offline mail
Section titled “Offline mail”enabled: falsemax-per-player: 30expire-days: 30notify-on-join: trueallow-when-online: falsecooldown: 30sOff by default, because Essentials and most kitchen sink plugins already have mail.
enabled: true brings back /mail after a restart.
/mail send <player> <text> leaves a message for someone who is not online. Mail lives in
the database, so on a network every server sees the same mailbox and no broker traffic is
needed. On join a player is told how much unread mail is waiting.
Mail goes through the same checks as a private message: mutes, the word and link filters,
the spam guard and the maximum length from modules/private-messages.yml. It also respects
/ignore, and a full mailbox refuses new mail instead of dropping the oldest message.
expire-days: 0 keeps mail forever, otherwise anything older is deleted on startup.
allow-when-online: false points players at /msg when the recipient is reachable, on this
server or anywhere on the network.
Moderator tools
Section titled “Moderator tools”enabled: truedialogs: falsemanage-button: falsedialog-buttons: []warnings: enabled: false expire: 30d notify-target: true rules: - at: 3 repeat: false commands: - "voxen mute <player> 1h Too many warnings" - at: 5 repeat: false commands: - "voxen mute <player> 1d Too many warnings" - "kick <player> Too many warnings (<count>)"notes: enabled: falsejoin-alerts: falsemessage-delete: enabled: true keep: 200 button: trueOut of the box only message-delete is on, so staff get the [x] in front of every message
and nothing else. Each of the other tools has its own switch above; dialogs needs a
1.21.6+ client and join-alerts needs warnings or mutes to have anything to say.
/voxen inspect <player> sums a player up in one screen: their server, active channel, mutes,
warning count and note count. /voxen warn <player> <reason> stores a warning, tells staff with
voxen.mod.alerts and runs whatever rules you set up. /voxen warns lists them,
/voxen unwarn <player> <number> drops one.
Every entry under rules fires its commands from the console when the player’s active warning
count hits at. repeat: false fires on that exact count only, repeat: true fires again on
every multiple of it, so at: 3 with repeat: true also fires at 6 and 9. The commands accept
<player>, <uuid>, <count>, <moderator> and <reason>, and can be anything your server
knows: voxen mute, kick, a ban plugin, a broadcast. An empty rules list means a warning
only gets recorded.
expire says how long a warning counts, taking values like 30d, 12h or 1w. Older warnings
stop counting and are deleted on startup; never keeps them forever.
/voxen notes <player> holds staff-only notes the player never sees, with add and del
subcommands. join-alerts pings staff when someone with active mutes or warnings logs in.
/voxen delete <player> [amount] wipes that player’s newest messages from everyone’s chat.
It needs chat-delivery: player in config.yml, because messages Voxen sends itself are not
signed and clients refuse to delete them. keep is how many recent messages stay deletable.
Both staff buttons sit at the very start of the line, in front of the channel’s own formatting.
manage-button: true draws a yellow [🔧] for staff holding voxen.mod.inspect,
which runs /voxen inspect on the author and so opens the management screen straight from chat.
With button: true staff holding voxen.mod.delete also get a red [x] in front of every message,
which deletes that one message for everyone. It is only drawn when the click would actually
work, so it stays hidden for unsigned messages and for players with voxen.mod.delete.exempt,
and the permission is checked again when clicked.
Dialog screens
Section titled “Dialog screens”With dialogs: true, /voxen inspect also opens a dialog screen with a reason field and
buttons for warn, mute (10m, 1h, 1d), unmute, notes, nickname, history and delete, and /voxen warn
without a reason opens a confirmation screen instead of complaining. Every button is filtered
by permission and rechecks it when clicked, so a dialog left open grants nothing. The screen carries a
reason field and a nickname field, the latter needing voxen.nick.others and an online target,
and an empty nickname resets it.
The delete button comes with a slider for how many of the player’s newest messages to wipe,
starting at 5 and capped at message-delete.keep or 100, whichever is lower.
dialog-buttons adds your own buttons to that screen. Each entry takes a MiniMessage label
and a command, optionally a permission that hides the button from staff without it and
console: true to run the command from the console instead of as the clicking moderator.
<player>, <uuid> and <moderator> are replaced before the command runs.
dialog-buttons: - label: "<red>Ban" command: "ban <player> Cheating" permission: "voxen.mod.ban" console: true - label: "Teleport" command: "tp <player>"The notes button opens a page of its own listing the player’s notes, with a field for a new one, an add button and a delete button per note (first ten), plus a back button to the main screen. Every write reopens the page with the fresh list.
Presence
Section titled “Presence”enabled: true # ships offheartbeat: 15sttl: 60ssuggest-remote-players: trueTracks which server each player on the network is on so private messages go straight there.
Does nothing without network.transport, see Cross-server.
It is also what tells a server switch apart from a real disconnect in
system messages.
Emotes
Section titled “Emotes”enabled: true # ships offrequire-permission: trueemotes: heart: "❤" star: "★" shrug: "¯\\_(ツ)_/¯" tableflip: "(╯°□°)╯︵ ┻━┻"Shortcodes between colons turn into real characters, so :heart: becomes ❤. The emotes
map is the whole feature: key is the shortcode without colons, value is what it becomes.
Names may contain a-z, 0-9, _, + and -; anything else is skipped with a warning
on load.
With require-permission: true a player needs voxen.chat.emote.<name> for one emote or
voxen.chat.emote for all of them. Set it to false and everyone gets everything.
Unknown shortcodes stay exactly as typed, so ordinary text like 1:2:3 is safe.