Documentation menu

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: true and list channels in CHAT_FEED_CHANNEL_IDS.
  • Messages are prefixed with a colored role tag ([OWNER], [ADMIN], [MOD], [SURVIVOR]) via CHAT_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, set KILL_FEED_CHANNEL_ID (the public channel).
  • KILL_FEED_DELAY (minutes) buffers each kill before forwarding.
  • KILL_FEED_MESSAGE_IDENTIFIER is the substring that marks a kill line; set KILL_FEED_REMOVE_IDENTIFIER: true to 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_ID and ping WATCH_LIST_NOTIFICATION_ROLE_ID.

Useful for keeping eyes on suspected cheaters or VIPs.

Leaderboards

Two ways to surface rankings:

  • On demand/leaderboard with a stat picker (LEADERBOARD_STATS), limited to LEADERBOARD_PLAYER_LIMIT, excluding LEADERBOARD_BLACKLIST.
  • Automatic — set AUTO_LB_ENABLED: true and AUTO_LB_CHANNEL_ID. The bot posts a leaderboard on boot and every AUTO_LB_INTERVAL_IN_MINUTES. With AUTO_LB_REMOVE_OLD_MESSAGES: true it 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: true and TELEPORT_LOCATIONS_FILE_NAME to a file under config/teleport-locations/<name>.json.
  • The /teleport-to-location, /teleport-multiple-to-location, and /teleport-all-to-location commands 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/canvasno 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.