COWMODSКаталог модов

ChatCop

Lightweight advanced chat moderation plugin. Blocks racism, threats, toxicity, advertising and spam with smart bypass detection.

Автор: Abood_80013060обновлён 12 сент. 2026 г.
УправлениеОбщениеУтилиты

Описание

ChatCop

Smart, automatic chat moderation — spam, ads, toxicity, threats and profanity, handled for you
Spigot · Paper · Purpur · Folia  |  1.20 – 1.21.x  |  Java 17+  |  One jar, no dependencies

Discord Support


ChatCop reads every message your players send — in chat, in private messages, on signs, in books and in anvil renames — and acts on it in real time.

The difference is the detection. Most chat plugins match words. ChatCop normalises the message first, so leet speak, symbol substitution, dots between letters, spaced-out words, repeated characters and invisible unicode all collapse down to the real text before anything is checked.

Demonstrated on a harmless word: sp4mm3r, s.p.a.m, #s#p#a#m, s p a m and example (dot) com are all caught by the same rule that catches the plain spelling. The built-in lists those rules run against cover slurs, hate speech, threats and profanity.

Everything runs in memory, async where it matters, with zero heavy dependencies.


What's new in 1.1.0

  • Private messages and commands are filtered — without this, every filter was one /msg away from being bypassed
  • Signs, books and anvil renames are filtered too
  • Raid detection — catches the same line arriving from many accounts at once, which per-player tracking cannot see
  • Chat control — slowmode, a global chat lock, and a first-join chat delay that shuts down bot raids
  • Offline mutes — mute and unmute players who are not on the server
  • Points, warnings and history now survive restarts
  • Per-filter bypass permissions, plus mute-exempt and mute-override
  • Sexual content detection, reported separately from slurs
  • Discord queue — a spam wave can no longer trip your webhook's rate limit, and @everyone in a flagged message can never ping your server
  • Built-in update checker and optional bStats metrics

Upgrading from 1.0.x? Just replace the jar. Every new option has a built-in default, so your existing config.yml keeps working — add only the keys you want to change.


Features

Five filters, four ways to respond, and a points system that escalates punishments on its own.

The five filters

FilterWhat it catches
SpamFlood detection, duplicate and near-duplicate messages (similarity based, not exact match), excessive caps, repeated characters, cross-player raid detection
AdvertisingIPs, URLs, domains, Minecraft server addresses and Discord invites, including spelled-out forms. IP and URL blocking toggle independently, with a domain whitelist for your own addresses
ToxicityBuilt-in slur and hate speech list, built-in sexual content list, plus your own phrases
ThreatsDeath threats, "kys", doxxing, DDoS and swat threats, plus your own phrases
ProfanityCensor mode (****) or block mode, with a per-message limit before the whole message is dropped

Detection that doesn't get bypassed

Shown with a harmless word — the built-in lists cover the real ones.

  • Leet speak — sp4mm3r, h4ck3r, n00b
  • Separators — s.p.a.m, #s#p#a#m, s-p-a-m
  • Letter spacing — s p a m
  • Repeated characters — spaaaaam
  • Zero-width and invisible unicode
  • Whole-word matching for your custom phrases, so nega does not flag negative — with regex still available when you want partial matching
  • A whitelist per filter for the terms your server uses legitimately

Four ways to respond

ActionBehaviour
ALLOWLet it through
CENSORReplace the word and send the rest
BLOCKStop the message
SHADOWGhost punishment. The message is hidden from everyone except the sender, so they think it sent fine and never learn what your filter catches

Punishments that escalate on their own

  • Every violation awards points, and points decay over time for good behaviour
  • Crossing a threshold runs the commands you configure — works with LiteBans, EssentialsX, AdvancedBan or anything else that has a command
  • Per-filter commands on top of that, for an instant reaction to a specific offence
  • A per-player cooldown, so one spammer cannot trigger thirty punishments in three seconds
  • Built-in mutes and warnings — temporary or permanent, offline players included, persisted to disk

Chat control

  • Slowmode — a minimum wait between messages
  • Chat lock — freeze chat instantly, staff can still talk
  • First-join delay — new connections must wait before their first message. Extremely effective against bot raids

Alerts and integrations

  • Discord webhooks — rich embeds, per-filter colour and toggle, manual staff actions, rate-limit aware queue
  • In-game staff alerts with a configurable format and sound, optional console mirroring
  • PlaceholderAPI — 15 placeholders for points, warnings, mute status, slowmode, chat lock and server-wide statistics
  • bStats metrics (optional, and off until you set a service id)
  • Update checker — Spigot or Modrinth, notifies admins on join. It only reads a version number, it never downloads anything

Built for real servers

  • Folia-ready — the same jar runs on Spigot, Paper, Purpur and Folia
  • Per-world disable for staff and creative worlds (mutes stay enforced)
  • Hex colour support (&#RRGGBB) everywhere, and Fish & Chips survives unmangled
  • Rotating log file and persistent statistics
  • Every player-facing message is editable
  • Tab completion on every command

Requirements

  • Server: Spigot, Paper, Purpur or Folia 1.20+ (tested through 1.21.x)
  • Java: 17 or newer
  • PlaceholderAPI: optional

Installation

  1. Drop ChatCop-1.1.0.jar into your plugins/ folder
  2. Restart the server
  3. Edit plugins/ChatCop/config.yml and run /chatcop reload

That is it — the defaults are production-ready out of the box.


Commands

Main command: /chatcop — aliases /cc and /cop

CommandDescriptionPermission
/chatcop helpCommand overviewchatcop.admin
/chatcop reloadReload the configurationchatcop.admin
/chatcop statsModeration statisticschatcop.stats
/chatcop history <player>A player's violation history (works offline)chatcop.admin
/chatcop check <player>Points, warnings and mute status at a glancechatcop.admin
/chatcop test <message>See what a message would trigger, without sending it (console too)chatcop.admin
/chatcop clear <player>Reset a player's points and historychatcop.admin
/chatcop mutelistList active muteschatcop.mute
/chatcop slowmode <seconds>Set slowmode, 0 to disablechatcop.admin
/chatcop lock · /chatcop unlockLock or unlock chatchatcop.admin
/ccmute <player> [duration] [reason]Mute, online or offlinechatcop.mute
/ccunmute <player>Unmute, online or offlinechatcop.mute
/ccwarn <player> [reason]Warn a playerchatcop.warn

Durations: s, m, h, d, w — combinable, e.g. 1h30m — or perm for permanent. Example: /ccmute Steve 2d Advertising


Permissions

PermissionDescriptionDefault
chatcop.adminFull accessop
chatcop.muteMute and unmuteop
chatcop.mute.exemptCannot be muted by other stafffalse
chatcop.mute.overrideCan mute exempt playersfalse
chatcop.warnWarn playersop
chatcop.notifyReceive in-game alertsop
chatcop.statsView statisticsop
chatcop.chatlock.bypassTalk while chat is lockedop
chatcop.bypassBypass all filtersfalse
chatcop.bypass.<filter>Bypass one filter: spam, advertising, toxicity, threats, profanityfalse
chatcop.bypass.slowmodeBypass slowmodeop
chatcop.bypass.joindelayBypass the first-join delayop

chatcop.bypass skips the filters. It does not let a muted player talk — mutes are always enforced.


PlaceholderAPI

Player: %chatcop_points% · %chatcop_warns% · %chatcop_muted% · %chatcop_mute_time% · %chatcop_mute_reason% · %chatcop_bypass%

Server: %chatcop_total_messages% · %chatcop_total_blocked% · %chatcop_total_censored% · %chatcop_total_mutes% · %chatcop_total_warns% · %chatcop_block_rate% · %chatcop_active_mutes% · %chatcop_slowmode% · %chatcop_chat_locked%


Configuration

Every option is commented in the file, and every option has a built-in default — so an older config keeps working after an update.

Placeholders for punishment commands:

TokenMeaningTokenMeaning
%player%Offending player%punisher%Who triggered it
%uuid%Offending player's UUID%reason%Why it was flagged
%message%The offending message%duration%Punishment duration
%filter%Filter name%world%World name

In the messages section, both {name} and %name% forms work.

config.yml (click to expand)
general:
  # Enable debug mode - logs filter decisions to console (disable on production)
  debug: false
  # Save all blocked messages to a log file
  log-to-file: true
  # Path to the log file (relative to the ChatCop plugin folder)
  log-file: "logs/chatcop.log"
  # Rotate the log once it passes this size, in KB. 0 disables rotation.
  log-max-size-kb: 5120
  # Silent mode - block messages without telling the sender
  silent-block: false
  # Worlds where chat filtering is skipped (e.g. staff worlds).
  # Mutes are still enforced in these worlds.
  disabled-worlds: []

  # Checks for a newer version on startup and tells you about it. It only
  # READS the latest version number - it never downloads or installs anything.
  # Runs fully async and fails silently if offline.
update-checker:
  enabled: true
  # Also notify players with chatcop.admin when they join, if an update exists
  notify-admins: true
  # Where to check for the latest version: "spigot" or "modrinth"
  source: "spigot"

  # Anonymous usage statistics (bStats). Register your plugin at bstats.org,
  # then paste the service id below. Left at 0, no metrics are sent at all.
metrics:
  enabled: true
  service-id: 0

  # Shown in all messages. Supports & color codes and &#RRGGBB hex.
  # Write && for a literal ampersand.
prefix: "&8[&bChat&3Cop&8] "

  # Every filter awards points. Points decay over time. When a player total
  # crosses a threshold, that threshold commands run. This is SEPARATE from
  # the per-filter punishment commands, which run instantly.
punishments:
  # How many points a player loses per minute of good behaviour
  point-decay-per-minute: 2
  # Minimum seconds between punishment commands for the same player.
  # Stops a spammer from triggering dozens of punishments in seconds.
  punishment-cooldown-seconds: 3
  thresholds:
    15:
      commands:
        - "ccwarn %player% Repeated chat violations"
    30:
      commands:
        - "tempmute %player% 10m Repeated chat violations"
    50:
      commands:
        - "tempmute %player% 1h Excessive chat violations"

  # Server-wide controls that run before the filters.
chat-control:
  # Seconds a player must wait between messages. 0 disables it.
  # Bypass: chatcop.bypass.slowmode
  slowmode-seconds: 0
  # Seconds a player must be connected before they may chat.
  # Very effective against bot raids. 0 disables it.
  # Bypass: chatcop.bypass.joindelay
  first-join-delay-seconds: 0
  # Start with chat locked (staff with chatcop.chatlock.bypass can still talk)
  locked-on-start: false

  # Without this, every filter is one /msg away from being bypassed.
command-filter:
  enabled: true
  # Commands whose text is run through the chat filters.
  # Format "<command>:<args-before-message>" - /msg <player> <message>
  # has one argument before the message, /me <message> has none.
  filtered:
    - "msg:1"
    - "tell:1"
    - "whisper:1"
    - "w:1"
    - "m:1"
    - "t:1"
    - "r:0"
    - "reply:0"
    - "me:0"
    - "say:0"
    - "mail:1"
    - "broadcast:0"
  # Commands a muted player may not use at all.
  blocked-when-muted:
    - "msg"
    - "tell"
    - "whisper"
    - "w"
    - "m"
    - "r"
    - "reply"
    - "me"
    - "mail"
    - "say"
    - "broadcast"

  # The other places players can write text.
extras:
  filter-signs: true
  filter-books: true
  filter-anvil: true

  # Mute storage.
mutes:
  # Keep mutes across restarts
  persistent: true
  # Where mutes are stored (relative to the ChatCop plugin folder)
  storage-file: "data/mutes.yml"

  # Violation points, warning counts and history.
player-data:
  # Keep them across restarts. Turn off to make them session-only.
  persistent: true

filters:

  # -- SPAM FILTER --------------------------------------------
  spam:
    enabled: true
    # Violation points awarded when this filter is triggered
    points: 4
    # How many seconds a message is remembered for duplicate checks
    duplicate-content-expiry: 8
    # How many similar messages are allowed before blocking
    duplicate-threshold: 4
    # Max number of messages allowed within the flood window
    flood-messages: 6
    # Time window in seconds to track message flooding
    flood-window: 3
    # How similar two messages must be to count as duplicate (0.0 - 1.0)
    # 1.0 = identical only, 0.8 = 80% similar
    similarity-threshold: 0.80
    # Percentage of capital letters to trigger caps warning (0 - 100)
    caps-threshold: 70
    # Minimum message length before the caps check applies
    caps-min-length: 12
    # Points awarded for excessive caps (usually lower than main points)
    caps-points: 2
    # Block messages with a character repeated too many times ("heeellooo")
    repeated-chars: true
    repeated-chars-threshold: 10
    # Catches the same line arriving from several accounts at once, which is
    # what a bot raid looks like. Per-player tracking cannot see this, because
    # each account only sends the message once.
    cross-player:
      enabled: true
      # How many different players must send it within the window
      player-threshold: 4
      # Window in seconds
      window: 10
      # How similar the messages must be (0.0 - 1.0)
      similarity: 0.90
      points: 6
    punishment:
      # Commands to run when this filter is triggered (leave empty [] for none)
      commands: []

  # -- ADVERTISING FILTER -------------------------------------
  advertising:
    enabled: true
    points: 10
    # Block raw IP addresses (e.g. 192.168.1.1)
    block-ips: true
    # Block URLs, domains and Discord invites
    block-urls: true
    # Extra domains to block. A plain word is matched as a whole word;
    # anything containing regex characters is treated as a regex.
    blocked-domains: []
    # Domains that are always allowed (put your own server domains here)
    whitelist-domains: []
    punishment:
      commands: []

  # -- TOXICITY FILTER ----------------------------------------
  toxicity:
    enabled: true
    points: 8
    # Ghost/shadow mode: flagged messages are hidden from everyone EXCEPT the
    # sender, so they think it sent fine and don't try to bypass.
    shadow-mode: false
    # Built-in list of racial and identity slurs
    block-slurs: true
    # Built-in list of sexual content (reported separately from slurs)
    block-sexual-content: true
    # Smart detection sees through leet speak, symbols and letter spacing
    smart-detection: true
    # Your own phrases. A plain word matches as a whole word, so "nega" will
    # NOT flag "negative". Use regex if you want partial matching.
    blocked-phrases: []
    # Phrases that should never be flagged by this filter
    whitelisted-phrases: []
    punishment:
      commands: []

  # -- THREAT FILTER ------------------------------------------
  threats:
    enabled: true
    points: 12
    shadow-mode: false
    blocked-phrases:
      - "i will leak your ip"
      - "i will ddos"
      - "i will doxx"
    whitelisted-phrases: []
    punishment:
      commands: []

  # -- PROFANITY FILTER ---------------------------------------
  profanity:
    enabled: true
    points: 3
    # Censor mode replaces bad words instead of blocking the message.
    # If a message can't be censored safely (spaced-out obfuscation, for
    # example) it is blocked rather than sent through uncensored.
    censor-mode: true
    # Character used to replace bad words
    censor-char: "*"
    # Points awarded when a message is censored rather than blocked
    censor-points: 1
    # How many profane words are allowed before blocking the message entirely
    max-per-message: 3
    blocked-phrases: []
    whitelisted-phrases: []
    punishment:
      commands: []

  # Discord webhook alerts.
discord:
  enabled: false
  # Your Discord webhook URL (channel settings > integrations)
  webhook-url: ""
  # Also post manual staff actions (mutes, unmutes, warns)
  staff-actions: true
  # Colour for staff action embeds
  action-color: 3447003
  # Alerts are queued and sent one at a time so a spam wave doesn't
  # trip Discord's rate limit.
  send-interval-seconds: 2
  # Maximum queued alerts before the oldest are dropped
  queue-limit: 50
  filters:
    # Each filter can be individually enabled/disabled for webhook alerts.
    # Color is decimal - use https://www.spycolor.com to convert from hex.
    Spam:
      enabled: false
      color: 16776960
    Advertising:
      enabled: true
      color: 16753920
    Toxicity:
      enabled: true
      color: 16711680
    Threats:
      enabled: true
      color: 9109504
    Profanity:
      enabled: false
      color: 16755200
  # Fallback color if the filter name doesn't match any above
  default-color: 16711680
  # URL to an image shown as the footer icon (leave empty to disable)
  footer-icon: ""
  # URL to an image shown as the embed thumbnail (leave empty to disable)
  thumbnail: ""

  # In-game staff alerts.
notifications:
  # Send in-game alerts to players with chatcop.notify
  staff-alerts: true
  # Also announce manual staff actions (mute, unmute, warn)
  staff-action-alerts: true
  # Mirror alerts to the server console
  log-to-console: true
  # Send the alert to the offending player too (useful when testing)
  notify-offender: false
  # Trim the quoted message in alerts to this many characters
  max-message-length: 50
  alert-format: "&8[&cAlert&8] &7%player% &8| &f%filter% &8| &7\"%message%\""
  action-format: "&8[&bChatCop&8] &7%actor% &f%action% &7%target%&f %detail%"
  # Play a sound to staff when an alert is sent
  alert-sound: true
  # Either a Bukkit sound name (BLOCK_NOTE_BLOCK_PLING) or a namespaced
  # key (block.note_block.pling). Both work on every supported version.
  alert-sound-type: "BLOCK_NOTE_BLOCK_PLING"

  # Supports & color codes and &#RRGGBB hex. Write && for a literal &.
  # Both {name} and %name% placeholders work.
messages:
  blocked: "&cYour message was blocked. Reason: &f{reason}"
  censored: "&eYour message contained inappropriate language and was censored."
  muted: "&cYou are muted. &7Time remaining: &f{time} &8| &7Reason: &f{reason}"
  muted-permanent: "&cYou are permanently muted. &7Reason: &f{reason}"
  unmuted: "&aYou are no longer muted."
  warned: "&eWarning &7({count}): &f{reason}"
  mute-success: "&aMuted &f{player} &afor &f{duration}&a: &f{reason}"
  unmute-success: "&aSuccessfully unmuted &f{player}&a."
  warn-success: "&aWarned &f{player} &7({count})&a: &f{reason}"
  already-muted: "&c{player} is already muted."
  not-muted: "&c{player} is not muted."
  mute-exempt: "&c{player} cannot be muted."
  slowmode: "&cSlowmode is on. &7Wait &f{time} &7before chatting again."
  join-delay: "&cYou just joined. &7You can chat in &f{time}&7."
  chat-locked: "&cChat is currently locked by staff."
  chat-lock-on: "&cChat has been locked by staff."
  chat-lock-off: "&aChat has been unlocked."
  reload-success: "&aChatCop configuration reloaded."
  player-not-found: "&cPlayer not found: &f{player}"
  no-permission: "&cYou don't have permission to do that."

Need help, or want a feature?
Join the Discord

Bugs and suggestions are welcome on the issues page. If ChatCop keeps your chat clean, a rating helps a lot.

Галерея

Последние версии

Все версии →
release

ChatCop 1.1.0

1.1.0
12 сент. 2026 г.213Minecraft: 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2folia, paper, purpur, spigot
Скачать
Что нового
Added: - Private messages and other chat commands (/msg, /me, /mail and more) now go through the same filters as normal chat - Muted players can no longer talk through private messages or other chat commands - Sign, book and anvil rename filtering - Chat slowmode, a global chat lock, and a first-join chat delay that stops bot raids - Raid detection for the same message arriving from many accounts at once - Mutes and unmutes now work on offline players - Violation points, warnings and history are now kept across restarts - Per-filter bypass permissions, so you can exempt someone from one filter instead of all of them - Mute-exempt and mute-override permissions so staff cannot mute each other by accident - New subcommands: check, clear, mutelist, slowmode, lock and unlock - Tab completion on every command - Built-in update checker that tells you when a new version is out - Optional bStats metrics - Discord alerts for manual mutes, unmutes and warnings - The mute reason is now shown to the muted player - Sexual content is now detected and reported separately from slurs - Automatic log file rotation Fixed: - Words hidden with symbols no longer pass straight through the filter - Letter-spaced words are now caught - Words with trailing punctuation could slip past detection - Staff alert sounds threw a console error on 1.21.3 and newer, and no sound played at all - Players with the bypass permission could talk while muted - Muted players could talk freely in any world where filtering was disabled - Messages could be delivered uncensored while the player was told they had been censored - Shadow-flagged messages could still be relayed to Discord by chat bridge plugins - Ordinary chat was flagged as advertising, such as "that was fun.me and you" or "see you.tv" - Custom blocked domains were still enforced after URL blocking was turned off - A whitelisted word could be used to smuggle a blocked word past the filter beside it - The word "crackers" was flagged as a slur - A blank entry in a blocked phrase list silently blocked every message on the server - A custom phrase like "nega" also matched "negative"; plain words now match as whole words only - Reloading could throw an error if someone was chatting at that moment - Certain censor characters threw an error and dropped the message - All active mutes were silently wiped on reload when mute saving was turned off - Ampersands in messages were mangled, turning "Fish & Chips" into broken text - The flood window was capped at 10 seconds no matter what you configured - Duplicate message detection compared messages inconsistently and under-detected repeats - A single profane word could count as two or three against the per-message limit - The configurable no-permission message was never actually shown to players - The statistics permission was documented but never checked - Testing a message polluted the tester's own spam tracking and could trip their own filter - An @everyone inside a flagged message pinged the entire Discord server - Mute settings were being read but were missing from the config file entirely - A mute duration without a unit silently became a permanent mute Improved: - Now runs on Java 17, restoring support for 1.20.x servers that run Java 17 - PlaceholderAPI support expanded to 15 placeholders - Discord alerts are queued and rate-limit aware instead of one request per message - The violation log is buffered and rotated instead of being rewritten on every message - Settings are cached instead of being re-read for every single message - Advertising detection now sees through spelled-out addresses like "example (dot) com" - History and message testing now work for offline players and from the console - Unmute tab completion suggests players who are actually muted - Staff alerts can be mirrored to console, and the quoted message length is configurable - Config file rewritten with clearer comments and no leftover example values - Existing config files keep working after updating, since every new option has a default - Full documentation refresh
release

ChatCop 1.0.4

1.0.4
9 июл. 2026 г.48Minecraft: 1.21, 26.1bukkit, folia, paper, purpur, spigot
Скачать
Что нового
DiscordSRV leak — fixed. SHADOW action now cancels the AsyncPlayerChatEvent (after manually delivering the formatted message to just the sender, preserving the shadow-ban illusion). Since DiscordSRV skips cancelled chat events by default, shadow-blocked and blocked messages will no longer reach a linked Discord channel. BLOCK was already safe since it cancels the event; CENSOR was already safe since ChatCop rewrites the message before DiscordSRV's listener runs.
release

ChatCop 1.0.2

1.0.2
27 июн. 2026 г.15Minecraft: 1.21, 26.1bukkit, paper, purpur, spigot
Скачать
Что нового
## ChatCop v1.0.2 — Accuracy & Stability Update ### 🐛 Bug Fixes - **Fixed false flags on normal words.** Words like *night, nightmare, neighbor, knight, midnight, overnight, Nigeria, snigger* and similar are no longer mistakenly detected as slurs. Slur detection is now properly word-boundary anchored. - **Fixed whitelist bypass.** A whitelisted word now only exempts itself — it can no longer be used to sneak banned content through the rest of a message. - **Fixed /chatcop reload** not applying changes to punishment thresholds, point decay, or cooldowns. - **Mutes no longer lost on crash.** Mutes are now saved instantly when applied or removed (previously only on clean shutdown). - **Stats no longer lost on crash.** Statistics now auto-save every 5 minutes. - **Fixed /ccmute with an invalid duration** (e.g. *0m*) silently issuing a **permanent** mute — it now shows an error instead. - **Fixed Discord webhook alerts** occasionally failing on messages containing special/control characters. ### ⚙️ Improvements - The advertising filter's **block-ips** and **block-urls** options now actually work — you can toggle IP and URL/domain blocking independently. - Cleaned up the config: removed an unused/misleading option and corrected command usage text. - Fixed a memory leak in the profanity filter that occurred on reload, plus minor spam-detection performance improvements.
release

ChatCop 1.0.0

1.0.0
30 мая 2026 г.30Minecraft: 1.19, 1.20, 1.21, 26.1bukkit, paper, purpur, spigot
Скачать
Что нового
## ChatCop 1.0.0 - Initial Release ### Features - Spam filter (flood, duplicates, caps, repeated chars) - Advertising filter (IPs, URLs, Discord links) - Toxicity filter (slurs, hate speech, smart bypass detection) - Threat filter (death threats, dox, DDoS threats) - Profanity filter (censor mode) - Per-filter custom punishment commands - Discord webhook with rich embeds - PlaceholderAPI support - Staff in-game alerts - Persistent mute system - Full log file support