Features
Beyond on-demand commands, Citadel Bot runs several background features. All are
configured per-server in config/servers.js.
Live chat feed
Relays messages from Discord channels into your DayZ server, so your community can talk to players in-game from Discord.
- Set
USE_CHAT_FEED: trueand list channels inCHAT_FEED_CHANNEL_IDS. - Messages are prefixed with a colored role tag (
[OWNER],[ADMIN],[MOD],[SURVIVOR]) viaCHAT_FEED_DISCORD_TAGS. - A per-user
CHAT_FEED_MESSAGE_COOLDOWN(seconds) prevents spam. - Restrict who can relay with
CHAT_FEED_REQUIRED_ROLE_IDS.
The bot needs the Message Content Intent for this (see Prerequisites).
Delayed killfeed
Forwards kill messages from a CFTools webhook channel to a public channel, on a delay — so you can run a "delayed killfeed" that doesn't reveal live positions.
USE_KILL_FEED: true, setKILL_FEED_CHANNEL_ID(the public channel).KILL_FEED_DELAY(minutes) buffers each kill before forwarding.KILL_FEED_MESSAGE_IDENTIFIERis the substring that marks a kill line; setKILL_FEED_REMOVE_IDENTIFIER: trueto strip it from the forwarded message.
Watch list
Get pinged when a specific player logs in.
- Manage entries with
/watch-list. - Notifications post to
WATCH_LIST_CHANNEL_IDand pingWATCH_LIST_NOTIFICATION_ROLE_ID.
Useful for keeping eyes on suspected cheaters or VIPs.
Leaderboards
Two ways to surface rankings:
- On demand —
/leaderboardwith a stat picker (LEADERBOARD_STATS), limited toLEADERBOARD_PLAYER_LIMIT, excludingLEADERBOARD_BLACKLIST. - Automatic — set
AUTO_LB_ENABLED: trueandAUTO_LB_CHANNEL_ID. The bot posts a leaderboard on boot and everyAUTO_LB_INTERVAL_IN_MINUTES. WithAUTO_LB_REMOVE_OLD_MESSAGES: trueit cleans its previous posts first (needs Manage Messages permission in that channel).
The OVERALL stat is a composite ranking driven by OVERALL_RANKING_STAT.
Teleport locations
Instead of remembering coordinates, define named destinations with autocomplete.
- Set
USE_TELEPORT_LOCATIONS: trueandTELEPORT_LOCATIONS_FILE_NAMEto a file underconfig/teleport-locations/<name>.json. - The
/teleport-to-location,/teleport-multiple-to-location, and/teleport-all-to-locationcommands then offer those names via autocomplete.
Each location file is a JSON array of { name, x, y, z } entries.
Hit-zone heatmaps
/statistics can render a body heat map showing where a player has been hit,
colored yellow → red by frequency over the hit zones (head, torso, limbs, etc.).
- Enable with
STATISTICS_INCLUDE_ZONES_HEATMAP: true. - The image is rendered server-side with
@napi-rs/canvas— no headless browser or Chromium is required, so it works out of the box on any host.
The heatmap only appears when the player has recorded hit-zone data.
Next: Storefront Relay.