ChatCop | Auto Chat Moderation | 1.21-26.2 | Folia Support
v1.1.0Advanced Auto chat moderation plugin
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: https://discord.gg/6YMprsqNTT
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
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. n1gg3r, f.u.c.k, #n#i#g, s h i t and example (dot) com are all caught by the same rule that catches the plain spelling.
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
/msgaway 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
[USER=2410880]@everyone[/USER]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
The five filters
- Spam — flood detection, duplicate and near-duplicate messages (similarity based, not exact match), excessive caps, repeated characters, and cross-player raid detection
- Advertising — IPs, 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
- Toxicity — built-in slur and hate speech list, built-in sexual content list, plus your own phrases
- Threats — death threats, "kys", doxxing, DDoS and swat threats, plus your own phrases
- Profanity — censor mode (
****) or block mode, with a per-message limit before the whole message is dropped
Detection that does not get bypassed
- Leet speak —
n1gg3r,sh!t,f*ck - Separators —
f.u.c.k,#n#i#g,n-i-g - Letter spacing —
f u c k - Repeated characters —
fuuuuck - Zero-width and invisible unicode
- Whole-word matching for your custom phrases, so
negadoes not flagnegative— with regex still available when you want partial matching - A whitelist per filter for the terms your server uses legitimately
Four ways to respond
- ALLOW — let it through
- CENSOR — replace the word and send the rest
- BLOCK — stop the message
- SHADOW — ghost 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, andFish & Chipssurvives 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
- Drop
ChatCop-1.1.0.jarinto yourplugins/folder - Restart the server
- Edit
plugins/ChatCop/config.ymland run/chatcop reload
That is it — the defaults are production-ready out of the box.
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Commands
Main command: /chatcop — aliases /cc and /cop
- /chatcop help — command overview
- /chatcop reload — reload the configuration
- /chatcop stats — moderation statistics
- /chatcop history <player> — a player's violation history (works offline)
- /chatcop check <player> — points, warnings and mute status at a glance
- /chatcop test <message> — see what a message would trigger, without sending it (console too)
- /chatcop clear <player> — reset a player's points and history
- /chatcop mutelist — list active mutes
- /chatcop slowmode <seconds> — set slowmode, 0 to disable
- /chatcop lock and /chatcop unlock — lock or unlock chat
- /ccmute <player> [duration] [reason] — mute, online or offline
- /ccunmute <player> — unmute, online or offline
- /ccwarn <player> [reason] — warn a player
Durations: s, m, h, d, w — combinable, e.g. 1h30m — or perm for permanent.
Example: /ccmute Steve 2d Advertising
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Permissions
- chatcop.admin — full access (op)
- chatcop.mute — mute and unmute (op)
- chatcop.mute.exempt — cannot be muted by other staff
- chatcop.mute.override — can mute exempt players
- chatcop.warn — warn players (op)
- chatcop.notify — receive in-game alerts (op)
- chatcop.stats — view statistics (op)
- chatcop.chatlock.bypass — talk while chat is locked (op)
- chatcop.bypass — bypass all filters
- chatcop.bypass.<filter> — bypass one filter:
spam,advertising,toxicity,threats,profanity - chatcop.bypass.slowmode — bypass slowmode (op)
- chatcop.bypass.joindelay — bypass the first-join delay (op)
Note: 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.
Similar projects
Plugin →Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
Emotecraft
Create your own emotes in Minecraft.
7.5MSueta
Simple Tpa
A simple tpa plugin which sends requests
5.4MSueta
Common Network
Forge and Fabric Unified Networking Solution
3.9MSueta
Set Home
A lightweight plugin for players to set their homes.
3.8MSueta