# ChatSentry

Superior message filtration and control for Minecraft servers

![](/files/eNCKHCcTFwy79iva1j59)

**Meet ChatSentry,** a super **easy to use**, **yet** **incredibly effective and sophisticated** **chat & message filtration, control, and management system** that seamlessly integrates with your server to add astoundingly smart filtration and protection against many kinds of chat/message abuse public servers are subject to, without interfering with players who are just playing your server as it should.

Composed of **unique, powerful, custom detection logic and dynamically tuning checks that have been expertly engineered** **and rigorously trained**, ChatSentry has incorporated top notch recognition abilities in to each and every check it offers that won't disappoint you.

<div align="left"><img src="/files/-MMYheNcwQphZSDunr70" alt=""></div>

**Introducing intelligent dialogue awareness, capable of providing real time self tuning based off context prediction;** a unique feature of ChatSentry allowing the plugin to **truly understand the nature of your servers chat** in ways other plugins have never been able to.&#x20;

Through efficient and deep analysis of players messages, including speed and typing patterns, the plugin can intelligently recognize and block players trying to bypass or exploit its filters, whether by adding additional letters, symbols, numbers, etc. to their messages, stretching words, and so forth - **just like a real human mod!**

Not only does the plugin support filtration of chat and commands, but applicable modules also support **signs, anvils, and books, for complete protection across all contexts of messages**.\
\
On top of this, many features include specially designed subchecks specifically designed to detect players using **hacked clients** **and cheats** to try and bypass checks, write in unicode based fonts, parrot other players, and more.​

<div align="left"><img src="/files/-MMYheN_OklfvsVsbI1_" alt=""></div>

Say goodbye to those trolls who join just to cause havoc - ChatSentry will take care of them without hassle.\
\
The plugin comes equipped with a **fully decked out with an auto-punishment system** that works to **automagically deal with and punish players who excessively trigger the plugins filters and restrictions** within similar time frames.\
\
Use the preconfigured setup, or create your own custom punishment rules per filter / restriction; set how many times a player must trigger particular filters before executing configured commands or actions on them, and more.  **Ex. after triggering the word and phrase filter 5 times within 24 hours mute the violator, after triggering it 10 times within 24 hours ban them**.

<div align="left"><img src="/files/-MMYheNiuhYjPJ-iBexV" alt=""></div>

​ As well as automated tools, ChatSentry provides your admins with useful utilities like **instant chat clearing, panic mode** which disables all chat from non-authorized users, **a manual non-filter related warning system** integrated with the auto punisher, **a built in, highly detailed logging system with easy old log data purging** to save detections & or blocked/modified actions, fully integrated with a custom in-game lookup engine that allows filtered searches so you can focus in on the results you're looking for, **server lockdown mode** which toggles a lock on your server that can either **block unseen before/unknown players from joining, or everybody except those who are on the exemption list**, and more tools.

<div align="left"><img src="/files/-MMYi5aGz8nz7v0IFqp9" alt=""></div>

ChatSentry offers tons of settings to allow you to fine tune the plugin to exactly what your server needs.\
\
Don't feel like going through each setting? **You're in luck! Virtually everything comes pre-configured to what's recommended for most servers, allowing you to spend as little or as much time as you want setting things up.** Simply drop ChatSentry into your plugins folder, enable the core modules/checks you'd like, and let it do the rest of the heavy lifting for you.

**Don't worry, you won't have to figure out ridiculously complex and confusing configurations.**

![](/files/-MMYheNbfSAvYgql-dzz)

{% content-ref url="/pages/-M7umNqp-2FVRG\_VWVJo" %}
[Features](/feature-summary)
{% endcontent-ref %}

![](/files/-MMYheNUEPgCb2KOS6jA)

### **☑️** **The power of local integrated AI, at your fingertips**

ChatSentry offers unmatched chat filtration and protection through its unique code architecture that runs entirely on your server. Through tons of testing, its abilities have proven to be incredibly effective. Below are some examples that show some of the plugins filters in action.<br>

* **Word and phrase filter showcase**\
  the intelligent word and phrase filter module blocking "stupid" in chat

![](/files/-MFK7GnIHu-XwZQUTDrn)

* **Link and ad blocker showcase**\
  the intelligent link and ad blocker module blocking server ips in chat

![](/files/-MFK7IwIYiPAJhD8X5-6)

### **☑️** Hyper smart, expertly engineered checks

With ChatSentry, you'll notice a mind blowing decrease in the amount of false positives players experience, and a huge increase in the detection and blocking success rates compared to a typical filter plugin.<br>

### **☑️** Easy to understand configurations

While complex internally, ChatSentry is designed to be as simple to use as possible. You won't have to spend time learning complicated config setups to get things working -- ChatSentry will do all the complicated and tedious work behind the scenes for you.

![](/files/-MFK5dVNiR65niKUOFU1)

### **☑️ Ultra lightweight & efficient**

ChatSentry has been programmed from the ground up to conduct its tasks super efficiently - even when processing tons of messages quickly, there is virtually no performance cost on your server.<br>

### **☑️ Covers all bases**

Applicable modules support filtration of not only chat and commands, but signs, anvils, and books, for complete protection across all contexts of messages.<br>

### **☑️ Frequent updates and additions**

ChatSentry is constantly evolving. New feature updates, optimizations, and bug fixes are released regularly. This is full coverage for your server, forever.​<br>

### **☑️** **Smart updaters for configs, file structure, and jar**&#x20;

ChatSentry automatically ensures any new config settings are added and old config settings are removed, all while preserving your current settings. In addition, the plugins file structure will be auto updated if necessary.

Don't stress over mistakes in your configs. The plugin detects when there's malformed yml, prints what's incorrect, and stops loading the file to prevent it being reset unlike many other plugins.

If your plugin (jar) version of ChatSentry is ever outdated, you will be notified so you can update to the latest version and make use of new features and fixes and more as soon as they're available.<br>

### **☑️ Complete customization**

Each module comes with its own subset of settings that can be adjusted to work with your server exactly how you want it. Don't want a specific feature? Just turn it off. Don't like a message? You can change it.<br>

### **☑️ Vast version support**

Use ChatSentry on Spigot, Paper, and Paper fork servers on any version between **1.8** and **1.21.x+**<br>

### **☑️ Developer API**

As of plugin version 4.2.0, ChatSentry now offers a basic API to allow developers to create their own additions and modifications to the plugin, fully documented [here](https://wiki.chatsentry.xyz/api/about).<br>

### **☑️** **Quick, professional support**

If you're interested, you can gain access to the plugins discussion channel to chat with fellow ChatSentry users, get support, make suggestions, give feedback, and more related to the plugin!\
\
**Join the Discord server here:** <https://discord.gg/m5Su7Af>

![](/files/-MMYheNfL06VGB-7rC_n)

{% content-ref url="/pages/-MFIvSIX9kxJHMPz1m22" %}
[Module list & info](/protection-modules)
{% endcontent-ref %}

![](/files/-MMbMAICe_NbPiY9HsTH)

{% hint style="info" %}
**You can view the plugins Terms of Use by at** [https://kixmc.gitbook.io/kixmcs-product-resources](https://kixmc.gitbook.io/kixmcs-product-resources/)
{% endhint %}


# Features

A summary of all of ChatSentry's features

![](/files/-MTn21IsQOUQ70yqwFSP)

{% hint style="success" %}
All features, filters and restrictions can be customized, disabled, or bypassed with permissions. Everything is customizable!
{% endhint %}

* **Apply filters to chat, or choose to apply filters to both chat and commands (even signs, anvils, and books too!)**
  * some features default to blacklist all commands except private messaging commands to prevent false positives, however they can be changed to be applied to any or all commands
  * applicable features additionally can filter text on **signs, items renamed in anvils, and text written in books** for complete complete protection across all contexts of messages\ <br>

* **Block players from sending lots of messages or commands quickly**

  * has a configurable cooldown, applied commands list, and limits<br>

* **Accurately block spammy messages**
  * Block players repeating the same or similar word or phrase over and over in the same message
  * Block flood-like messages disguised as separate words to get around typical flood filters
  * Block excessive keyboard smash\
    \
    &#x20;

* **Block players from repeating the same or similar message quickly**

  * comes with **configurable limits** of the amount of times players can repeat the same or similar message within x amount of time
  * can detect bots/players appending **random sequences of numbers and other characters** to their messages to try and evade the filter<br>

* **Intelligently block numeric server ips and advertising**
  * in addition to chat and commands, **can filter through signs, anvils, and books**
  * detects **blatant advertising**; ex. **`join https://spigotmc.org!`**
  * detects **substituted advertising**; ex. **`join spigotmc <dot> org!`** or **`join spigotmc[.]org!`**
  * detects **numeric ips**; ex.**`join 127.0.0.1!`**
  * can detect **any** domains, or just the (roughly) **1,500 most widely used** (TLD) domains for a significant increase in detection accuracy\ <br>

* **Intelligently block links and websites, including links in any language**
  * in addition to chat and commands, **can filter through signs, anvils, and books**
  * domains can be **whitelisted**
  * all subdomains can be of a domain can be **auto whitelisted**
  * detects all variations of links including but not limited to:
    * links **with or without** https\:// or http\://
    * links **with or without** [www](http://www).
    * links with no specified directory  (with or without domain.co&#x6D;**`/example/link`**)\ <br>

* **Intelligently block swears / configured words and phrases**
  * can filter through **chat, commands, signs, anvils, and books**
  * **NEW** detects blocked entries being split across multiple messages
  * **NEW** detects blocked entries written backwards
  * detects words/phrases that are **similar** blocked entries
  * detects **mixing character case**; ex. **`wOW`** instead of **`wow`**
  * detects **numeric** **substation of characters**; ex. **`w0w`** instead of **`wow`**
  * detects **exaggeration of parts of words**; ex. **`wwooooooowwww`** instead of **`wow`**
  * detects **additional characters** to attempt to confuse the filter; ex. **`w!!-O?-ws`** instead of **`wow`**
  * detects **left out letters/parts** of the blocked content, or purposefully misspelling; ex. **`cahtcentry`**&#x69;nstead of **`chatsentry`**
  * choose to censor the message and still have it shown, or have it blocked entirely\ <br>

* **Modify and or perform actions triggered by defined chat messages/commands using simple or complex matching techniques**
  * supports **regular (regex) expressions**
  * supports **plain text**
  * will match regardless of character case
  * replace matches with **new text, only execute actions, or block the message entirely**
  * optionally **send a message**, **broadcast a message**, **run console commands**, or **run commands as the player**, when their message is matched
  * utilize **select parts / arguments** of the matched message in actions
  * set match entries to **only work with chat messages, or only work with commands**, or work with both\ <br>

* **Automatically reply publicly or privately to players asking common server questions, or perform various actions**

  * ex. keep chat clean by automatically replying to variations of players asking for staff or to apply privately\ <br>

* **Automatically fix players' messages grammar and fix common typos**
  * automatically **capitalize** the first letter of the first word after a new sentence
  * automatically **add periods** to the end of applicable messages
  * automatically **fix common typos** (ex. changing youre to you're)
  * ignores appending periods to short messages such as "xD"
  * ignores capitalizing short messages such as "xD"
  * comes with a **configurable typo replacement list**, and settings to **turn** **individual features of the module on or off**\ <br>

* **Remove or block special characters used by hacked clients to bypass filters**
  * in addition to chat and commands, **can filter through signs, anvils, and books**
  * can be set to detect and remove/block **all unicode**
  * can be set to only detect and remove/block **ascii lookalike unicode** used by clients
  * virtually **all alphanumeric lookalike unicode supported by MC** (and used by clients) is able to be detected and blocked\ <br>

* **Intelligently block use of excessive CAPS**
  * can differentiate between **blatant cap spamming and people using proper grammar in long messages**\ <br>

* &#x20;**Block chat usage on join until movement to combat spam bots**
  * even if the bots are smart enough to mindless move around, other modules such as the spam blocker will detect them\ <br>

* **Block players using hacked clients to automatically "parrot" (copy) other players chat messages**
  * can be set to use **advanced intelligence algorithms** to detect more **premium clients that parrot messages but add or remove letters/symbols to attempt to bypass filters**.
  * &#x20;can detect bots appending **random sequences of numbers and other characters** to their messages to try and evade the filter
  * can be set to **ignore very short messages** like "lol" or "xD" to decrease chances of false positive detections.\ <br>

* **Block sudden & excessive increases of logins to prevent bot join flooding**
  * admins or players with bypass permission will be exempt even if the server is actively blocking other logins\
    &#x20;<br>

* **Auto-shorten unintentional chat flooding messages like** **`Heyyyyyyy`** **to** **`Heyyy`**
  * comes with a **configurable character repetition limit**
  * supports character specific **custom repetition rules, allowing certain characters to be repeated more or less than others**.
  * comes with a configurable **maximum word length limit** (custom character rules are ignored in calculation of this limit)
  * can be set to **ignore long links**, even if they exceed the maximum "word" length limit\ <br>

* **Block intentional chat flood messages like** **`dh22uhhdhwuididhdidwjwdihd8ihdjwdwhduwd3u`**\ <br>

* **Block the use of prefixed commands to bypass filters and or discover sensitive server information**
  * can automagically force-run **prefixed commands without the prefix** on users without bypass permission

<br>

![](/files/-MPI1_aI73_-VaFtHgfT)

* **Completely automatic warning and punishment system**
  * set warnings to **auto-expire** after a period of time.
  * create your own **custom auto-punishment rules based on feature and warning count**.\ <br>
* **Manual warning system for non-chat related violations**

  * configure **automatic punishment actions** for manually added warnings.
  * view, add, remove, or clear players module & or manual warnings in-game.

  <br>
* **See players commands real-time**
  * comes with optional **command blacklist or whitelist**\ <br>
* **Get real-time in-game & Discord notifications when ChatSentry flags actions, autowarns, and performs other actions** &#x20;
  * all notification messages & what kinds of notifications sent are highly configurable
  * in-depth embed editor to customize Discord based notifications\ <br>
* **Store logs of players violations and easily look them up in-game with filtered searches**
  * delete old violation log data easily in-game\ <br>
* **Instantly clear chat with a command**
  * operators or players with bypass permission will be exempt\ <br>
* **Instantly disable / enable chat with a command**

  * operators or players with bypass permission will be exempt

  <br>
* **Lock down the server to only allow known or exempt players joining**
  * lockdown mode lets you toggle a persistent-through-server-restart lock on your server which can either block unseen before/unknown players from joining, or everybody except those who are on the exemption list. This command was designed to be used under the case of a bot attack to disallow the unseen before player-bots entering the server, but it can be used for any other purpose as well\ <br>

![](/files/-MPI1dmpoiBOpUKxOhXm)

* **Smart configs & auto file structure updation**
  * automatically adds new config settings, and file structure updation without having to be reset for quick and hassle free updating (see below for more info)​    \ <br>
* **Neat, easy to understand** **config files**
  * every setting and option is completely commented with a formal description of what it does and how it can be used\ <br>
* **Malformed YML detection**
  * detects when there's **malformed yml** in a file and **stops loading the file to prevent corruption**.
  * **verbose about what the problem is**, **written simply** allowing anybody to understand the issue.

![](/files/-MPI1nulM1zpn2weKk7A)

* **Ridiculously configurable**​

  * tons of settings allow the plugin to morph into exactly what your server needs

  <br>
* **Supports your server**

  * supports **Spigot, Paper, CraftBukkit & BungeeCord** servers
  * supports all versions between **1.8** to **1.21.11+**

  <br>
* **Highly optimized & ready for production servers**
  * can process large quantities of players blazingly fast at virtually no performance cost (see below for more info)​\ <br>
* **Ready out of the box**
  * all settings come preconfigured with recommended defaults, allowing you to get the plugin up and running in minutes\ <br>
* **Works with your language**
  * **can detect international unicode characters** unless you explicitly set it to block unicode
  * **virtually all modules fully support being used for any language**, whether the word or phrase filter, anti chat flood, etc.<br>
  * *please note, some messages by the plugin are in English and are not customizable via the lang file (though the majority of the messages players see from the plugin are customizable!) the configurations are also commented in English and are not modifiable*\ <br>
* **Change almost all plugin messages**
  * with **colorcode** support
  * with **hex color support** for servers running 1.16.x or above!\ <br>
* **Developer API available to create your own additions and modifications to the plugin**
  * Includes events and other useful methods
  * Go to <https://wiki.chatsentry.xyz/api/about> for more info


# Compatibility details

:house: **Native Minecraft Version:** 1.13

:test\_tube: **Tested Minecraft Versions:** 1.8, 1.9, 1.10, 1.11, 1.12, 1.13, 1.14, 1.15, 1.16, 1.17, 1.18, 1.19, 1.20, 1.21.x latest

:globe\_with\_meridians: **Languages Supported:** Can process any language's characters! Note that configs and some hard coded messages are in English (99% of messages are changeable)

:heavy\_plus\_sign: **Supported\* Server Types:** Spigot, Paper, most Paper forks

*\*other types may work, however, minimal to no support will be provided for directly related issues on unsupported server types*


# Module list & info

The features that make up ChatSentry are organized throughout **individual modules/components** within the plugin for maximum organization. All individual protection modules act to serve a particular purpose to help you best fine tune the plugin for your server.​\
\
Modules that begin with **intelligent** utilize ChatSentry's unique detection logic, advanced code architecture and algorithms to detect similarities between words & and recognize players trying to combat or exploit the filters. Or, they are just simply intelligent in the sense that they are incredibly sufficient in comparison to other plugins offering a similar feature.&#x20;

### Key points to remember:

* Any module can be disabled, or modified to best fit your servers needs.<br>
* All modules can be applied to commands as well as chat.<br>
* Each module comes with it's own set of unique settings and options so you can fine tune the module to get exactly what you're looking for out of it and help your server with what it needs most. However, the configurations come almost completely configured, so you don't have to change a lot of settings if you don't want to.<br>
* Any module can be bypassed via permissions. See the [permissions wiki page](https://kixmc.gitbook.io/chatsentry-wiki/commands-and-permissions/permissions-and-commands) for more information.​<br>

### Modules

{% hint style="success" %}

## Admin Notifier

Notifies admins real-time when a module is triggered with detailed information, allowing them to know when to take action if necessary.
{% endhint %}

{% hint style="success" %}

## Discord Notifier

Sends Discord notifications via webhooks when modules flag a message or action, players are manually or automatically warned, warnings are pardoned, autowarns expire, and when the Auto Punisher punishes a player.
{% endhint %}

{% hint style="success" %}

## Intelligent Auto Punisher

Automatically runs punishment commands on players who excessively trigger modules within a defined time frame.
{% endhint %}

{% hint style="success" %}

## Intelligent Word & Phrase Filter

Hyper intelligently detects swears configured blocked words or phrases (and words/phrases similar to those on the list) from being said in chat, commands, signs, anvils, and books (any check contexts can be disabled).
{% endhint %}

{% hint style="success" %}

## Intelligent Link & Ad Blocker

Prevents web links & server advertising (regular server ips & numeric server ips) with optional extra sensitivity bypass detection in chat, commands, signs, anvils, and books (any check contexts can be disabled). Includes the ability to whitelist domains or all subdomains of a domain.
{% endhint %}

{% hint style="success" %}

## Intelligent Spam Blocker

Accurately blocks spammy messages by examining their word, character, and sequence diversity in comparison to the messages length. Additionally prevents players from repeating the same or similar messages over and over within a short period of time with a dynamically adjusting repeat cooldown
{% endhint %}

{% hint style="success" %}

## Intelligent Chat Cooldown

Controls how quickly players can send messages and configured or all commands within a defined time frame.
{% endhint %}

{% hint style="success" %}

## Intelligent Anti Chat Flood

Prevents or intelligently modifies the use of excessive repeated characters and very long "words" without interfering with players using 'expressive' chat.
{% endhint %}

{% hint style="success" %}

## Unicode Remover

Removes non US-ASCII (US keyboard) characters in chat messages and commands to prevent alphanumeric lookalike unicode characters from being used to bypass filters & modules.

Has the option to use a compatibility mode that only blocks unicode used by hacked clients - blocking virtually all alphanumeric lookalike unicode supported by MC while allowing other languages in chat, commands, signs, anvils, and books (additional check contexts can be disabled).
{% endhint %}

{% hint style="success" %}

## Intelligent Cap Limiter

Limits the use of excessive capital letters in messages without interference of messages using proper grammar. Can auto-set the message to lowercase or blocks it entirely. Player names are ignored.
{% endhint %}

{% hint style="success" %}

## Intelligent Anti Parrot

Prevents players using hacked clients to automatically copy ("parrot") other players chat messages. Also prevents the same (non-generic) message from be said by multiple players within a short time frame.

Able to detect bots/players appending random sequences of numbers and other characters to their messages to try and evade the filter.
{% endhint %}

{% hint style="success" %}

## Intelligent Chat Executor

Modifies and or performs actions triggered by defined messages/commands using simple or complex matching techniques. Optionally supports execution of sign text and anvil renames
{% endhint %}

{% hint style="success" %}

## Anti Statue Spambot

Prevents joining players abilities to send messages or commands until they move in order to protect against basic artificially controlled spam bots. Has an optional command whitelist.
{% endhint %}

{% hint style="success" %}

## Anti Join Flood

Prevents more than a defined amount of players joining every minute to prevent bot join flooding to lag, spam, & or crash the server.
{% endhint %}

{% hint style="success" %}

## Anti Relog Spam

Prevents players excessively relogging in short periods of time to flood chat. Uses a dynamically increasing cooldown to effectively combat excessive relogging without affecting players who are relogging reasonably.
{% endhint %}

{% hint style="success" %}

## Anti Command Prefix

Prevents players using prefixed commands to get around filters and discover potential sensitive server information like the plugins. Ex. /minecraft:me instead of /me.

Optionally integrates with the Command Spy module; when a command is modified/a prefix is removed, it will appear crossed out in the command spy notification.
{% endhint %}

{% hint style="success" %}

## Auto Grammar

Converts players' messages to use proper capitalization, periods, and correct typos in chat and configured or all commands.
{% endhint %}

{% hint style="success" %}

## Command Spy

Shows players real-time commands to admins. Commands can optionally be whitelisted or blacklisted.&#x20;
{% endhint %}


# FAQ

Frequently asked questions about ChatSentry

### Is ChatSentry big server ready?

Yes! ChatSentry has been intensely tested and is optimized to support and process large quantities of players.

ChatSentry has been used on multiple networks of \~5-10K avg. players with minimal performance impact.\ <br>

### Does ChatSentry support networks?

ChatSentry does not currently have network functionality, but it is planned in the near future. Stay tuned!\ <br>

### Are players' messages ever shared externally for processing?

No, your chat messages never leave your server and are processed on the server locally.\ <br>

### What versions and server types does the plugin support?

ChatSentry has been tested and is compatible with servers running **Spigot, Paper, and most Paper forks on versions 1.8 to 1.21.x+**

Other types and versions **may work**, however, minimal to no support will be provided for directly related issues on unsupported server types or versions.\ <br>

### Is ChatSentry compatible with all chat plugins?

There is no guarantee that ChatSentry will work with every single chat plugin, though it's **highly unlikely** there will be any conflictions with regular chat modification plugins. Meaning, ChatSentry should work just fine along other chat-based plugins like DeluxeChat, EssentialsChat, LegendChat, etc.\ <br>

### ChatSentry is saying I'm running an outdated version, but I'm running the latest release. How do I fix this?

**This issue will resolve on its own within a few hours**. Spigot's API (used for checking for new updates) refreshes every 2-6 hours, meaning if you updated within 6 hours of the update being released, Spigot just takes a bit of time to tell ChatSentry that it is the latest version.

**After the new update has been released for 2-6 or more hours, ChatSentry will automatically detect it's running the latest version and fix the incorrect version status tag.**\ <br>

### I have a feature I'd like to suggest to be added to the plugin, what's the best way to get in touch?

I am always open to suggestions for any of my plugins, and many of the existing features are related suggestions from others like you! You can contact me either on my [**Discord Server**](https://discord.gg/m5Su7Af), or by [**starting a conversation**](https://www.spigotmc.org/conversations/add) with **kixmc** on SpigotMC.\ <br>

### Is ChatSentry legit? Can it really do what it claims?

Yep! Though its new, ChatSentry is on its way to becoming one of the most widely used chat filtration and protection plugins ever made.

**All ratings can be viewed here:** [**https://www.spigotmc.org/resources/79616/reviews**](https://www.spigotmc.org/resources/%E3%80%90chatsentry-4%E3%80%91-hyper-smart-ai-message-filtration-and-control-for-minecraft-servers-1-8-1-16-x.79616/reviews)\ <br>

### **Is there a test server available?**

There is not currently a test server available. Luckily, you can learn the plugin inside and out by reading through this wiki. Here's some great pages to start:

* [Homepage - has a full rundown of the plugin](/)
* [Features](/feature-summary)
* [Module list & info](/protection-modules)
* [Default plugin configs & files](/files/files)
* [In depth Word & Phrase Filter block list setup](/word-and-phrase-filter-block-list-guide)

If you have any questions or concerns whatsoever, [they will be happily answered](/support)!


# Bypass & misc. permissions

The permission nodes the plugin offers to allow you to limit certain features to certain players or groups.

![](/files/-MQT64jpZPze5mIuAEVA)

{% hint style="info" %}
**Tip:** Easily come back to this page with **/kcs resources**
{% endhint %}

## Bypass Permissions

<table data-header-hidden><thead><tr><th>Permission</th><th width="204.85937500000003">Description</th><th>Recommended Status</th></tr></thead><tbody><tr><td>Permission</td><td>Description</td><td>Recommended Status</td></tr><tr><td><em>chatsentry.bypass.all</em></td><td><strong>Players with this permission (or operators) will bypass all protection modules and restrictions. Includes all the permissions in this table.</strong></td><td>Admins</td></tr><tr><td>v v v</td><td>v v v</td><td>v v v</td></tr><tr><td><strong>Exemptions</strong></td><td></td><td></td></tr><tr><td>chatsentry.togglechat.exempt</td><td><strong>Players with this permission will be able to talk even if chat is toggled off.</strong></td><td>Admins</td></tr><tr><td>chatsentry.commandspy.exempt</td><td><strong>Players with this permission will not have their commands sent to players with command spy permissions.</strong></td><td>Admins</td></tr><tr><td>chatsentry.clearchat.exempt</td><td><strong>Players with this permission chat will remain unmodified when chat is cleared.</strong></td><td>Admins</td></tr><tr><td>chatsentry.autopunisher.exempt</td><td><strong>Players with this permission will be exempt to ONLY automatic warnings by the Auto Punisher module.</strong></td><td>Admins</td></tr><tr><td>chatsentry.manualwarnings.exempt</td><td><strong>Players with this permission cannot be manually warned with /warn</strong></td><td>Admins</td></tr><tr><td></td><td></td><td></td></tr><tr><td><strong>Modules Bypasses</strong></td><td></td><td></td></tr><tr><td>chatsentry.chatcooldown.bypass</td><td><strong>Bypass the Chat Cooldown module.</strong></td><td>Admins</td></tr><tr><td>chatsentry.spamblocker.bypass</td><td><strong>Bypass the Spam Blocker module.</strong></td><td>Admins</td></tr><tr><td>chatsentry.linkandadblocker.bypass</td><td><strong>Bypass the Link &#x26; Ad Blocker Module.</strong></td><td>Admins</td></tr><tr><td>chatsentry.wordandphrasefilter.bypass</td><td><strong>Bypass the Word and Phrase Filter module.</strong></td><td>Admins</td></tr><tr><td>chatsentry.wordandphrasefilter.partialbypass.&#x3C;context></td><td><strong>Bypass a specific context in the Word and Phrase Filter. Supported: chat, command, anvil, book, sign</strong></td><td>Variable. This permission bypasses all blocked entries APART from entries with the 'nocensor::' modifier. This is useful if you wish to allow users to write some blocked entries freely in commands or another context that would otherwise be censored (or blocked if the censor is disabled).</td></tr><tr><td>chatsentry.unicoderemover.bypass</td><td><strong>Bypass the Unicode Remover module.</strong></td><td>Admins</td></tr><tr><td>chatsentry.caplimiter.bypass</td><td><strong>Bypass the Cap Limiter module.</strong> </td><td>Trusted players and above                                    </td></tr><tr><td>chatsentry.antistatuespambot.bypass</td><td><strong>Bypass the Anti Statue Spambot module.</strong></td><td>Trusted players and above</td></tr><tr><td>chatsentry.antiparrot.bypass</td><td><strong>Bypass the Intelligent Anti Parrot Module.</strong></td><td>Admins</td></tr><tr><td>chatsentry.antichatflood.bypass</td><td><strong>Bypass the Intelligent Anti Chat Flood module.</strong></td><td>Admins</td></tr><tr><td>chatsentry.anticommandprefix.bypass</td><td><strong>Bypass the Anti Command Prefix module.</strong></td><td>Admins</td></tr><tr><td>chatsentry.chatexecutor.bypass</td><td><strong>Bypass the Intelligent Chat Executor module.</strong></td><td>Admins</td></tr><tr><td>chatsentry.autogrammar.bypass</td><td><strong>Bypass the Auto Grammar module.</strong></td><td>na</td></tr><tr><td>chatsentry.antirelogspam.bypass</td><td><strong>Bypass the Anti Relog Spam module.</strong></td><td>Admins</td></tr></tbody></table>

## Misc. Permissions

| Permission                         | Description                                                                                                                                                                              | Recommended Status |
| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |
| chatsentry.violations.getnotified  | **Players with this permission will receive real-time violation notifications (if enabled)**                                                                                             | Admins             |
| chatsentry.commandspy.getnotified  | **Players with this permission will receive real-time player command notifications (if the commandspy module is enabled)**                                                               | Admins             |
| chatsentry.violations.togglenotifs | **Players with this permission will be able to toggle receiving violation notifications.**                                                                                               | Admins             |
| chatsentry.commandspy.toggle       | **Players with this permission can toggle whether they receive commandspy notifications.**                                                                                               | Admins             |
| chatsentry.updatenotify            | **Get notified of new plugin releases on join (if update notifications are enabled)**                                                                                                    | Developers         |
| chatsentry.basecmd                 | <p><strong>Defaults to everybody.</strong></p><p>You can now negate / disable this node to disallow players from running the plugins base command (/chatsentry, /csentry, /kcs, /cs)</p> | -                  |


# Commands (and their permissions)

### Core Commands

| Command                       | Aliases            | Description                                                                                                                                                                                                                                                 | Permission                                                      |
| ----------------------------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| **/chatsentry**               | *cs, kcs, csentry* | <p>Base command for ChatSentry. </p><p></p><p>All other commands are subcommands of this command.</p>                                                                                                                                                       | **None**                                                        |
| **/cs help**                  | -                  | Shows ChatSentry's commands.                                                                                                                                                                                                                                | **Only shows commands in which the sender has permission for.** |
| **/cs author**                | -                  | Shows the author of ChatSentry.                                                                                                                                                                                                                             | **None**                                                        |
| **/cs resources**             | *?*                | Shows useful links related to ChatSentry for accessibility.                                                                                                                                                                                                 | **None**                                                        |
| **/cs togglecommandspy**      | *tcs*              | Toggle your commandspy notification preferences.                                                                                                                                                                                                            | **chatsentry.commandspy.toggle**                                |
| **/cs toggleviolationnotifs** | *tvn*              | Toggle your violation notification preferences.                                                                                                                                                                                                             | **chatsentry.violations.togglenotifs**                          |
| **/cs reload**                | *rl*               | Instantly updates any changes made to the config.                                                                                                                                                                                                           | **chatsentry.admin**                                            |
| **/cs info**                  | *i*                | Displays which ChatSentry modules are enabled and some other core setting statuses.                                                                                                                                                                         | **chatsentry.info**                                             |
| **/cs lookup**                | *l*                | <p>Look up and view violation data. You can apply filters to focus in on desired results.</p><p></p><p>More info at the bottom of this page.</p>                                                                                                            | **chatsentry.lookup**                                           |
| **/cs cleanlogs**             | /                  | Delete old violation log data older than X days (or all violations) to tidy up large amounts of logged violations.                                                                                                                                          | **chatsentry.cleanlogs**                                        |
| **/cs gendebug**              | /                  | Generates a debug file in the plugins directory containing useful information about the plugin. **There's no use for this unless you're having problems with the plugin and kixmc has requested you to run it to help you figure out what the problem is.** | Must be ran from console.                                       |
| **/cs environment**           | *env*              | Reports important system information and whether it's compatible / meets the minimum requirements with your version of ChatSentry                                                                                                                           | **chatsentry.environment**                                      |

### Standalone Chat Control Commands

| Command         | Aliases | Description                                                       | Permission                |
| --------------- | ------- | ----------------------------------------------------------------- | ------------------------- |
| **/clearchat**  | *cc*    | Instantly clear the chat.                                         | **chatsentry.clearchat**  |
| **/togglechat** | *tglc*  | Toggle everyone's\* ability to chat. \*without bypass permission. | **chatsentry.togglechat** |

### Standalone Warning Commands

| Command                             | Aliases | Description                                                                                        | Permission                            |
| ----------------------------------- | ------- | -------------------------------------------------------------------------------------------------- | ------------------------------------- |
| **/cswarn**                         | -       | Give a player a manual warning. Punishments linked to auto punisher's manual warning configuration | **chatsentry.generalwarnings.warn**   |
| **/cswarnings view**                | -       | View all a players current warning data.                                                           | **chatsentry.warnings.view**          |
| **/cswarnings parodnonemanual**     | *pom*   | Remove one manually received warning from a player.                                                | chatsentry.**general**warnings.manage |
| **/cswarnings parodonallmanual**    | *pam*   | Remove all manually received warnings from a player.                                               | chatsentry.**general**warnings.manage |
| **/cswarnings clearmodulewarnings** | *cmw*   | Remove module warnings from a player. Option to specify just one module, or all.                   | chatsentry.**module**warnings.manage  |

### Other standalone commands

| Command         | Aliases | Description            | Permission                                                                                                 |
| --------------- | ------- | ---------------------- | ---------------------------------------------------------------------------------------------------------- |
| **/cslockdown** | -       | Manage server lockdown | <p><strong>chatsentry.lockdown.toggle</strong></p><p><strong>chatsentry.lockdown.manageexempt</strong></p> |


# In-game view

{% hint style="info" %}
**Tip:** view all the commands on the previous page in-game with **/chatsentry help**
{% endhint %}

![](/files/-MQT4woxzKGFdhOH9oj2)

![](/files/-MQT4zYc4Ax2JM4NsGso)


# In depth command usages

## /<> lookup <a href="#lookup" id="lookup"></a>

{% hint style="info" %}

> **Syntax:** /chatsentry lookup \<tr:\[..]d|h|m|s &| p:\[..] &| vt:\[..]> or \<all>
>
> **Examples:**&#x20;
>
> `/chatsentry lookup tr:10d p:Notch` - *shows all violations of player Notch within 10 days.*
>
> `/chatsentry lookup vt:message-filter-block` - shows all word and phrase filter detections

Available filters ("flags") are:

* **"timerange:\<number>" (tr) -** filters results to a time range. Add s (seconds), m (minutes), h (hours) or d (days) at the end of the number to determine the range.<br>
* **"player:\<player>" (p)** - filters results to only violations of the specified player.<br>
* **"violationtype:\<violation type>" (vt) -** filter results to a specified violation type.
  * Valid violation types:
    * on-cooldown
    * link-or-ad-block
    * message-filter-block
    * word-replacer-replace (legacy)
    * chat-modifier-modify (legacy)
    * chat-executor-match
    * spam-block
    * unicode-character-block
    * cap-limiter-block
    * anti-parrot-block
    * anti-chat-flood-block
    * anti-statue-spambot-block
    * anti-join-flood-block<br>
* To show all logged violations, you can use **"all"** instead of any flags.

***1 or multiple of the above filters can be applied in a lookup.***
{% endhint %}

## **/cswarnings**

{% hint style="info" %}

> **Syntax:** /cswarnings \<subcmd>

**Subcommands:**\
*clearmodulewarnings (or cmw) \<player> \<module or 'all'>*

*pardonallmanual (or pam) \<player>*

*pardononemanual (or pom) \<player>*
{% endhint %}

## Other commands

{% hint style="info" %}

#### Since most other commands are straightforward their usages are not shown here. If you are confused with a command and would like it's usage written here, please just ask!

{% endhint %}


# Plugin installation & configuring guide

## 1. Purchase a copy of ChatSentry [here](https://www.spigotmc.org/resources/79616/)

{% hint style="info" %}
By using ChatSentry, you agree to the [**Plugin's Terms of Use**](https://kixmc.gitbook.io/kixmcs-product-resources/)&#x20;
{% endhint %}

## 2. Add ChatSentry-x.x.x.jar to your plugins folder <a href="#id-2-add-to-your-plugins-folder" id="id-2-add-to-your-plugins-folder"></a>

## 3. Restart your server to complete installation <a href="#id-3-restart-your-server" id="id-3-restart-your-server"></a>

Avoid reloading as it can cause memory leaks and undesired issues with some plugins.

{% hint style="success" %}
**If ChatSentry was successfully installed, you'll see a message in your console like this along with some more messages from the plugin:**
{% endhint %}

<div align="left"><img src="/files/IKisnPM7nObYj0NQUpa6" alt=""></div>

## 4. Configure modules and features <a href="#id-4-configure" id="id-4-configure"></a>

**By default, all ChatSentry protection modules are turned off. However, virtually a modules settings themselves come pre-configured to the recommended values for most servers.**

Start in the main [config.yml](/files/files/root-folder/config.yml) file and enable which modules best suit your servers needs. Then skim and tinker with those modules individual configs.

{% hint style="success" %}
Though everything comes pre-configured, each server is different, so to ensure effectiveness of the plugin we recommend you skim and tinker enabled modules configs to best fit with your server
{% endhint %}

**Notable components that may require setup:**

* The Word & Phrase Filter's block list comes empty by default. You can create your own, or copy paste one of the [high quality preset lists](/misc-info/preset-word-lists). If you plan to create your own, refer to the [Word & Phrase Filter block list setup guide](/word-and-phrase-filter-block-list-guide) to learn how to make a great filter
* If your server is not English based, you'll want to translate the [Spam Blocker's phrase whitelist](/config-guides/module-config-guides/spam-blocker#phrase-whitelist), and the [Anti Parrot's phrase whitelist](/config-guides/module-config-guides/anti-parrot#phrase-whitelist) if you plan on using either modules

{% hint style="info" %}
Once you're done configuring, type **/chatsentry reload** to push changes into runtime.
{% endhint %}

## 5. Familiarize yourself with the plugins commands

Type **/kcs help** to see a full list of the plugins commands.

## 6. Add desired permissions to your staff and other groups

The plugin offers a vast selection of permission nodes to let you limit certain features to certain players or groups. Depending on what you've enabled, it's good to skim through and ensure everybody can do and access what you'd like.

{% content-ref url="/pages/-M7WKEIgq2ik1YxFKxhJ" %}
[Bypass & misc. permissions](/pac/permissions)
{% endcontent-ref %}

## 7. Run /kcs info to see an overview of what's enabled

To ensure you didn't miss or accidentally enable anything, you can quickly see an overview of what modules & misc. toggles are enabled with the **/kcs info** command.

<img src="/files/-MRr4zgM8qg1nysPXbcj" alt="" width="563">

## 8. Enjoy peace of mind :man\_in\_lotus\_position:

For any questions, issues, suggestions, or alike, don't hesitate to [contact us](/support)


# Network bridge setup guide

Using BungeeCord or Velocity? ChatSentry offers various cross-server synchronization options. See the guide below to set up the plugin to work with your network.

### &#xD;Initial setup for BungeeCord

1. Add the plugin to your **proxys plugins folder**<br>

2. Add the plugin to **each of your Spigot/Paper/etc. servers plugins folders**<br>

3. Restart the proxy and all servers that are using ChatSentry

4. Proceed to the "after initial setup" section of this page

### Initial setup for Velocity

ChatSentry does not officially support Velocity, but you can use a an adapter called Snap to run it on Velocity proxies

1. Download [Snap](https://github.com/Phoenix616/Snap/releases) and add it to your **proxys plugins folder**<br>

2. Let Snap generate it's directories and add ChatSentry to Snap's plugins folder (**plugins/Snap/plugins**)

3. Add ChatSentry to **each of your Spigot/Paper/etc. servers plugins folders**<br>

4. Restart the proxy and all servers that are using ChatSentry

5. Proceed to the "after initial setup" section of this page<br>

### After initial setup

1. Enable network mode in one of your servers ChatSentry configs (see the block below)<br>
2. Run **/kcs rl** to reload the plugin and update your changes, and then run **/kcs rl** again to force-sync or schedule sync this servers files with the other servers. Double reloading like this is only necessary when turning network mode on<br>
3. **Done!** ChatSentry will now automagically synchronize cross-server with respect to your network mode settings.

```yaml
network:
  enable: true # set this to true
  sync-configs: true # optional
  sync-playerdata: true # optional
  global-admin-notifier-messages: true # optional
```

### Updating ChatSentry - when should I update the proxy jar and others?

As a general rule of thumb, you should make sure all your ChatSentry instances are running on the same plugin version to prevent issues. Since updates are released so frequently, you can usually safely ignore optimizations and minor bug fixes, **however any updates with config changes should be updated across all your servers**.

### Additional info

ChatSentry is not fully a proxy plugin, meaning it must be installed not just on the proxy, but on all Spigot/Paper/etc. servers as well. Adding the plugin to your proxy creates a data bridge allowing for cross server communication between ChatSentry instances on your network.


# In depth Word & Phrase Filter block list setup

## Introduction

The intelligent word and phrase filter module blocks swears or other configured words / phrases (and words/phrases similar to those on the blacklist) from being said in chat and commands. It is one of the more complex modules to configure well, but this guide is here to help!&#x20;

{% hint style="success" %}

### Skip the setup

There are preset word lists available, already configured with necessary modifiers. [**Click here to view them.**](/misc-info/preset-word-lists)
{% endhint %}

## The keys to a good filter

It's important to understand that the filter can only work well if it's configured well. **Your configuration can either make or break the filter**. Please take careful note of this guide when creating your own configuration so you can make the most of ChatSentry's WAPF abilities.

{% hint style="info" %}

#### **Block lists should be as concise as possible**

The more specific and tuned the block list is, the more accurate it will be. You generally should avoid going over a few hundred entries, but it depends on the context in which you're using the filter in. The more entries, the more potential false positives the filter will be susceptible to.
{% endhint %}

{% hint style="info" %}

#### **Blocking words should take precedence over phrases**

Though the filter supports blocking entire phrases, the majority of the time you should block singular words when possible instead. When blocking phrases, it's best to keep them as short as possible, preferably 2-4 words. You should only block entire phrases that are very common to be said very similarly to how they're added to the block list.&#x20;
{% endhint %}

{% hint style="info" %}
**Use entry modifiers where applicable**

One of the core components that lets the filter work well is entry modifiers. Entry modifiers allow you to fine tune the filter on an entry to entry basis. They let you limit how strict or lenient particular entries should be, and are incredibly important to use. Their importance cannot be stressed enough!
{% endhint %}

## Built in checks

The below checks are done automatically, and thus should not be included in your block list. Like mentioned above, it's best to keep your filter as concise as possible.

* case variants/varying case, like eXaMpLe
* similar text to entries (with no entry modifier)
* adding spaces between each letter or other symbols between the letters (with no entry modifier)
* word exaggerations, like heckkkkkkkkkkkk (with no entry modifier)
* number and symbol substitutions, like @ for A, 3 for E, etc. (when substitution intelligence is enabled)
* many additional sub-checks

## Entry modifiers

Entry modifiers are the primary way to fine tune your filter. They allow you to fine tune the filter on an entry to entry basis and let you limit how strict or lenient particular entries should be

In some cases, certain words or phrases players type might accidentally conflict with similarity or other checks the filter conducts. This is where entry modifiers come in; they allow you to disable select checks on particular entries to fix and prevent false positive detections.

Ex. if you wish to block "`example`", but not a similar word like "`examples`", you can use an entry modifier to tell the filter to strictly block "`example`" without looking for similarities.&#x20;

{% hint style="danger" %}
Entry modifiers are **incredibly important** to the effectiveness of the filter.\
Entries they should be on lacking proper modifiers **severely** diminish the filters accuracy
{% endhint %}

### Core modifiers

<table data-header-hidden><thead><tr><th width="212.5483870967742">Modifier</th><th width="349.83526986425034">Description</th><th>When to use</th></tr></thead><tbody><tr><td>Modifier</td><td>Description</td><td>When to use</td></tr><tr><td><code>exactcontains::</code></td><td><p><strong>Medium detection sensitivity, in between strict and lenient. This is the goldilocks of entry modifiers. You'll find yourself using this one most of the time.</strong></p><p></p><p>Entry will only detect words/phrases that are exactly equal to the entry (except for case variations).</p></td><td>On entries that are similar to unrelated words/phrases</td></tr><tr><td><code>exact::</code></td><td><p><strong>Lowest detection sensitivity, most strict</strong></p><p></p><p>Entry will only detect words/phrases that are exactly equal to the entry (except for case variations) and words/phrases containing the entry</p></td><td>On entries that might be found within other unrelated words or phrases</td></tr><tr><td><em>no modifier</em></td><td><p><strong>Highest detection sensitivity, most lenient</strong></p><p></p><p>Entry will be subject to all checks (see above)</p></td><td><p></p><p>On entries that don't have similar unrelated words/phrases or are rarely within other words/phrases shouldn't get any modifiers<br></p></td></tr></tbody></table>

### Special use modifiers

| Modifier     | Description                                                                                                                                                                                                                                                                              | When to use                                                                                                                                                                                                          |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `nocensor::` | <p><strong>When using the censor:</strong></p><p></p><p>If an entry with this modifier is found in a message, the message will be blocked entirely and not be attempted to be censored<br><br>This modifier is <strong>stackable</strong>, meaning you can use it along with other m</p> | Good for very vulgar language that you want to keep out of chat entirely. You can use this modifier in conjunction with `autowarn-when-censored` to apply warnings on select blocked entries, instead of all entries |
| `regex::`    | <p><strong>Advanced: matches a regex pattern</strong></p><p></p><p>Entry will be subject to minimal checks, such case variants, word exaggerations, and substitution intelligence. Processed text that matches the pattern will be blocked</p>                                           | When you have an exact regex pattern you would like to block matches of. **Remember to escape regex characters you want to use as plain text**                                                                       |

### Detection examples with and without modifiers

| Example input           | Detected when using no modifier?                                                                  | Detected when using exactcontains::?               | Detected when using exact::?                       |
| ----------------------- | ------------------------------------------------------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- |
| badword                 | [✅](https://emojipedia.org/check-mark-button/) yes                                                | [✅](https://emojipedia.org/check-mark-button/) yes | [✅](https://emojipedia.org/check-mark-button/) yes |
| b a d w o r d           | [✅](https://emojipedia.org/check-mark-button/) yes                                                | [❌](https://emojipedia.org/cross-mark/) no         | [❌](https://emojipedia.org/cross-mark/) no         |
| badw0rd                 | [✅](https://emojipedia.org/check-mark-button/) yes                                                | [❌](https://emojipedia.org/cross-mark/) no         | [❌](https://emojipedia.org/cross-mark/) no         |
| baaaaaaaaworz           | [✅](https://emojipedia.org/check-mark-button/) yes                                                | [❌](https://emojipedia.org/cross-mark/) no         | [❌](https://emojipedia.org/cross-mark/) no         |
| 123blaBADWORDbla123     | [✅](https://emojipedia.org/check-mark-button/) yes                                                | [✅](https://emojipedia.org/check-mark-button/) yes | [❌](https://emojipedia.org/cross-mark/) no         |
| Some phrase bob ad word | [❎](https://emojipedia.org/cross-mark-button/) yes (bo\[badword])&#xD; (this is a false positive) | [❌](https://emojipedia.org/cross-mark/) no         | [❌](https://emojipedia.org/cross-mark/) no         |

## Important points to remember

* It's not necessary to add variations of words/phrases in the block list as the plugin will do it for you. **Only add variations when using entry modifiers.** <br>
* **Don't include substituted entries if you're using substitution intelligence**; manual substitutions can confuse substitution intelligence and make the filter less effective <br>
* `exact::` is the least sensitive to detections, `exactcontains::` is partially sensitive, and no modifier is the most sensitive. You should use these modifiers accordingly to fine tune how entries function


# In depth Chat Executor guide & entry examples

## Introduction

The Intelligent Chat Executor & Modifier module modifies and or performs actions triggered by defined messages/commands using simple or complex matching techniques. It also optionally supports execution of sign text and anvil renames. It is one of the more complex modules to configure well, but this guide is here to show some examples and help!&#x20;

## Entry structure

Entries use the following format:

```yaml
1: # entry number
  match: # text or pattern to find in chat or commands
  set-matches-as: # what to set the matched text in chat to
  execute: # the actions to execute when this entry is matched
  - action
  - action
  - etc.
```

These 3 nodes can be heavily customized to fit various needs:

### 'match:' nodes:

Match nodes determine the message or pattern to find in chat or commands.

**You can prefix/start 'match:' nodes with:**

* **`{only_commands}`** to only run the match on commands
* **`{only_chat}`** to only run the match on chat
* **`{only_anvils}`** to run the entry on anvil renames (if the anvil listener is enabled in config.yml)
* **`{only_signs}`** to run the entry on sign text (if the sign listener is enabled in config.yml)

*If you use neither only\_chat or only\_commands it will match both chat and commands. When using only\_anvils or only\_signs the entry will solely execute on anvils or signs*

**You can also add:**

* **`{text}`** to specify that the match is just plain text and is not regex
* **`{regex}`** to specify that the match is using regex

*If you use neither, plain text will be defaulted to*

A handy regex cheat sheet can be found here: <https://medium.com/factory-mind/regex-tutorial-a-simple-cheatsheet-by-examples-649dc1c3f285>

#### Node examples

**`match: {text}{only_commands}/plugins`** will match only the command "/plugins"

**`match: {regex}([123])`** will match any messages in chat or commands containing the characters 1, 2, or 3

{% hint style="warning" %}
On regex matches, make sure you escape any regex symbols you want there as regular text by adding a "\\" to the start of any of these: **<(\[{^\\-=$!|]})?\*+.>**
{% endhint %}

###

### 'set-matches-as:' nodes:

Set matches as nodes determine what to set the matched text to

**Any text you type after the node will be what the matched text will be set to, however if you don't want to set the matched chat message to anything you can use one of the following:**&#x20;

* **`{dont_modify}`** to not modify the players message at all, but still send it.
* **`{block}`** to block the players message entirely.
* **`{dont_notify}`** to not send any admin notifier message when matched (if admin notifications are enabled for the Chat Executor)

  **`{dont_log}`** to not log anything the when the entry is triggered (if logging is enabled for the Chat Executor)

{% hint style="info" %}
These are stackable, ex. "**`{block}{dont_modify}{dont_log}`**" however, **`{dont_modify}`** and **`{block}`** must not be in the same set-as node as they conflict.
{% endhint %}

###

### 'execute:' action lists:

Execute action lists determine the actions to execute when this entry is matched

To have no actions, set to "execute: \[]"

**To set the type of action, you must prefix/start the action with:**

* **`{player_msg}:`** to send a message to the player.
* **`{console_cmd}:`** to run a command as the console.
* **`{player_cmd}:`** to run a command as the player.
* **`{broadcast}:`** to broadcast a message to all players.

**To use parts of the players message in actions, you can use:**

* **`{arg<number>}`** to get the word/argument of the players message (starting from 0)
  * ex **`{arg1}`** in "**FirstWord SecondWord ThirdWord**" is "**FirstWord**", **`{arg2}`** is "**SecondWord**", etc.<br>
* **`{multiargs<number>}`** to get all the arguments/words after a particular argument/word.
  * ex **`{multiargs2}`** of "**FirstWord SecondWord ThirdWord FourthWord**" is "**ThirdWord FourthWord**"

{% hint style="info" %}
*You can use multiple **`{arg<number>}`** and **`{multiarg<number>}`**&#x70;laceholders in actions. If the requested argument/word is not present, it will simply be blank.*
{% endhint %}

**To get the players username or displayname in actions, you can use:**

* **`{PLAYER}`** to get the players username.
* **`{PLAYER_DISPLAYNAME}`** to get the players display name with its original colors
* **`{PLAYER_DISPLAYNAME_STRIPPED}`** to get the players display name stripped of its original colors

#### Action examples

```yaml
execute:
- "{broadcast}: Hi {PLAYER}!"
- "{broadcast}: The first word you typed in yoru message was {arg1}!"
```

The above broadcasts, "Hi" followed by the player who triggered the entries username, and then broadcasts the first word of their message that triggered the entry.

```yaml
execute:
- "{console_cmd}: tell {PLAYER} this is from the console!"
```

The above runs the command: "tell" followed by the player who triggered the entries username, followed by "this is from the console!"

## Entry examples

### 1 - Detect a question and answer it privately

The below example detects numerous variations of players asking for staff, blocks it, and tells them staff applications are closed. The match is regex, so it is prefixed with {regex}. Regex groups are specified with (), and sections of groups are separated by **|**&#x20;

The below detects the following, but is not limited to:

* "can I apply for staff?"
* "could I have admin?"
* "I want to apply"

```yaml
entries:
  1:
    match: "{regex}(can i apply for|give me|i would like|can i have|could i have|i wanna be|i want|i want to be|i wanna apply for|can i|i want to|i wanna) (admin|staff|op|operator|mod|moderator|owner|co owner|coowner|apply)"
    set-matches-as: "{block}"
    execute:
      - "{player_msg}: &eSorry, staff applications are not open at this time."
      - "{player_msg}: &eWe will let the community know when we're looking again!"
```

### 2 - Auto reply globally to a question

You can use a similar setup as above to answer commonly asked server questions. The below match is using regex, so it is prefixed with {regex}. It's also prefixed with {only-chat} to ensure this match is only effective in global chat and not commands.

```yaml
entries:
  1:
    match: "{regex}{only-chat}(is there a|what is the|whats the|can i have the|could i have the) (discord|discord server|discord link)"
    set-matches-as: "{dont_modify}{dont_notify}{dont_log}"
    execute:
      - "{broadcast}: &d{PLAYER}, the Discord server can be joined here: &fdiscord.gg/exampleLink"
```

### 3 - Modify a message but execute no actions

The below example tries to match variations of players saying the server is bad, and modifies their message to say it's good. The below match is using regex, so it is prefixed with {regex}.

```yaml
entries:
  1:
    match: "{regex}this server (sucks|is lame|is trash|is boring|is not good|isn't good)"
    set-matches-as: "I love this server :D"
    execute: []
```

### 4 - Custom command outputs

You can get creative and create custom message outputs for commands, even if the player doesn't have access to it. The below example will show the player msg content to players who type /op. The regex expression will match only commands that are exactly /plugins or /pl

```yaml
entries:
  1:
    match: "{regex}{only_commands}^(/plugins|/pl)$"
    set-matches-as: "{block}"
    execute:
      - "{player_msg}: &fPlugins (1): &aNone of your business >:D"
```

### 5 - Match only an exact chat message

Matching an exact chat message (excluding character case) and not text contained in the chat message is easy with regex, just use the following:

**`{regex}^exact text here$`**

**`{regex}^(exact phrase 1|exact phrase 2)$`**

Example:

```yaml
entries:
  1:
    match: "{regex}^only match this whole message$"
    set-matches-as: "{block}{dont_notify}{dont_log}"
    execute:
      - "{player_msg}: Congrats, your whole message was 'only match this whole message'!"
```

### 6 - Use parts of the players message in execute actions

The below utilizes the multiargs placeholder to get all words after the 2nd word (after "repeat me:")

```yaml
entries:
  1:
    match: "{text}{only_chat}repeat me:"
    set-matches-as: "{dont_modify}{dont_notify}{dont_log}"
    execute:
      - "{broadcast}: You typed: '{multiargs2}'"
```

The below utilizes the multiargs placeholder and the arg placeholder to get all words, and get the 8th word (after "repeat only the first word I type:")

```yaml
entries:
  1:
    match: "{text}{only_chat}repeat only the first word I type:"
    set-matches-as: "{dont_modify}{dont_notify}{dont_log}"
    execute:
      - "{broadcast}: The first word after 'repeat only the first word I type:' was: '{arg8}'"
```

The below utilizes multiple arg placeholders to get different words from the matched message

```yaml
entries:
  1:
    match: "{text}{only_chat}repeat only the first and second word I type:"
    set-matches-as: "{dont_modify}{dont_notify}{dont_log}"
    execute:
      - "{broadcast}: The first word: '{arg10}', the second word: '{arg11}'" 
```


# Main/core config guide

You can access the below settings in the **config.yml** file within the plugin's root folder.

{% hint style="success" %}
**Config excerpts taken from v4.4.0 and may not be completely up-to-date with the latest changes. To see the most up-to-date file, see below:**
{% endhint %}

{% content-ref url="/pages/-MFJ4FTIcBrX-7-q3XIe" %}
[config.yml](/files/files/root-folder/config.yml)
{% endcontent-ref %}

###

### check-for-updates

Should ChatSentry notify operators (and players with the permission "chatsentry.admin") when new plugin updates are available?

Keeping this on is highly recommended as otherwise you won't be able to take advantage of new features and fixes as quickly!

```yaml
check-for-updates: true
```

### bungeecord

Experimental: Using BungeeCord? ChatSentry offers various cross-server synchronization options below.

For information on how to set up the plugin to work with BungeeCord, see the guide here: [https://wiki.chatsentry.xyz/bungeecord-bridge-setup-guide](/network-bridge-setup-guide)

The below settings are global and non-exclusive to this instance. Any changes made here will be applied to all other ChatSentry configs on your network.

```yaml
bungeecord:
  enable: false
  sync-configs: true
  sync-playerdata: true
  global-admin-notifier-messages: true
```

### process-commands

Should ChatSentry's modules filter commands as well as chat? Unless otherwise stated in their descriptions, modules require this option to be enabled in order to filter commands. Almost all modules support processing commands.

```yaml
process-commands: true
```

### process-signs, process-anvils, process-books

Should ChatSentry's applicable modules filter through writing on signs, renaming items in anvils, and writing in books?

{% hint style="info" %}
Currently the only modules directly supporting these options are the Word & Phrase Filter, the Link & Ad Blocker, and the Unicode Remover
{% endhint %}

```yaml
process-signs: true
process-anvils: true
process-books: true
```

### context-prediction

Context prediction aims to increase positive detections and decrease false positive detections through acting as a safenet for supported modules with sophisticated logic that dynamically adjusts thresholds and options real-time to react more precisely based on predicted context of messages. Adjustments are temporary & unique to messages; they do not permanently change any config options.

```yaml
context-prediction: true
```

### disable-vanilla-spam-kick

Should ChatSentry disable Minecraft's built in "Kicked for spamming" / "disconnect.spam" kick? There is no way to disable these kicks in the server configuration, however with a workaround ChatSentry can override it and prevent it from occurring. It's recommended to keep this enabled to give the auto punisher full punishment priority.

```yaml
disable-vanilla-spam-kick: true
```

### enable-violations-log

Should chat detections and violations be logged for future reference? This is required to be enabled in order to make use of the lookup command.

```yaml
enable-violations-log: true
```

### enable-logging-for

Below is which violations and detections are logged. Requires the above option to be enabled.

It's recommended you keep these as they are by default to prevent unnecessary detections being logged and taking up useless storage space.

```yaml
enable-logging-for:
  chat-cooldown: false
  link-and-ad-blocker: true
  word-and-phrase-filter: true
  spam-blocker: false
  unicode-remover: true
  cap-limiter: false
  anti-parrot: true
  anti-chat-flood: false
  anti-statue-spambot: false
  chat-executor: false
```

### override-bypass-permissions

You can disable the functionality of particular module and restrictions' bypass permissions and force modules to apply themselves to players even with bypass permissions or op by enabling the overrides below

It's recommended you do this per-player/group with permissions by simply negating/disabling the bypass permission for modules/restrictions you'd like to apply to them if they have the bypass all permission. However, this option is available as a hard override

This option is also useful for testing purposes if you don't want to have to deop yourself to test a module or restriction

```yaml
override-bypass-permissions:
  chat-cooldown: false
  link-and-ad-blocker: false
  word-and-phrase-filter: false
  spam-blocker: false
  unicode-remover: false
  cap-limiter: false
  anti-parrot: false
  anti-chat-flood: false
  anti-statue-spambot: false
  anti-join-flood: false
  chat-executor: false
  auto-grammar: false
  anti-command-prefix: false
  command-spy: false
```

### enable-\<module>

Below you can enable the modules you'd like to use. Go in to the modules config files in the modules folder to adjust their settings.

```yaml
# Intelligent Auto Punisher:
# Automatically runs punishment commands on players who excessively trigger modules within a defined time frame.
enable-auto-punisher: false

# Intelligent Chat Cooldown:
# Controls how quickly players can send messages and configured or all commands within a defined time frame.
enable-chat-cooldown: false

# Intelligent Spam Blocker:
# Prevents players from repeating the same or similar messages over and over within a short period of time. The more times a player attempts to repeat a message when it's already being blocked, the longer before they will be able to repeat themselves again, creating a dynamic and infinitely expanding block period that will disallow spam bots trying to repeat the same messages over and over for long durations of time.
enable-spam-blocker: false

# Intelligent Link & Ad Blocker:
# Prevents web links & server advertising (regular server ips & numeric server ips) with optional extra sensitivity bypass detection in chat, commands, signs, anvils, and books (additional check contexts can be disabled). Includes the ability to whitelist domains or all subdomains of a domain.
enable-link-and-ad-blocker: false

# Intelligent Word & Phrase Filter:
# Hyper intelligently detects swears configured blocked words or phrases (and words/phrases similar to those on the list) from being said in chat, commands, signs, anvils, and books (additional check contexts can be disabled).
enable-word-and-phrase-filter: false

# Unicode Remover:
# Removes non US-ASCII (US keyboard) characters in chat messages and commands to prevent alphanumeric lookalike unicode characters from being used to bypass filters & modules. Has the option to use a compatibility mode that only blocks unicode used by hacked clients - blocking virtually all alphanumeric lookalike unicode supported by MC while allowing other languages in chat, commands, signs, anvils, and books (additional check contexts can be disabled)
enable-unicode-remover: false

# Intelligent Cap Limiter:
# Limits the use of excessive capital letters in messages without interference of messages using proper grammar. Can auto-set the message to lowercase or blocks it entirely. Player names are ignored.
enable-cap-limiter: false

# Anti Statue Spambot:
# Prevents joining players abilities to send messages or commands until they move in order to protect against basic artificially controlled spam bots. Has an optional command whitelist. Does not require "process-commands" in the main config to be enabled to function.
enable-anti-statue-spambot: false

# Intelligent Anti Parrot:
# Prevents players using hacked clients to automatically copy ("parrot") other players chat messages. Also prevents the same (non-generic) message from be said by multiple players within a short time frame.
enable-anti-parrot: false

# Intelligent Anti Chat Flood:
# Prevents or intelligently modifies the use of excessive repeated characters and very long "words" without interfering with players using 'expressive' chat.
enable-anti-chat-flood: false

# Anti Join Flood:
# Prevents more than a defined amount of players joining every minute to prevent bot join flooding to lag, spam, & or crash the server.
enable-anti-join-flood: false

# Anti Command Prefix:
# Prevents players using prefixed commands to get around filters and discover potential sensitive server information like the plugins. Ex. /minecraft:me instead of /me. Does not require "process-commands" in the main config to be enabled to function. Optionally integrates with the Command Spy module; when a command is modified/a prefix is removed, it will appear crossed out in the command spy notification.
enable-anti-command-prefix: false

# Intelligent Chat Executor:
# Modifies and or performs actions triggered by defined chat messages/commands using simple or complex matching techniques.
enable-chat-executor: false

# Auto Grammar:
# Converts players' messages to use proper capitalization, periods, and correct typos in chat and configured or all commands.
enable-auto-grammar: false

# Command Spy:
# Shows players real-time commands to admins. Commands can optionally be whitelisted or blacklisted. Does not require "process-commands" in the main config to be enabled to function.
enable-command-spy: false

# Admin Notifier:
# Notifies admins real-time when a module is triggered with detailed information, allowing them to know when to take action if necessary.
enable-admin-notifier: false
```


# Module config guides


# Admin Notifier

## About this module

The Admin Notifier module notifies admins real-time when a module is triggered with detailed information, allowing them to know when to take action if necessary.

{% hint style="info" %}
To receive notifications, op or the permission: "**chatsentry.getnotified**" is required.
{% endhint %}

## Config guide

You can access the below settings in the **admin-notifier.yml** file within the **modules** folder of the plugin's root folder.

{% hint style="success" %}
**Config excerpts taken from v3.6.0 and may not be completely up-to-date with the latest changes. To see the most up-to-date file, see below:**
{% endhint %}

{% content-ref url="/pages/-MOrlQKcbH4ikKR456Eh" %}
[admin-notifier.yml](/files/files/module-configurations/admin-notifier.yml)
{% endcontent-ref %}

### enable-notifications-for

These are the modules that support real time notifications. Changing these options allows you choose which of them notifications should be enabled for.

Please note that changing below values for modules which are not enabled in config.yml will have no effect.

```yaml
enable-notifications-for:
  chat-cooldown: true
  link-and-ad-blocker: true
  word-and-phrase-filter: true
  spam-blocker: true
  unicode-remover: true
  cap-limiter: true
  anti-parrot: true
  anti-chat-flood: true
  anti-statue-spambot: true
  anti-join-flood: true
  chat-executor: true
```

### send-to-console

Determines whether violation notifications should be sent to console in addition to players with notification permission.

```yaml
send-to-console: true
```

### remind-notifs-toggled-off-on-join

Should ChatSentry remind joining players (with violation notification permission) that they have violation notifications toggled off?

```yaml
remind-notifs-toggled-off-on-join: true
```


# Anti Chat Flood

## About this module

The Intelligent Anti Chat Flood module prevents or intelligently modifies the use of excessive repeated characters and very long "words" without interfering with players using 'expressive' chat.

{% hint style="info" %}
To bypass this module, op or the permission: "**chatsentry.antichatflood.bypass**" is required.
{% endhint %}

## Config guide

You can access the below settings in the **anti-chat-flood.yml** file within the **modules** folder of the plugin's root folder.

{% hint style="success" %}
**Config excerpts taken from v3.6.0 and may not be completely up-to-date with the latest changes. To see the most up-to-date file, see below:**
{% endhint %}

{% content-ref url="/pages/-MOrlYuxxIGjl0QFBUAB" %}
[anti-chat-flood.yml](/files/files/module-configurations/anti-chat-flood.yml)
{% endcontent-ref %}

### repeated-character-limit

The maximum times the same character can be repeated consecutively. Applies to all characters not on the custom limit list below this option.

If using `modify-message`, this is not the exact amount of characters that will show up in chat (there will probably be a few less, depending on the circumstance).

```yaml
repeated-character-limit: 12
```

### custom-limits

Since some characters take up less space (like "!") you can optionally allow them to be repeated additional times to reduce interferences with people being extra expressive in chat who aren't attempting to flood it

**Format: `<CHARACTER>;;<REPEAT LIMIT>`**

*Set to "custom-limits: \[]" to have no custom limits*

Please note that this list is case sensitive

```yaml
custom-limits:
  - "!;;30"
  - "?;;12"
  - ".;;35"
  - "A;;12"
```

### max-word-length

Maximum character length of words (ignores custom limit chars)

```yaml
max-word-length: 32
```

### &#xD;ignore-long-links

Should web links longer than the maximum "word" length limit be ignored?

```yaml
ignore-long-links: true
```

### modify-message

When set to true, the detected message will be intelligently modified instead of blocked entirely.\
The amount of repeated chars to cut off is determined by a division of the initial limit

**Example: "Heyyyyyyyyyyyyyyy" -> becomes -> "Heyyyyy"**

```yaml
modify-message: true
```

### send-block-message-when-modified

Only applies if `modify-message` is true. When a message is modified, should the blocked message below be sent as well?

```yaml
send-block-message-when-modified: true
```

### affected-commands&#xD;

{% hint style="warning" %}
The below list will only work if "process-commands" is true in config.yml
{% endhint %}

The below list is which commands the module will apply to. It's recommended to only set these to your private messaging commands.

*Set the list to "affected-commands: \[]" to apply the module to ALL commands (highly not recommended!)*&#x20;

Make sure to only include base commands; don't add any command arguments. (spaces)

```yaml
affected-commands:
  - "/tell"
  - "/t"
  - "/msg"
  - "/w"
  - "/r"
  - "/whisper"
  - "/w"
  - "/pm"
```


# Anti Command Prefix

## About this module

The Anti Command Prefix module prevents players using prefixed commands to get around filters and discover potential sensitive server information like the plugins. Ex. /minecraft:me instead of /me.

This module does not require "process-commands" in the main config to be enabled to function.&#x20;

Optionally integrates with the Command Spy module; when a command is modified/a prefix is removed, it will appear crossed out in the command spy notification.

{% hint style="info" %}
This module works by modifying command contents after they're sent by players. Ex. "/essentials:msg" will run without the prefix ("/msg")
{% endhint %}

{% hint style="info" %}
To bypass this module, op or the permission: "**chatsentry.anticommandprefix.bypass**" is required.
{% endhint %}

## Config guide

You can access the below settings in the **anti-command-prefix.yml** file within the **modules** folder of the plugin's root folder.

{% hint style="success" %}
**Config excerpts taken from v3.6.0 and may not be completely up-to-date with the latest changes. To see the most up-to-date file, see below:**
{% endhint %}

{% content-ref url="/pages/-MOrlhPLaqIZzjXUmSMx" %}
[anti-command-prefix.yml](/files/files/module-configurations/anti-command-prefix.yml)
{% endcontent-ref %}

###

### allowed-prefixed-commands&#xD;

Command exemption list: commands below will be allowed to be ran with their prefix.

*Set to "allowed-prefixed-commands: \[]" to have an empty list.*

```yaml
allowed-prefixed-commands:
  - "/plugin:command"
  - "/plugin2:command"
```

### allowed-global-prefixes

Prefix exemption list: prefixes below will be allowed to be ran no matter the command.

*Set to "allowed-global-prefixes: \[]" to have an empty list.*

```yaml
allowed-global-prefixes:
  - "plugin:"
  - "plugin2:"
```

### send-msg-when-modified

Should the module send the message (changeable via lang.yml) notifying the player their command was modified when it removes a disallowed prefix?

```yaml
send-msg-when-modified: true
```


# Anti Join Flood

## About this module

The Anti Join Flood module prevents more than a defined amount of players joining every minute to prevent bot join flooding to lag, spam, & or crash the server.

## Config guide

You can access the below settings in the **anti-join-flood.yml** file within the **modules** folder of the plugin's root folder.

{% hint style="success" %}
**Config excerpts taken from v4.1.4 and may not be completely up-to-date with the latest changes. To see the most up-to-date file, see below:**
{% endhint %}

{% content-ref url="/pages/-MOrlnrRz0tLe4y1WHmf" %}
[anti-join-flood.yml](/files/files/module-configurations/anti-join-flood.yml)
{% endcontent-ref %}

###

### allowed-joins-per-minute&#xD;

This is the limit of joins (including relogs) that will be allowed by the server within 60 seconds

{% hint style="warning" %}
Make sure you change this value to what will work best for your server to prevent ChatSentry from blocking players from joining when it shouldn't.
{% endhint %}

**Recommended settings:**\
Small servers: \~12\
Medium servers: \~35\
Big servers: \~100+

```yaml
allowed-joins-per-minute: 12
```

### disable-join-flood-check-on-startup

This option disables join flood checking for 2 minutes and 30 seconds after starting to prevent blocking people joining back after the server restarts.

Only set this to false if the server is actively being flooded to prevent issues.

```yaml
disable-join-flood-check-on-startup: true
```


# Anti Parrot

## About this module

The Intelligent Anti Parrot module prevents players using hacked clients to automatically copy ("parrot") other players chat messages. Also prevents the same (non-generic) message from be said by multiple players within a short time frame.

{% hint style="info" %}
To bypass this module, op or the permission: "**chatsentry.antiparrot.bypass"** is required.&#x20;
{% endhint %}

## Config guide

You can access the below settings in the **anti-parrot.yml** file within the **modules** folder of the plugin's root folder.

{% hint style="success" %}
**Config excerpts taken from v4.4.0 and may not be completely up-to-date with the latest changes. To see the most up-to-date file, see below:**
{% endhint %}

{% content-ref url="/pages/-MOrlzmCVffee38QB3CM" %}
[anti-parrot.yml](/files/files/module-configurations/anti-parrot.yml)
{% endcontent-ref %}

###

### intelligent&#xD;

Should anti parrot utilize extra intelligence algorithms? Keeping this on is highly recommended. Typically having this on extends compatibility to detect players using premium / smarter hacked clients.

```yaml
intelligent: true
```

### ignore-short

If true, short messages such as "lol" or "xD" will be ignored and not detected as parroting if multiple players repeat them in a short time frame.

Note that this only applies to VERY short messages like the examples mentioned above.

```yaml
ignore-short: true
```

### ignore-usernames

Should players usernames in any phrase-whitelist phrases be ignored?

```yaml
ignore-usernames: true
```

### phrase-whitelist

The phrases below are phrases that the module will ignore, and can be said by multiple players within a short time frame.

Character case in the below list does NOT matter. Case variants are automatically checked by the plugin.

*Set to "phrase-whitelist: \[]" to have an empty list.*

```yaml
phrase-whitelist:
  - "wb"
  - "welcome back"
  - "wbbb"
  - "weba"
  - "yes"
  - "yea"
  - "ok"
  - "sure"
  - "no"
  - "nope"
  - "nah"
  - "yup"
  - "yep"
  - "yeh"
```

### phrase-whitelist-similarity-threshold

How similar must a message be to a phrase on the list above to be considered the same and also whitelisted? (in %)

**1.0** = exactly as one of the phrases on the list (excluding character case)\
**0.0** = not exact at all (this eliminates the purpose of the whitelist)

```yaml
phrase-whitelist-similarity-threshold: 0.85
```


# Anti Statue Spambot

## About this module

The Anti Statue Spambot module prevents joining players abilities to send messages or commands until they move in order to protect against basic artificially controlled spam bots. Has an optional command whitelist. Does not require "process-commands" in the main config to be enabled to function.

{% hint style="info" %}
To bypass this module, op or the permission: "**chatsentry.antistatuespambot.bypass"** is required.&#x20;
{% endhint %}

## Config guide

You can access the below settings in the **anti-statue-spambot.yml** file within the **modules** folder of the plugin's root folder.

{% hint style="success" %}
**Config excerpts taken from v3.6.0 and may not be completely up-to-date with the latest changes. To see the most up-to-date file, see below:**
{% endhint %}

{% content-ref url="/pages/-MOrm5qvlMQsZwBcf5\_H" %}
[anti-statue-spambot.yml](/files/files/module-configurations/anti-statue-spambot.yml)
{% endcontent-ref %}

###

### join-command-whitelist&#xD;

If you have plugins that make players run commands when they join, add those commands below so they aren't blocked by ChatSentry.

Make sure to only include base commands; don't add any command arguments (spaces).

Set to "join-command-whitelist: \[]" to have an empty list.

```yaml
join-command-whitelist:
  - "/motd"
```


# Auto Grammar

## About this module

The Auto Grammar module converts players' messages to use proper capitalization, periods, and correct typos in chat and configured or all commands.

{% hint style="info" %}
To bypass this module, op or the permission: "**chatsentry.autogrammar.bypass"** is required.&#x20;

Players with this permission can join even if the joins per minute limit is reached. In addition, their joins won't count against the joins per minute counter.
{% endhint %}

## Config guide

You can access the below settings in the **auto-grammar.yml** file within the **modules** folder of the plugin's root folder.

{% hint style="success" %}
**Config excerpts taken from v3.6.0 and may not be completely up-to-date with the latest changes. To see the most up-to-date file, see below:**
{% endhint %}

{% content-ref url="/pages/-MOrmG6-YzD8N0Lw9-zN" %}
[auto-grammar.yml](/files/files/module-configurations/auto-grammar.yml)
{% endcontent-ref %}

###

### capitalize&#xD;

Should the first word of every sentence of players' messages be capitalized?

```yaml
capitalize: true
```

### add-periods

Should a period be added at the end of players' sentences?

```yaml
add-periods: true
```

### fix-typos

Should typos on the below list be fixed with their replacements?

```yaml
fix-typos: true
```

### corrections

These words will be corrected to the word after the " -> "\
Case doesn't matter in the words on the left side

If one of the words on the left side is typed in all caps by the player, the right side translation will be converted to uppercase as well

```yaml
corrections:
  - "alot -> a lot"
  - "cant -> can't"
  - "wont -> won't"
  - "wouldnt -> wouldn't"
  - "shouldnt -> shouldn't"
  - "couldnt -> couldn't"
  - "youre -> you're"
  - "ill -> I'll"
  - "ive -> I've"
  - "im -> I'm"
  - "id -> I'd"
  - "its -> it's"
  - "doesnt -> doesn't"
  - "dont -> don't"
  - "shes -> she's"
  - "hes -> he's"
  - "theres -> there's"
  - "theyre -> they're"
```

### affected-commands

{% hint style="warning" %}
The below list will only work if "process-commands" is true in config.yml
{% endhint %}

The below list is which commands the module will apply to. It's recommended to only set these to your private messaging commands.

*Set the list to "affected-commands: \[]" to apply the module to ALL commands (highly not recommended!)*

Make sure to only include base commands; don't add any command arguments. (spaces)

```yaml
affected-commands:
  - "/tell"
  - "/t"
  - "/msg"
  - "/w"
  - "/r"
  - "/whisper"
  - "/w"
  - "/pm"
```


# Auto Punisher

## About this module

The Auto Punisher module automatically runs punishment commands on players who excessively trigger modules within a defined time frame.

{% hint style="info" %}
Ops or players with the permission: "**chatsentry.autopunisher.bypass"** will be exempt to ONLY automatic warnings. For the manual warning exemption, see the [**permissions**](/pac/permissions) page.
{% endhint %}

{% hint style="info" %}
**Currently the only modules that support warnings are:**

Chat Cooldown, Link & Ad Blocker, Word & Phrase Filter, Chat Executor, Unicode remover, Cap limiter, Anti Parrot, Anti chat flood, and Anti Statue Spambot
{% endhint %}

{% hint style="info" %}
Manual = warnings that are applied manually via `/cswarn <player>`

**Players module warnings can be manually cleared with** `/cswarnings clearmodulewarnings <player> <module name>`

**Players admin-given (manual) warnings can be cleared with** `/cswarnings pardonallmanual <player>`
{% endhint %}

{% hint style="warning" %}
**Note:** You need a plugin to handle the punishment commands for muting, banning, etc. For the best results, use Essentials or MaxBans' punishment commands.
{% endhint %}

## Config guide

You can access the below settings in the **auto-punisher.yml** file within the **modules** folder of the plugin's root folder.

{% hint style="success" %}
**Config excerpts taken from v3.6.0 and may not be completely up-to-date with the latest changes. To see the most up-to-date file, see below:**
{% endhint %}

{% content-ref url="/pages/-MOrmKc\_dZqfSyb2V79Y" %}
[auto-punisher.yml](/files/files/module-configurations/auto-punisher.yml)
{% endcontent-ref %}

###

### Under punishment nodes you can:&#xD;

* Use the format "{player\_msg}: message" to send a message to the player.
* Use the format "{console\_cmd}: command" to run a command as the console.
* Use the format "{player\_cmd}: command" to run a command as the player.
* Use the format "{broadcast}: message" to broadcast a message to all players.

### Within the above formats, you can use:&#xD;

* "{PLAYER}" - players username for commands.
* "{PLAYER\_DISPLAYNAME}" - players display name with its original colors
* "{PLAYER\_DISPLAYNAME\_STRIPPED}" - players display name stripped of its original colors
* "{CURRENT\_WARNS}" - players current warning count for the target module.
* "{MAX\_WARNS}" - maximum warning count for the target module.<br>

`enabled: true/false` nodes determine whether a warning will be added to the player who triggered the module.<br>

### warning-lifetime

In hours, how often should one warning (on every module) expire from players?

Set this to -1 to never have warnings expire automatically. This will disable the below this option as well.

```yaml
warning-lifetime: 23
```

### check-expiry-**interval**

In hours, how often (after startup) should the warnings file be scanned for expired warnings? Keep this at 1 unless you experience tick lag from ChatSentry.

*Note that the file is also checked on every server startup.*

```yaml
check-expiry-interval: 1
```

### verbose-in-console

Should the Auto Punisher send a message to the console when it warns a player, auto expires a players warning, or runs punishment actions on a player?

```yaml
verbose-in-console: true
```

### suppress-warnings-from-console

When enabled, pardon messages will be hidden from receiver players only if triggered by the console. The point of this is so players don't see when their warnings are reset when triggered by the last punishment set under a module.

```yaml
suppress-pardons-from-console: true
```

### broadcast-manual-warnings

Should a broadcast be sent to everybody when a player is manually warned via /warn? (broadcast is configurable via the misc-lang.yml file)

```yaml
broadcast-manual-warnings: true
```

### warning-config

{% hint style="danger" %}
**IMPORTANT:** The applicable above pardon command should be ran at the end (highest) warning count to reset the players warning count immediately to prevent them getting warning counts higher than the max punishment, allowing them to get infinite warnings without punishment.
{% endhint %}

```yaml
warning-config:
  manual:
    enabled: true
    punishments:
      2:
        - "{player_msg}: &cYou only have one warning remaining for the next 24 hours! Next time you'll be temporarily banned."
      3:
        - "{console_cmd}: ban {PLAYER} 12h Exceeded warnings"
        - "{console_cmd}: cswarnings pardonallmanual {PLAYER}"
  chat-cooldown:
    enabled: true
    punishments:
      6:
        - "{player_msg}: &cIf you keep violating the filter, you'll be muted! You've been warned."
      12: 
        - "{console_cmd}: mute {PLAYER} 10m Chatting too fast"
        - "{console_cmd}: cswarnings clearmodulewarnings {PLAYER} chat-cooldown"
  link-and-ad-blocker:
    enabled: true
    punishments:
      2:
        - "{player_msg}: &cIf you violate the filter again, you'll be muted! You've been warned."
      3:
        - "{console_cmd}: mute {PLAYER} 1h Disallowed links/ips in chat."
        - "{console_cmd}: kill {PLAYER}"
      9:
        - "{player_msg}: &cIf you violate the fiter again, you'll be banned! You've been warned."
      10:
        - "{console_cmd}: kill {PLAYER}"
        - "{console_cmd}: tempban {PLAYER} 12h Disallowed links/ips in chat."
        - "{console_cmd}: cswarnings clearmodulewarnings {PLAYER} link-and-ad-blocker"
  word-and-phrase-filter:
    enabled: true
    punishments:
      2:
        - "{player_msg}: &cIf you violate the filter again, you'll be muted! You've been warned."
      3:
        - "{console_cmd}: mute {PLAYER} 1h Explicit language"
        - "{console_cmd}: kill {PLAYER}"
      9:
        - "{player_msg}: &cIf you violate the fiter again, you'll be banned! You've been warned."
      10:
        - "{console_cmd}: kill {PLAYER}"
        - "{console_cmd}: tempban {PLAYER} 1d Explicit language"
        - "{console_cmd}: cswarnings clearmodulewarnings {PLAYER} word-and-phrase-filter"
  chat-executor:
    enabled: false
    punishments: []
  spam-blocker:
    enabled: true
    punishments:
      3:
        - "{player_msg}: &cIf you keep violating the filter, you'll be muted! You've been warned."
      6:
        - "{console_cmd}: mute {PLAYER} 1h Spam"
        - "{console_cmd}: kill {PLAYER}"
      9:
        - "{player_msg}: &cIf you violate the fiter again, you'll be banned! You've been warned."
      10:
        - "{console_cmd}: kill {PLAYER}"
        - "{console_cmd}: tempban {PLAYER} 12h Spam"
        - "{console_cmd}: cswarnings clearmodulewarnings {PLAYER} spam-blocker"
  unicode-remover:
    enabled: true
    punishments:
      6:
        - "{player_msg}: &cIf you violate the filter again, you'll be muted! You've been warned."
      7:
        - "{console_cmd}: mute {PLAYER} 1h Disallowed chat unicode"
        - "{console_cmd}: cswarnings clearmodulewarnings {PLAYER} unicode-remover"
  cap-limiter:
    enabled: true
    punishments:
      3:
        - "{player_msg}: &cIf you keep violating the filter, you'll be muted! You've been warned."
      6:
        - "{console_cmd}: mute {PLAYER} 1h Cap spam"
      10:
        - "{player_msg}: &cIf you violate the fiter again, you'll be banned! You've been warned."
      11:
        - "{console_cmd}: kill {PLAYER}"
        - "{console_cmd}: tempban {PLAYER} 12h Cap spam"
        - "{console_cmd}: cswarnings clearmodulewarnings {PLAYER} cap-limiter"
  anti-parrot:
    enabled: true
    punishments:
      2:
        - "{player_msg}: &cIf you keep violating the filter, you'll be muted! You've been warned."
      4:
        - "{console_cmd}: mute {PLAYER} 1h Parroting players"
        - "{console_cmd}: kill {PLAYER}"
      5:
        - "{player_msg}: &cIf you violate the fiter again, you'll be banned! You've been warned."
      6:
        - "{console_cmd}: kill {PLAYER}"
        - "{console_cmd}: tempban {PLAYER} 12h Parroting players"
        - "{console_cmd}: cswarnings clearmodulewarnings {PLAYER} anti-parrot"
  anti-chat-flood:
    enabled: true
    punishments:
      3:
        - "{player_msg}: &cIf you keep violating the filter, you'll be muted! You've been warned."
      6:
        - "{console_cmd}: mute {PLAYER} 1h Excessive chat flood"
        - "{console_cmd}: cswarnings clearmodulewarnings {PLAYER} anti-chat-flood"
  anti-statue-spambot:
    enabled: true
    punishments:
      3:
        - "{console_cmd}: kick {PLAYER} Detected as statue spambot"
      8:
        - "{console_cmd}: tempban {PLAYER} 7d Statue spambot"
        - "{console_cmd}: cswarnings clearmodulewarnings {PLAYER} anti-statue-spambot"
```


# Cap Limiter

## About this module

The Intelligent Cap Limiter module limits the use of excessive capital letters in messages without interference of messages using proper grammar. Can auto-set the message to lowercase or blocks it entirely. Player names are ignored.

{% hint style="info" %}
To bypass this module, op or the permission: "**chatsentry.caplimiter.bypass"** is required.&#x20;
{% endhint %}

## Config guide

You can access the below settings in the **cap-limiter.yml** file within the **modules** folder of the plugin's root folder.

{% hint style="success" %}
**Config excerpts taken from v3.6.0 and may not be completely up-to-date with the latest changes. To see the most up-to-date file, see below:**
{% endhint %}

{% content-ref url="/pages/-MOrmRhZ8YiKsjCyJUVO" %}
[cap-limiter.yml](/files/files/module-configurations/cap-limiter.yml)
{% endcontent-ref %}

###

### repeated-cap-limit&#xD;

Below is the number of capital letters players will be allowed write in a row

{% hint style="success" %}
*Player names will be ignored*
{% endhint %}

```yaml
repeated-cap-limit: 8
```

### master-cap-limit

Below is the maximum amount of capital letters messages can contain before being blocked by the filter. To avoid problems, be mindful of players writing with proper capitalization in longer messages by not setting this value lower than about 15.

```yaml
master-cap-limit: 18
```

### modify-message

When set to true, the messages caps will be replaced with lowercase letters and sent. When set to false the detected message will be blocked entirely.

```yaml
modify-message: true
```

### send-block-message-when-modified

Only applies if modify-message is true. When a message is modified, should the blocked message below be sent as well?

```yaml
send-block-message-when-modified: true
```

### affected-commands

{% hint style="warning" %}
The below list will only work if "process-commands" is true in config.yml
{% endhint %}

The below list is which commands the module will apply to. It's recommended to only set these to your private messaging commands.

*Set the list to "affected-commands: \[]" to apply the module to ALL commands (highly not recommended!*)

Make sure to only include base commands; don't add any command arguments. (spaces)

```yaml
affected-commands:
  - "/tell"
  - "/t"
  - "/msg"
  - "/w"
  - "/r"
  - "/whisper"
  - "/w"
  - "/pm"
```


# Chat Cooldown

## About this module

The Intelligent Chat Cooldown&#x20;module controls how quickly players can send messages and configured or all commands within a defined time frame.

{% hint style="info" %}
To bypass this module, op or the permission: "**chatsentry.chatcooldown.bypass"** is required.&#x20;
{% endhint %}

## Config guide

You can access the below settings in the **chat-cooldown.yml** file within the **modules** folder of the plugin's root folder.

{% hint style="success" %}
**Config excerpts taken from v3.6.0 and may not be completely up-to-date with the latest changes. To see the most up-to-date file, see below:**
{% endhint %}

{% content-ref url="/pages/-MOrmZn1f\_p\_TEBNNyqO" %}
[chat-cooldown.yml](/files/files/module-configurations/chat-cooldown.yml)
{% endcontent-ref %}

###

### chat-cooldown-in-ticks&#xD;

Below is the duration of time the options below this option will apply to

{% hint style="success" %}
20 ticks ***=*** 1 second

160 ticks ***=*** 8 seconds
{% endhint %}

```yaml
chat-cooldown-in-ticks: 160
```

### allowed-message-sends-per-cooldown

How many messages can players send every chat-cooldown-in-ticks amount of time?

```yaml
allowed-message-sends-per-cooldown: 4
```

### allowed-affected-command-runs-per-cooldown

How many commands on the below affected-commands list can players send every chat-cooldown-in-ticks amount of time?

```yaml
allowed-affected-command-runs-per-cooldown: 6
```

### affected-commands

{% hint style="warning" %}
The below list will only work if "process-commands" is true in config.yml
{% endhint %}

### &#xD;

The below list is which commands the module will apply to. It's recommended to only set these to your private messaging commands.

Set the list to "affected-commands: \[]" to apply the module to ALL commands (highly not recommended!)

Make sure to only include base commands; don't add any command arguments. (spaces)

```yaml
affected-commands:
  - "/tell"
  - "/t"
  - "/msg"
  - "/w"
  - "/r"
  - "/whisper"
  - "/w"
  - "/pm"
```


# Chat Executor

## About this module

The Intelligent Chat Executor modifies and or performs actions triggered by defined chat messages/commands using simple or complex matching techniques.

{% hint style="info" %}
To bypass this module, op or the permission: "**chatsentry.chatexecutor.bypass"** is required.&#x20;
{% endhint %}

### Guide & entry examples:

{% content-ref url="/pages/-MQT6qz9V9vxCVgZVojF" %}
[In depth Chat Executor guide & entry examples](/in-depth-chat-executor-guide-and-entry-examples)
{% endcontent-ref %}

### Default config:

{% content-ref url="/pages/-MOrmiEF75cBjC09EaaY" %}
[chat-executor.yml](/files/files/module-configurations/chat-executor.yml)
{% endcontent-ref %}


# Command Spy

## About this module

The Command Spy module shows players real-time commands to admins. Commands can optionally be whitelisted or blacklisted. Does not require "process-commands" in the main config to be enabled to function.

{% hint style="info" %}
To receive notifications, op or the permission: "**chatsentry.commandspy**" is required.

Players with op or the permissions: "**chatsentry.commandspy**" & "**chatsentry.commandspy.toggle**" can toggle their commandspy notifications off and on.

To make a player or group exempt from having their commands sent to players with command spy permission, add "**chatsentry.commandspy.exempt**" to their permissions.
{% endhint %}

## Config guide

You can access the below settings in the **command-spy.yml** file within the **modules** folder of the plugin's root folder.

{% hint style="success" %}
**Config excerpts taken from v3.6.0 and may not be completely up-to-date with the latest changes. To see the most up-to-date file, see below:**
{% endhint %}

{% content-ref url="/pages/-MOrmuxwZuL301eVMMaZ" %}
[command-spy.yml](/files/files/module-configurations/command-spy.yml)
{% endcontent-ref %}

###

### use-command-whitelist

If false, all commands will be "spied" on except for ones starting with the blacklisted ones. If true, only commands that start with any of the whitelisted ones will be "spied" on.

If use-command-whitelist is enabled, only commands that start with any of the words on the below list will be sent to players with commandspy permission.

```yaml
use-command-whitelist: false
```

### commandspy-command-blacklist

Commands that start with any of the words on this list won't be sent to players with commandspy permission.

*Set to "commandspy-command-blacklist: \[]" to have an empty list.*

Make sure to put a "/" before any commands on the list below or the list will not work properly.

Only add base commands; don't add any command arguments. (spaces)

```yaml
commandspy-command-blacklist:
  - "/blacklistedcommand"
```

### commandspy-command-whitelist

If use-command-whitelist is enabled, only commands that start with any of the words on the below list will be sent to players with commandspy permission.

*Set to "commandspy-command-whitelist: \[]" to have an empty list.*

Make sure to put a "/" before any commands on the list below or the list will not work properly.

Only add include base commands; don't add any command arguments. (spaces)

```yaml
commandspy-command-whitelist:
  - "/tell"
  - "/t"
  - "/msg"
  - "/w"
  - "/r"
  - "/whisper"
  - "/w"
  - "/pm"
```


# Link & Ad Blocker

## About this module

The Intelligent Link & Ad Blocker prevents web links & server advertising (regular server ips & numeric server ips) with optional extra sensitivity bypass detection in chat, commands, signs, anvils, and books (any check contexts can be disabled). Includes the ability to whitelist domains or all subdomains of a domain.

{% hint style="info" %}
To bypass this module, op or the permission: "**chatsentry.linkandadblocker.bypass"** is required.&#x20;
{% endhint %}

{% hint style="info" %}
I&#x66;**`process-commands`**&#x69;s true in config.yml, this module will filter through all commands (of players without bypass permission or op)

I&#x66;**`process-signs`** is true in config.yml, this module will filter through text written on signs (of players without bypass permission or op)

I&#x66;**`process-anvils`** is true in config.yml, this module will filter through items renamed in anvils (of players without bypass permission or op)

I&#x66;**`process-books`** is true in config.yml, this module will filter through writing in books (of players without bypass permission or op)
{% endhint %}

## Config guide

You can access the below settings in the **link-and-ad-blocker.yml** file within the **modules** folder of the plugin's root folder.

{% hint style="success" %}
**Config excerpts taken from v3.6.0 and may not be completely up-to-date with the latest changes. To see the most up-to-date file, see below:**
{% endhint %}

{% content-ref url="/pages/-MOrn5hfo4c\_RW1KE2So" %}
[link-and-ad-blocker.yml](/files/files/module-configurations/link-and-ad-blocker.yml)
{% endcontent-ref %}

###

### domain-whitelist&#xD;

The below list is the list of domain names (not urls) that will be ignored by the filter.

{% hint style="info" %}
**Variants with and without http\://, https\://, and [www](http://www). will automatically be handled by the plugin; no need to add them below.**

Ex. adding "google.com" will allow: <https://google.com>, <http://google.com>, [www.google.com](http://www.google.com), <https://www.google.com>, and <http://www.google.com>
{% endhint %}

{% hint style="info" %}
If you wish to whitelist **all subdomains of a domain**, you can do so with "\*."; ex. "\*.google.com" will permit all subdomains of Google ("mail.google.com", "<https://maps.google.com>", etc.)
{% endhint %}

Character case in the below list does not matter. Case variants are automatically checked by the plugin.

*Set to "domain-whitelist: \[]" to have an empty list.*

```yaml
domain-whitelist:
  - "*.yourServersWebsite.com"
  - "*.AllSubdomainsOfThisDomainAreAllowed.com"
  - "youtube.com"
  - "youtu.be"
  - "spigotmc.org"
```

### command-whitelist

If you have commands that you would like the filter to ignore checking, add them to the list below.

Useful if you want to disable the filters checks in commands that use permissions or use comma lists (extra sensitivity will detect them otherside), or for commands like /msg.

Make sure to only include base commands; don't add any command arguments. (spaces)

*Set to "command-whitelist: \[]" to have an empty list.*

```yaml
command-whitelist:
  - "/lp"
  - "/pex"
  - "/mangaddp"
  - "/manuaddp"
  - "/mangdelp"
  - "/manudelp"
  - "/rg"
  - "/region"
  - "//set"
  - "//replace"
  - "//overlay"
  - "//gmask"
  - "//fill"
```

### only-filter-top-level-domains

If enabled, the plugin will only block roughly 1,500 of the most widely used (TLD) domains (like .com, .net, .org, etc). Keeping this can substantially decrease false positive detections and will still effectively block advertising - however the downside is that uncommon, more suspicious links are unlikely to be detected.

Only turn this off if you want maximum protection from links of any kind

The current TLD list utilized by the plugin is Version 2021020900, Last Updated Tue Feb 9 07:07:01 2021 UTC, via [https://data.iana.org/TLD/tlds-alpha-by-domain.txt](< https://data.iana.org/TLD/tlds-alpha-by-domain.txt>)

```yaml
only-filter-top-level-domains: true
```

### extra-sensitive

If enabled, common exploits to bypass link / ip filters will be blocked. For example, "google,,com", "google(dot)com", "youtube {D\_O\_T}com", etc.

You can usually safely turn this off if you don't get a lot of advertisers or bots. Since having this on makes the filter extra sensitive, the filter will be more likely to block things when it shouldn't. Due to how this option blindly processes a lot of messages, it does not respect the domain whitelist or only-filter-top-level-domains and will apply itself to any attempted malformed links it detects.

```yaml
extra-sensitive: true
```

### ignore-handles

If enabled, should social handles with periods (ex. "@some.social.handle") will be ignored. Please note turning this on allows people to bypass the filter by simply adding an "@" symbol to the start of the link/ip in question.

```yaml
ignore-handles: false
```


# Spam Blocker

## About this module

The Intelligent Spam Blocker module prevents players from repeating the same or similar messages over and over within a short period of time. The more times a player attempts to repeat a message when it's already being blocked, the longer before they will be able to repeat themselves again, creating a dynamic and infinitely expanding block period that will disallow spam bots trying to repeat the same messages over and over for long durations of time.

{% hint style="info" %}
To bypass this module, op or the permission: "**chatsentry.spamblocker.bypass"** is required.&#x20;
{% endhint %}

## Config guide

You can access the below settings in the **spam-blocker.yml** file within the **modules** folder of the plugin's root folder.

{% hint style="success" %}
**Config excerpts taken from v3.6.0 and may not be completely up-to-date with the latest changes. To see the most up-to-date file, see below:**
{% endhint %}

{% content-ref url="/pages/-MOrnC21io-JE\_jFOZsD" %}
[spam-blocker.yml](/files/files/module-configurations/spam-blocker.yml)
{% endcontent-ref %}

###

### phrase-whitelist&#xD;

The phrases below are phrases that the spam blocker will ignore, and can be said over and over.

Character case in the below list does NOT matter. Case variants are automatically checked by the plugin.

*Set to "phrase-whitelist: \[]" to have an empty list.*

```yaml
phrase-whitelist:
  - "wb"
  - "welcome back"
  - "wbbb"
  - "weba"
  - "yes"
  - "yea"
  - "ok"
  - "sure"
  - "no"
  - "nope"
  - "nah"
  - "yup"
  - "yep"
  - "yeh"
```

### phrase-whitelist-similarity-threshold

How similar must a message be to a phrase on the list above to be allowed through? (in %)

**1.0** = exactly as one of the phrases on the list (excluding character case)\
**0.0** = not exact at all (this eliminates the purpose of the whitelist)

```yaml
phrase-whitelist-similarity-threshold: 0.65
```

### block-repeated-message-similarity-threshold

If a player's message isn't similar to one of the messages on the phrase-whitelist, the below threshold value is used.

How similar must a player's current message be to their last message(s) within the repeat-cooldown-in-seconds period in order to be blocked?

**1.0** = message will be blocked only if it's exactly (100%) the same as one of their previous messages within the repeat-cooldown-in-seconds period.\\

\
**0.0** = message needs to be 0% similar to their last message(s) within the repeat-cooldown-in-seconds period in order to be blocked. (this eliminates the purpose of the similarity checker)

```yaml
block-repeated-message-similarity-threshold: 0.82
```

### allowed-repeats

This is how many times a player can repeat any messages they said within the last (roughly) `repeat-cooldown-in-seconds` period of time before being blocked for spam (messages on or similar to the `phrase-whitelist` will be ignored).

```yaml
allowed-repeats: 4
```

### repeat-cooldown-in-seconds

How long after a player sends a message should the module forget that a player said the message? (and allow them to repeat it or a similar message again)

```yaml
repeat-cooldown-in-seconds: 15
```

### affected-commands

{% hint style="warning" %}
The below list will only work if "process-commands" is true in config.yml
{% endhint %}

The below list is which commands the module will apply to. It's recommended to only set these to your private messaging commands.

*Set the list to "affected-commands: \[]" to apply the module to ALL commands (highly not recommended!)*

Make sure to only include base commands; don't add any command arguments. (spaces)

```yaml
affected-commands:
  - "/tell"
  - "/t"
  - "/msg"
  - "/w"
  - "/r"
  - "/whisper"
  - "/w"
  - "/pm"
```


# Unicode Remover

## About this module

The Unicode Remover module removes non US-ASCII (US keyboard) characters in chat messages and commands to prevent alphanumeric lookalike unicode characters from being used to bypass filters & modules. Has the option to use a compatibility mode that only blocks unicode used by hacked clients - blocking virtually all alphanumeric lookalike unicode supported by MC while allowing other languages in chat, commands, signs, anvils, and books (additional check contexts can be disabled)

{% hint style="info" %}
To bypass this module, op or the permission: "**chatsentry.unicoderemover.bypass"** is required.
{% endhint %}

{% hint style="info" %}
I&#x66;**`process-commands`**&#x69;s true in config.yml, this module will filter through all commands (of players without bypass permission or op)

I&#x66;**`process-signs`** is true in config.yml, this module will filter through text written on signs (of players without bypass permission or op)

I&#x66;**`process-anvils`** is true in config.yml, this module will filter through items renamed in anvils (of players without bypass permission or op)

I&#x66;**`process-books`** is true in config.yml, this module will filter through writing in books (of players without bypass permission or op)
{% endhint %}

## Config guide

You can access the below settings in the **anti-join-flood.yml** file within the **modules** folder of the plugin's root folder.

{% hint style="success" %}
**Config excerpts taken from v3.6.0 and may not be completely up-to-date with the latest changes. To see the most up-to-date file, see below:**
{% endhint %}

{% content-ref url="/pages/-MOrnM8WU9L8IHPOBbWl" %}
[unicode-remover.yml](/files/files/module-configurations/unicode-remover.yml)
{% endcontent-ref %}

###

### enable-compatibility-mode&#xD;

Certain hacked clients allow players to type in alphanumeric lookalike unicode characters in order to bypass filters. Enabling this will only limit said alphanumeric lookalike unicode characters that are used by hacked clients and text generators to exploit filters while excluding unicode used by other languages.

Disabling this will block all unicode (which may cause issues if people speak other languages than English)

Though it allows for more protection if disabled, having this off may cause conflicts if players speak languages other than English.

```yaml
enable-compatibility-mode: true
```

## filter-commands

Should this module filter commands? Turning this off is useful if you want people to be able to use unicode in commands such as private messaging\
This option does nothing if "process-commands" is false in config.yml

```yaml
filter-commands: true
```


# Word & Phrase Filter

## About this module

The Intelligent Word & Phrase Filter module hyper intelligently detects swears configured blocked words or phrases (and words/phrases similar to those on the list) from being said in chat, commands, signs, anvils, and books (additional check contexts can be disabled).

{% hint style="info" %}
To bypass this module, op or the permission: "**chatsentry.wordandphrasefilter.bypass"** is required.&#x20;
{% endhint %}

{% hint style="info" %}
I&#x66;**`process-commands`**&#x69;s true in config.yml, this module will filter through all commands (of players without bypass permission or op)

I&#x66;**`process-signs`** is true in config.yml, this module will filter through text written on signs (of players without bypass permission or op)

I&#x66;**`process-anvils`** is true in config.yml, this module will filter through items renamed in anvils (of players without bypass permission or op)

I&#x66;**`process-books`** is true in config.yml, this module will filter through writing in books (of players without bypass permission or op)
{% endhint %}

## Config guide

You can access the below settings in the **word-and-phrase-filter.yml** file within the **modules** folder of the plugin's root folder.

{% hint style="success" %}
**Config excerpts taken from v4.4.0 and may not be completely up-to-date with the latest changes. To see the most up-to-date file, see below:**
{% endhint %}

{% content-ref url="/pages/-MOrnTOwe5Ywb4nHGi72" %}
[word-and-phrase-filter.yml](/files/files/module-configurations/word-and-phrase-filter.yml)
{% endcontent-ref %}

###

### block-similarity-threshold&#xD;

To block variants and attempts to bypass the filter, the module will check for similar words & phrases that are on the block list in players messages and commands.

The value below is how similar other words/phrases must be to a word/phrase on the blacklist to be considered an attempt to exploit / bypass the filter.

**1.0** = exactly as one of the phrases on the list (excluding character case)\
**0.0** = not exact (this eliminates the purpose of the similarity checker)

```yaml
block-similarity-threshold: 0.84
```

### substitution-intelligence

When enabled, the filter will, based off the below charset process lookalike numbers and symbols as letters to detect players substituting letters with numbers numbers to bypass the filter. Ex. @ = A, # = H, 1 = I, 3 = E, etc.

```yaml
substitution-intelligence: true
```

### substitution-intelligence-charset

Below is the substitutions the plugin will process. Please note that adding excessive amounts of substitutions will raise false positive rates.

{% hint style="info" %}
For the best results, it's recommended to try and keep this list pretty short and under \~12 substitutions
{% endhint %}

```yaml
substitution-intelligence-charset:
  - "1 (->) i"
  - "2 (->) R"
  - "3 (->) E"
  - "4 (->) A"
  - "@ (->) A"
  - "< (->) C"
  - "# (->) H"
  - "$ (->) S"
  - "+ (->) T"
```

### ignore-usernames: true

Should detections found in players usernames be ignored?

```yaml
ignore-usernames: true
```

### ignore-detected-registered-commands

When enabled, the filter will scan for existing commands from other plugins and allow them to go through, even if they are falsely detected due to being similar to a blocked word

Keeping this enabled is highly recommended, as it can prevent a lot of false positives depending on how many commands your server has.

{% hint style="warning" %}
Note that this option will only work if "process-commands" is true in config.yml
{% endhint %}

```yaml
ignore-detected-registered-commands: true
```

### blocked-words-and-phrases

Below is the blacklist of words & phrases that will be blocked from being said in chat & commands.

Character case in the below list does not matter. Case variants are automatically checked by the plugin on all entries.

*Set to "blocked-words-and-phrases: \[]" to have an empty list.*

{% hint style="success" %}
**For preconfigured (English) lists of swears, slurs, etc. see here:** <https://wiki.chatsentry.xyz/misc-info/preset-word-lists>

{% endhint %}

{% hint style="warning" %}
For an extensive guide on how the block list works and how to set it up properly, see here: <https://wiki.chatsentry.xyz/word-and-phrase-filter-block-list-guide>\
\
**HIGHLY RECOMMENDED TO READ TO PREVENT FALSE DETECTION ISSUES, OR USE THE PRESET LISTS !**
{% endhint %}

```yaml
blocked-words-and-phrases:
  - "badword"
  - "anotherBlockedWord"
  - "a blocked phrase"
  - "exact::exact entry"
  - "exactcontains::exactcontains entry"
```

### whitelisted-word-and-phrases

Below is the whitelist of words & phrases that will under all circumstances be ignored by the filter.

Since similar words/phrases to the blacklisted words/phrases are detected, the below list functions to fix the plugin not allowing valid but close matching words/phrases on entries you have no modifiers on.

Similarity checking is not active on these entries & character case does not matter.

*Set to "whitelisted-words-and-phrases: \[]" to have an empty list.*

```yaml
whitelisted-words-and-phrases:
  - "alwaysAllowThisWord"
  - "always allow this phrase"
```

### whitelisted-commands

{% hint style="warning" %}
The below list will only work if "process-commands" is true in config.yml
{% endhint %}

The below list is which commands (including all arguments) the module under all circumstances will not process.

Make sure to only include base commands; don't add any command arguments. (spaces)

*Set to "whitelisted-commands: \[]" to have an empty list.*

```yaml
whitelisted-commands:
  - "/exampleIgnoredCommand"
```


# Lang file guide

### Core in-game messages sent by ChatSentry can be modified in this file&#xD;&#xD;&#xD;

{% hint style="info" %}
All lang entries support colorcodes (**`&[colorcode]`**) and hex values with **`&#hexvalue`** if you're running MC 1.16 or above. Easily find hex values with Google's color picker tool: <https://www.google.com/search?q=color+picker>
{% endhint %}

{% hint style="info" %}
You can set ANY lang strings to **`""`**&#x74;o disable them.&#x20;\
You can us&#x65;**`{PREFIX}`**&#x74;o insert the **`message-prefix`** value any lang strings.\
To insert line breaks, you can use **`{NL}`**
{% endhint %}

You can view the default **lang.yml** file within the plugin's root folder on the wiki below:

{% content-ref url="/pages/-MFJ4bRjQlR4LfPu3\_-4" %}
[lang.yml](/files/files/root-folder/misc-lang.yml)
{% endcontent-ref %}


# Get support, talk with other cs users, make suggestions, etc.

### Have a question? First:

{% hint style="info" %}
**Take a look at the** [**FAQ page**](/faq)**, as your question might already be answered!**
{% endhint %}

{% hint style="success" %}
**If you're interested, you can gain access to the plugins discussion channel to chat with fellow ChatSentry users, get support, make suggestions, give feedback, and more related to the plugin!**\
\
**Join the Discord server here:** [**https://discord.gg/HKnDTRj**](<&#xD;&#xA;https://discord.gg/m5Su7Af&#xD;&#xA;>)
{% endhint %}

Don't have Discord? No worries, just [**start a conversation**](https://www.spigotmc.org/conversations/add) with kixmc through Spigot. Generally support on Spigot take a little longer, so Discord is highly recommended if your matter is time sensitive!


# Default plugin configs & other files

All of ChatSentry's out of the box files can be viewed here

Choose a folder below to view its contents:

{% content-ref url="/pages/-MFJ4qwJ0\_tpnIBWcZqt" %}
[/ChatSentry](/files/files/root-folder)
{% endcontent-ref %}

{% content-ref url="/pages/-MFJ5Ct9hCdpQ278c\_zu" %}
[/ChatSentry/Modules](/files/files/module-configurations)
{% endcontent-ref %}


# /ChatSentry


# config.yml

```yaml


#   ____   _               _     ____                   _
#  / ___| | |__     __ _  | |_  / ___|    ___   _ __   | |_   _ __   _   _
# | |     | '_ \   / _` | | __| \___ \   / _ \ | '_ \  | __| | '__| | | | |
# | |___  | | | | | (_| | | |_   ___) | |  __/ | | | | | |_  | |    | |_| |
#  \____| |_| |_|  \__,_|  \__| |____/   \___| |_| |_|  \__| |_|     \__, |
#                                                                    |___/

# For guides & detailed information, see the wiki: https://wiki.chatsentry.xyz
# For permissions and commands, see https://wiki.chatsentry.xyz/pac/

# Run '/kcs reload' to update changes made to config files



# --------------------------------------------------------------------------------------
#                                  Core Settings
# --------------------------------------------------------------------------------------

# Should ChatSentry notify operators (and players with the permission "chatsentry.admin") when new plugin updates are available?
# Keeping this on is highly recommended as otherwise you won't be able to take advantage of new features and fixes as quickly!
check-for-updates: true

# Where should ChatSentry's modules filter?
process-chat: true
process-commands: true

# Should ChatSentry's applicable modules filter through writing on signs, renaming items in anvils, and writing in books?
# Currently the modules directly supporting these options are the Word & Phrase Filter, Link & Ad Blocker, and the Unicode Remover
process-signs: true
process-anvils: true
process-books: true

# Context prediction aims to increase positive detections and decrease false positive detections through acting as a safenet for supported modules with logic that dynamically adjusts thresholds and settings real-time to react more precisely based on predicted context of messages. Adjustments are temporary and bound to specific messages only.
context-prediction: true

# Should ChatSentry disable Minecraft's built in "Kicked for spamming" / "disconnect.spam" kick?
# It's recommended to keep this enabled to give the auto punisher full punishment priority. If you don't plan to use the auto punisher, you may want to turn this off
disable-vanilla-spam-kick: true

# Experimental: Using BungeeCord or Velocity? ChatSentry offers various cross-server synchronization options below.
# For information on how to set up the plugin to work with BungeeCord or Velocity, see the guide here: https://wiki.chatsentry.xyz/network-bridge-setup-guide
# The below settings are global and non-exclusive to this instance. Any changes made here will be applied to all other ChatSentry configs on your network.
network:
  enable: false
  sync-configs: true
  global-admin-notifier-messages: true


# --------------------------------------------------------------------------------------
#                                     Modules
# --------------------------------------------------------------------------------------

# Below you can enable the modules you'd like to use. Go in to the modules individual config files to adjust their settings


# Admin Notifier
# Notifies admins real-time when a module is triggered with detailed information, allowing them to know when to take action if necessary.
enable-admin-notifier: false


# Discord Notifier
# Sends Discord notifications via webhooks when modules flag a message or action, players are manually or automatically warned, warnings are pardoned, autowarns expire, and when the Auto Punisher punishes a player
enable-discord-notifier: false


# Intelligent Auto Punisher
# Automatically runs punishment commands on players who excessively trigger modules within a defined time frame.
enable-auto-punisher: false


# Intelligent Word & Phrase Filter
# Hyper intelligently detects swears configured blocked words or phrases (and words/phrases similar to those on the list) from being said in chat, commands, signs, anvils, and books (additional check contexts can be disabled).
enable-word-and-phrase-filter: false


# Intelligent Link & Ad Blocker
# Prevents web links & server advertising (regular server ips & numeric server ips) with optional extra sensitivity bypass detection in chat, commands, signs, anvils, and books (additional check contexts can be disabled). Includes the ability to whitelist domains or all subdomains of a domain.
enable-link-and-ad-blocker: false


# Intelligent Spam Blocker
# Accurately blocks spammy messages by examining their word, character, and sequence diversity in comparison to the messages length. Additionally prevents players from repeating the same or similar messages over and over within a short period of time with a dynamically adjusting repeat cooldown
enable-spam-blocker: false


# Intelligent Chat Cooldown
# Controls how quickly players can send messages and configured or all commands within a defined time frame.
enable-chat-cooldown: false


# Intelligent Anti Chat Flood
# Prevents or intelligently modifies the use of excessive repeated characters and very long "words" without interfering with players using 'expressive' chat.
enable-anti-chat-flood: false


# Unicode Remover
# Removes non US-ASCII (US keyboard) characters in chat messages and commands to prevent alphanumeric lookalike unicode characters from being used to bypass filters & modules. Has the option to use a compatibility mode that only blocks unicode used by hacked clients - blocking virtually all alphanumeric lookalike unicode supported by MC while allowing other languages in chat, commands, signs, anvils, and books (additional check contexts can be disabled)
enable-unicode-remover: false


# Intelligent Cap Limiter
# Limits the use of excessive capital letters in messages without interference of messages using proper grammar. Can auto-set the message to lowercase or blocks it entirely. Player names are ignored.
enable-cap-limiter: false


# Intelligent Anti Parrot
# Prevents players using hacked clients to automatically copy ("parrot") other players chat messages. Also prevents the same (non-generic) message from be said by multiple players within a short time frame. Able to detect bots/players appending random sequences of numbers and other characters to their messages to try and evade the filter.
enable-anti-parrot: false


# Intelligent Chat Executor
# Modifies and or performs actions triggered by defined messages/commands using simple or complex matching techniques. Optionally supports execution of sign text and anvil renames.
enable-chat-executor: false


# Anti Statue Spambot
# Prevents joining players abilities to send messages or commands until they move in order to protect against basic artificially controlled spam bots. Has an optional command whitelist.
# Does not require "process-commands" in the main config to be enabled to function.
enable-anti-statue-spambot: false


# Anti Relog Spam
# Prevents players excessively relogging in short periods of time to flood chat. Uses a dynamically increasing cooldown to effectively combat excessive relogging without affecting players who are relogging reasonably.
enable-anti-relog-spam: false


# Anti Join Flood
# Prevents more than a defined amount of players joining every minute to prevent bot join flooding to lag, spam, & or crash the server.
enable-anti-join-flood: false


# Anti Command Prefix
# Prevents players using prefixed commands to get around filters and discover potential sensitive server information like the plugins. Ex. /minecraft:me instead of /me. Optionally integrates with the Command Spy module; when a command is modified/a prefix is removed, it will appear crossed out in the command spy notification.
# Does not require "process-commands" in the main config to be enabled to function.
enable-anti-command-prefix: false


# Auto Grammar
# Converts players' messages to use proper capitalization, periods, and correct typos in chat and configured or all commands.
enable-auto-grammar: false


# Command Spy
# Shows players real-time commands to admins. Commands can optionally be whitelisted or blacklisted.
# Does not require "process-commands" in the main config to be enabled to function.
enable-command-spy: false


# --------------------------------------------------------------------------------------
#                                      Logging
# --------------------------------------------------------------------------------------

# Should messages flagged by modules be logged for future reference?
# This is required to be enabled in order to make use of the lookup command
enable-violations-log: true

# Below is which module triggers will be logged. Disregarded if the above option is not enabled
enable-logging-for:
  chat-cooldown: false
  link-and-ad-blocker: true
  word-and-phrase-filter: true
  spam-blocker: true
  unicode-remover: true
  cap-limiter: true
  anti-parrot: true
  anti-chat-flood: true
  anti-statue-spambot: false
  chat-executor: true

# The plugin will periodically attempt to erase log data older than the below value in days in effort to save database space
# NOTE: a full server restart is required for changes to this option to take effect
# Set to -1 to disable automatic cleaning
clean-logs-older-than: 30


# --------------------------------------------------------------------------------------
#                                 Permission Overrides
# --------------------------------------------------------------------------------------

# You can disable the functionality of particular module/restrictions' bypass permissions and force modules to apply themselves to players even with bypass permissions or op by enabling the overrides below
# It's recommended you do this per-player/group with permissions by simply negating/disabling the bypass permission for modules/restrictions you'd like to apply to them if they have the bypass all permission
# This option is mainly useful for testing purposes if you don't want to have to deop yourself for testing
override-bypass-permissions:
  chat-cooldown: false
  link-and-ad-blocker: false
  word-and-phrase-filter: false
  spam-blocker: false
  unicode-remover: false
  cap-limiter: false
  anti-parrot: false
  anti-chat-flood: false
  anti-statue-spambot: false
  anti-join-flood: false
  chat-executor: false
  auto-grammar: false
  anti-command-prefix: false
  command-spy: false


# --------------------------------------------------------------------------------------
#                                  Server Lockdown
# --------------------------------------------------------------------------------------

# You can use /cslockdown to toggle a persistent through server restart lock on the server which can either block unseen before/unknown players from joining, or everybody except those who are on the below exemption list
# This command was designed to be used under the case of a bot attack to disallow the unseen before player-bots entering the server, but it can be used for other purposes as well
# Kick messages can be found in lang.yml

lockdown:
  active: false
  # Valid modes: 'only-known', 'only-exempt'
  current-mode: "only-known"
  exempt-usernames:
    - "Notch"
    - "jeb_"


# --------------------------------------------------------------------------------------
#                                  Chat toggle
# --------------------------------------------------------------------------------------

# Inaccessible commands when /togglechat is enabled
command-blacklist:
  - "/tell"
  - "/t"
  - "/msg"
  - "/w"
  - "/r"
  - "/whisper"
  - "/w"
  - "/pm"
  - "/me"
```


# lang.yml

```yaml
# --------------------------------------------------------------------------------------
# Core in-game messages sent by ChatSentry can be modified here.

# All lang entries support colorcodes (&[colorcode]) and hex values with "&#hexvalue" if you're running MC 1.16 or above. Easily find hex values with Google's color picker tool: https://www.google.com/search?q=color+picker

# You can set ANY lang strings to "" to disable them. 
# You can use '{PREFIX}' to insert the 'message-prefix' value any lang strings.
# To insert line breaks, you can use '{NL}'.
# --------------------------------------------------------------------------------------

lang:

  modules:

    admin-notifier:
      # For player names in block notify messages you can use:
      # {PLAYER} - player username
      # {PLAYER_DISPLAYNAME} - player display name with its original colors
      # {PLAYER_DISPLAYNAME_STRIPPED} - player display name stripped of its original colors

      # Below is the message sent to ops or players with the notify permission when ChatSentry blocks a message.
      notify-msg: "&7(&b{VIOLATION_TYPE}&8 - &b{CONTEXT}&7) &c{PLAYER} &7typed: &8'&c&o{BLOCKED_CONTENT}&8' &7(Full message: &8'&c&o{ENTIRE_MESSAGE}&8'&7)"

      # Under some circumstances some modules cannot display the exact content that was blocked. The message below will be used if the exact content cannot be displayed.
      no-content-notify-msg: "&7(&b{VIOLATION_TYPE}&8 - &b{CONTEXT}&7) &c{PLAYER} &7typed: &8'&c&o{ENTIRE_MESSAGE}&8'"

      # Under some circumstances some modules use custom formatted messages that doesn't apply to the usual format. The message below will be the format for the custom notifications.
      custom-notify-msg: "&7(&b{VIOLATION_TYPE}&8 - &b{CONTEXT}&7) &7{NOTIFICATION}"

      # The 3 below nodes are used instead of the above ones if network.enable is true in config.yml
      network:
        notify-msg: "&d{SERVER_NAME}: &7(&b{VIOLATION_TYPE}&8 - &b{CONTEXT}&7) &c{PLAYER} &7typed: &8'&c&o{BLOCKED_CONTENT}&8' &7(Full message: &8'&c&o{ENTIRE_MESSAGE}&8'&7)"
        no-content-notify-msg: "&d{SERVER_NAME}: &7(&b{VIOLATION_TYPE}&8 - &b{CONTEXT}&7) &c{PLAYER} &7typed: &8'&c&o{ENTIRE_MESSAGE}&8'"
        custom-notify-msg: "&d{SERVER_NAME}: &7(&b{VIOLATION_TYPE}&8 - &b{CONTEXT}&7) &7{NOTIFICATION}"

      join-reminder: "{PREFIX} &bReminder: You currently have ChatSentry's violation notifications off. To turn them back on, type &d/kcs tvn"

    anti-chat-flood:
      trigger-repeated: "{PREFIX} &cAs to be mindful of others, please use less repeated letters/symbols in your messages to avoid chat flooding"
      trigger-too-long: "{PREFIX} &cYour message was blocked because it floods chat; please refrain from sending large messages as to be mindful of others"

    anti-command-prefix:
      trigger: "{PREFIX} &7You are not permitted to use prefixed commands from that module. Your command was run without the prefix."

    # Use actual new lines (- "text") instead of {NL}
    anti-join-flood:
      kick:
        - "&fToo many players are trying to login right now."
        - "&fPlease try again in a few minutes!"

    # Use actual new lines (- "text") instead of {NL}
    anti-relog-spam:
      on-cooldown-kick:
        - "&cYou're relogging too fast!"
        - "&r"
        - "&7Please wait &e{SECONDS} seconds &7before connecting again."
      notification: "&7(&bAnti Relog Spam&7) &c{PLAYER} &7was disallowed logging in; relogged too fast (on &c{SECONDS}s &7cooldown)"

    anti-parrot:
      trigger: "{PREFIX} &cIn effort to reduce chat flooding, please don't copy others' messages"

    anti-statue-spambot:
      trigger: "{PREFIX} &cPlease move before using chat; this is to prevent spam bots!"

    cap-limiter:
      trigger: "{PREFIX} &cPlease be mindful of others in chat by using less CAPS in your messages!"

    chat-cooldown:
      trigger: "{PREFIX} &cToo speedy! Please wait a bit before chatting again"

    command-spy:
      # For player names in commandspy format you can use:
      # {PLAYER} - player username
      # {PLAYER_DISPLAYNAME} - player display name with its original colors
      # {PLAYER_DISPLAYNAME_STRIPPED} - player display name stripped of its original colors
      format: "&7{PLAYER}&8: &7&o{COMMAND}"

    link-and-ad-blocker:
      trigger: "{PREFIX} &cMessage blocked: '&4{BLOCKED_CONTENT}&c' is potentially a link or ip that is not allowed in chat"

    spam-blocker:
      trigger: "{PREFIX} &cIn effort to reduce chat flooding, please refrain from repeating the same (or similar) message again so quickly"
      singular-message-spam-trigger: "{PREFIX} &cYour message was blocked because it was identified to contain spam-like content"

    unicode-remover:
      trigger: "{PREFIX} &cASCII lookalike unicode is strictly prohibited in chat"

    word-and-phrase-filter:
      trigger: "{PREFIX} &cYour message contained '&4{BLOCKED_CONTENT}&c' and was blocked. This kind of language/topics are unsuitable for this server; please read the &4/rules &cto ensure you follow them!"

  misc:

    message-prefix: "&6[&e&lChatSentry&6]"
    no-permission: "{PREFIX} &cYou are not permitted to do that."

    # Block message header & footer: sent before/after any block messages from modules.
    block-message-header: "&8&m----------------------------------------------------"
    block-message-footer: "&8&m----------------------------------------------------"

  violation-types:

    on-cooldown: "Cooldown"
    link-or-ad-block: "Link/AD"
    message-filter-block: "Filter"
    spam-block: "Spam"
    unicode-character-block: "Unicode"
    cap-limiter-block: "Caps"
    anti-parrot-block: "Parroting"
    anti-chat-flood-block: "Chat Flood"
    anti-statue-spambot-block: "Statue Spambot"
    anti-join-flood-block: "Join Flood"
    chat-executor-match: "Chat Executor"

  contexts:

    chat: "Chat"
    command: "Command"
    anvil: "Anvil"
    book: "Book"
    sign: "Sign"
    join: "Join"
    other: "Other"

  commands:

    lockdown:
      toggled-on: "{PREFIX} &bServer lockdown is now only allowing &a{MODE} &bplayers to connect. Run /cslockdown to disable it."
      toggled-off: "{PREFIX} &bServer lockdown &cdisabled&b: allowing &aall non-banned &bplayers to connect"
      already-off: "{PREFIX} &bLockdown is already off. To turn it on, specify a mode after /cslockdown"
      exempt-list: "{PREFIX} &bThe following usernames are explicitly exempt: &a{LIST}"
      no-exempt: "{PREFIX} &bThere are no defined exempt players. To add one, use /cslockdown add <username>"
      exemption-added: "{PREFIX} &bUsername &7'&a{USERNAME}&7' &bhas been added to the exemption list"
      exemption-removed: "{PREFIX} &bUsername &7'&a{USERNAME}&7' &bhas been removed from the exemption list"
      unknown-remove: "{PREFIX} &7'&a{USERNAME}&7' &bis already not exempt"
      already-exempt: "{PREFIX} &7'&a{USERNAME}&7' &bis already exempt"

    commandspy:
      toggled-on: "{PREFIX} &bYour command spy notifications have been turned &a&lon&b."
      toggled-off: "{PREFIX} &bYour command spy notifications have been turned &c&loff&b."

    tvn:
      toggled-on: "{PREFIX} &bYour violation notifications have been turned &a&lon&b."
      toggled-off: "{PREFIX} &bYour violation notifications have been turned &c&loff&b."

    clearchat:
      chat-cleared: "{PREFIX} &bChat has been cleared by {PLAYER_DISPLAYNAME}&b."
      bypass-notif: "&7&oYour chat wasn't cleared because you are exempt."

    togglechat:
      chat-toggled-on: "{PREFIX} &bChat has been &aenabled&b by {PLAYER_DISPLAYNAME}&b."
      chat-toggled-off: "{PREFIX} &bChat has been &cdisabled&b by {PLAYER_DISPLAYNAME}&b."
      chat-is-toggled: "&cFailed to send message: chat is currently disabled."

    warnings:
      # For player names in the below messages you can use:
      # {PLAYER} - player username
      # {PLAYER_DISPLAYNAME} - player display name with its original colors
      # {PLAYER_DISPLAYNAME_STRIPPED} - player display name stripped of its original colors
      # {CURRENT_WARNS} - current general warning count
      # {MAX_WARNS} - maximum general warning count
      been-warned: "{PREFIX} &cYou've received a warning from &4{PLAYER}&c. &7(&c&l{CURRENT_WARNS}&8/&4&l{MAX_WARNS}&7)"
      warnings-were-pardoned: "{PREFIX} &bYour admin-given warnings have been cleared by &3{PLAYER}&b."
      warning-was-pardoned: "{PREFIX} &bOne of your admin-given warnings has been pardoned by &3{PLAYER}&b. &7(&c&l{CURRENT_WARNS}&8/&4&l{MAX_WARNS}&7)"

      # For player names in the below messages you can use:
      # {WARNER} - warner player username
      # {WARNER_DISPLAYNAME} - warner player display name with its original colors
      # {WARNER_DISPLAYNAME_STRIPPED} - warner player display name stripped of its original colors
      # {WARNED} - warned player username
      # {WARNED_DISPLAYNAME} - warned player display name with its original colors
      # {WARNED_DISPLAYNAME_STRIPPED} - warned player display name stripped of its original colors
      # {CURRENT_WARNS} - current general warning count
      # {MAX_WARNS} - maximum general warning count
      warned-broadcast-message: "{PREFIX} &4{WARNED_DISPLAYNAME} &cwas warned by &4{WARNER_DISPLAYNAME}&c. &7(&c&l{CURRENT_WARNS}&8/&4&l{MAX_WARNS}&7)"

      # For player names in the below messages you can use:
      # {PLAYER} - player username
      # {CURRENT_WARNS} - current general warning count
      # {MAX_WARNS} - maximum general warning count
      warned-player: "{PREFIX} &3{PLAYER} &bhas successfully been warned. &7(&c&l{CURRENT_WARNS}&8/&4&l{MAX_WARNS}&7)"
      all-warnings-pardoned: "{PREFIX} &bSuccessfully cleared &3{PLAYER}&b's admin-given warnings."
      pardoned-warning: "{PREFIX} &bSuccessfully pardoned one of &3{PLAYER}&b's admin-given warnings. &7(&c&l{CURRENT_WARNS}&8/&4&l{MAX_WARNS}&7)"

      # For player names in the below messages you can use:
      # {PLAYER} - player username
      # {MODULE_NAME} - name of the module
      cleared-module-warnings: "{PREFIX} &bSuccessfully cleared &3{PLAYER}&b's {MODULE_NAME} warnings."
      cleared-all-warnings: "{PREFIX} &bSuccessfully cleared all &3{PLAYER}&b's warnings."
      module-warnings-were-cleared: "{PREFIX} &bYour {MODULE_NAME} warnings have been cleared by &3{PLAYER}&b."

      # For player names in the below message you can use:
      # {PLAYER} - player username
      all-warnings-were-cleared: "{PREFIX} &bAll your warnings have been pardoned by &3{PLAYER}&b."

      # Command messages

      warn:
        usage: "{PREFIX} &cUsage: /cswarn <player>"
        manual-warns-disabled: "{PREFIX} &cManual warnings are disabled."
        invalid-player: "{PREFIX} &cInvalid player: '{INPUT}'. Note that the player must be online to warn them."
        player-exempt: "{PREFIX} &c{INPUT} is exempt to warnings."
        reached-max: "{PREFIX} &c{INPUT} has reached the maximum configured manual warnings and cannot be warned again."

      warnings:
        usage: "{PREFIX} &cUsage: /cswarnings {ARG} <player>"
        cmw-usage: "{PREFIX} &cUsage: /cswarnings {ARG} <player> <'all' or module-name>"
        detailed-usage: "&cInvalid command usage! Usage:"
        pardon-note: "&7Note: Pardons only apply to warnings received via /cswarn"
        couldnt-fetch: "{PREFIX} &cFailed to fetch UUID for '{INPUT}'. Either the account does not exist or you are being rate limited (requested too many UUIDs from Mojang too quickly)"
        no-data: "{PREFIX} &aFound no active warnings."
        no-modules: "{PREFIX} &cNo modules have warnings enabled in the auto punisher configuration."
        no-warnings-found: "{PREFIX} No current warnings found for &3{INPUT}"
        no-warnings-found-for-module: "{PREFIX} No {MODULE} warnings found for &3{INPUT}"
        invalid-module: "{PREFIX} &cInvalid module name: '{INPUT}'. Remember to separate the name by dashes (-)."

  lockdown:

    # Kick message shown when only known players are allowed to join
    only-known-allowed-message:
      - "&6&lWe'll be back soon!"
      - ""
      - "&eThe server is currently only open to players who have played before"
      - ""
      - "&fPlease check back later, thank you for your patience!"

    # Kick message shown when only exempt players are allowed to join
    only-exempt-allowed-message:
      - "&6&lWe'll be back soon!"
      - ""
      - "&eThe server is temporarily closed, please check back later"
      - ""
      - "&fThank you for your patience!"
```


# storage.yml

```yaml
# This is how ChatSentry will store player preferences, module triggers/violations, and warnings

# Options: "SQLITE" "MYSQL"
# SQLite: data will be stored in db files locally in the ChatSentry directory
# MySQL: data will be stored remotely in the supplied database. If you are a network this method is recommended to allow data synchronization cross-server
type: "SQLITE"

# MySQL credentials
mysql:
  host: "localhost"
  port: 3306
  user: "root"
  password: ""
  database: "chatsentry"
```


# changelog.txt

This file contains the latest changes made to the plugin. For the sake of simplicity, it's not updated on this page. To view the most recent changelog, you can view them on the designated changelog wiki pages below:

{% content-ref url="/pages/-MTN3d7kBE6\_EsSJa2ki" %}
[v4 Changelog](/development/legacy-changelogs/v4-changelog)
{% endcontent-ref %}

{% content-ref url="/pages/-MQTqivwsY\_5Jvaz7ErF" %}
[v3 Changelog](/development/legacy-changelogs/v3-changelog)
{% endcontent-ref %}

{% content-ref url="/pages/-MQTqdy4v6JLraXmuH1d" %}
[v2 Changelog](/development/legacy-changelogs/v2-changelog)
{% endcontent-ref %}

{% content-ref url="/pages/-M7fzqO6GiCc7-FbBJe8" %}
[v1 Changelog](/development/legacy-changelogs/changelog)
{% endcontent-ref %}


# /ChatSentry/Modules


# admin-notifier.yml

```yaml
# --------------------------------------------------------------------------------------
# Admin Notifier:
# Notifies admins real-time when a module is triggered with detailed information, allowing them to know when to take action if necessary.
# To receive notifications, op or the permission: "chatsentry.getnotified" is required.
# --------------------------------------------------------------------------------------

# Below are the modules that support real time notifications. Which of them should notifications be enabled for?
# Please note that changing below values for modules which are not enabled in config.yml will have no effect.

enable-notifications-for:
  chat-cooldown: true
  link-and-ad-blocker: true
  word-and-phrase-filter: true
  spam-blocker: true
  unicode-remover: true
  cap-limiter: true
  anti-parrot: true
  anti-chat-flood: true
  anti-statue-spambot: true
  anti-join-flood: true
  chat-executor: true

# Determines whether violation notifications should be sent to console in addition to players with notification permission.
send-to-console: true

# Should ChatSentry remind joining players (with violation notification permission) that they have violation notifications toggled off?
remind-notifs-toggled-off-on-join: true
```


# anti-chat-flood.yml

```yaml
# --------------------------------------------------------------------------------------
# Intelligent Anti Chat Flood:
# Prevents or intelligently modifies the use of excessive repeated characters and very long "words" without interfering with players using 'expressive' chat.
# Bypass permission: "chatsentry.antichatflood.bypass"
# --------------------------------------------------------------------------------------

# The maximum times the same character can be repeated consecutively.
# Applies to all characters not on the custom limit list below this option.
repeated-character-limit: 12

# Since some characters take up less space (like "!") you can optionally allow them to be repeated additional times to reduce interferences with people being extra expressive in chat who aren't attempting to flood it
# Format: <CHARACTER>;;<REPEAT LIMIT>
# Set to "custom-limits: []" to have no custom limits
# Please note that this list is case sensitive
custom-limits:
  - "!;;30"
  - ".;;35"

# Maximum character length of words (ignores custom limit chars)
max-word-length: 32

# Should web links longer than the maximum "word" length limit be ignored?
ignore-long-links: true

# When set to true, the detected message will be intelligently modified instead of blocked entirely
# The amount of repeated chars to cut off is determined by a division of the initial limit
# Example: "Heyyyyyyyyyyyyyyy" -> becomes -> "Heyyyyy"
modify-message: true

# Only applies if modify-message is true. When a message is modified, should the blocked message below be sent as well?
send-block-message-when-modified: true

# IMPORTANT: The below list will only work if "process-commands" is true in config.yml
# The below list is which commands the module will apply to. It's recommended to only set these to your private messaging commands.
# Set the list to "affected-commands: []" to apply the module to ALL commands (highly not recommended!)
# Make sure to only include base commands; don't add any command arguments. (spaces)
affected-commands:
  - "/tell"
  - "/t"
  - "/msg"
  - "/w"
  - "/r"
  - "/whisper"
  - "/w"
  - "/pm"
```


# anti-command-prefix.yml

```yaml
# --------------------------------------------------------------------------------------
# Anti Command Prefix:
# Prevents players using prefixed commands to get around filters and discover potential sensitive server information like the plugins. Ex. /minecraft:me instead of /me. Does not require "process-commands" in the main config to be enabled to function. Optionally integrates with the Command Spy module; when a command is modified/a prefix is removed, it will appear crossed out in the command spy notification.
# Bypass permission: "chatsentry.anticommandprefix.bypass"
# --------------------------------------------------------------------------------------

# This module works by modifying command contents after they're sent by players. Ex. "/essentials:msg" will run without the prefix ("/msg")

# Commands below will be allowed to be ran with their prefix.
# Set to "allowed-prefixed-commands: []" to have an empty list.
allowed-prefixed-commands:
  - "/plugin:command"
  - "/plugin2:command"

# Prefixes below will be allowed to be ran no matter the command.
# Set to "allowed-global-prefixes: []" to have an empty list.
allowed-global-prefixes:
  - "plugin:"
  - "plugin2:"

# Should the module send the message (changeable via lang.yml) notifying the player their command was modified when it removes a disallowed prefix?
send-msg-when-modified: true
```


# anti-join-flood.yml

```yaml
# --------------------------------------------------------------------------------------
# Anti Join Flood:
# Prevents more than a defined amount of players joining every minute to prevent bot join flooding to lag, spam, & or crash the server.
# --------------------------------------------------------------------------------------

# Make sure you change the value below to what will work best for your server to prevent ChatSentry from blocking players from joining when it shouldn't.

# Below is the limit of joins (including relogs) that will be allowed by the server within 60 seconds

# Recommended settings:
# Small servers: ~12
# Medium servers: ~35
# Big servers: ~100+

allowed-joins-per-minute: 12

# This option disables join flood checking for 2 minutes and 30 seconds after starting to prevent blocking people joining back after the server restarts.
# Only set this to false if the server is actively being flooded to prevent issues.
disable-join-flood-check-on-startup: true
```


# anti-parrot.yml

```yaml
# --------------------------------------------------------------------------------------
# Intelligent Anti Parrot:
# Prevents players using hacked clients to automatically copy ("parrot") other players chat messages. Also prevents the same (non-generic) message from be said by multiple players within a short time frame.
# Bypass permission: "chatsentry.antiparrot.bypass"
# --------------------------------------------------------------------------------------

# Should the module utilize extra intelligence algorithms? Keeping this on is highly recommended. Typically having this on extends compatibility to detect players using premium / smarter hacked clients.
intelligent: true

# Some players (or more likely bots) may append random sequences of numbers and other characters to their messages to try and evade filters like this one. This option will try to simplify incoming message data before core processing in attempt to combat this behavior.
flood-combater: true

# If true, short messages such as "lol" or "xD" will be ignored and not detected as parroting if multiple players repeat them in a short time frame.
# Note that this only applies to VERY short messages like the examples mentioned above.
ignore-short: true

# Should players usernames in any phrase-whitelist phrases be ignored?
ignore-usernames: true

# If using ignore-short, the below list is in almost all cases not necessary.

# The phrases below are phrases that the module will ignore, and can be said by multiple players within a short time frame.
# Character case in the below list does NOT matter. Case variants are automatically checked by the plugin.
# Set to "phrase-whitelist: []" to have an empty list.
phrase-whitelist:
  - "wb"
  - "welcome back"
  - "wbbb"
  - "weba"
  - "yes"
  - "yea"
  - "ok"
  - "sure"
  - "no"
  - "nope"
  - "nah"
  - "yup"
  - "yep"
  - "yeh"

# How similar must a message be to a phrase on the list above to be considered the same and also whitelisted? (in %)
# 1.0 = exactly as one of the phrases on the list (excluding character case)
# 0.0 = not exact at all (this eliminates the purpose of the whitelist)
phrase-whitelist-similarity-threshold: 0.85
```


# anti-statue-spambot.yml

```yaml
# --------------------------------------------------------------------------------------
# Anti Statue Spambot:
# Prevents joining players abilities to send messages or commands until they move in order to protect against basic artificially controlled spam bots. Has an optional command whitelist. Does not require "process-commands" in the main config to be enabled to function.
# Bypass permission: "chatsentry.antistatuespambot.bypass"
# --------------------------------------------------------------------------------------

# If you have plugins that make players run commands when they join, add those commands below so they aren't blocked by ChatSentry.
# Make sure to only include base commands; don't add any command arguments (spaces).
# Set to "join-command-whitelist: []" to have an empty list.
join-command-whitelist:
  - "/motd"
```


# auto-grammar.yml

```yaml
# --------------------------------------------------------------------------------------
# Auto Grammar:
# Converts players' messages to use proper capitalization, periods, and correct typos in chat and configured or all commands.
# Bypass permission: "chatsentry.autogrammar.bypass"
# --------------------------------------------------------------------------------------

# Should the first word of every sentence of players' messages be capitalized?
# Ignores capitalizing short messages such as "xD"
capitalize: true

# Should a period be added at the end of players' sentences?
# Ignores appending periods to short messages such as "xD"
add-periods: true

# Should typos on the below list be fixed with their replacements?
fix-typos: true

# These words will be corrected to the word after the " -> "
# Case doesn't matter in the words on the left side
# If one of the words on the left side is typed in all caps by the player, the right side translation will be converted to uppercase as well
corrections:
  - "i -> I"
  - "alot -> a lot"
  - "cant -> can't"
  - "wont -> won't"
  - "wouldnt -> wouldn't"
  - "shouldnt -> shouldn't"
  - "couldnt -> couldn't"
  - "youre -> you're"
  - "ill -> I'll"
  - "ive -> I've"
  - "im -> I'm"
  - "id -> I'd"
  - "its -> it's"
  - "doesnt -> doesn't"
  - "dont -> don't"
  - "shes -> she's"
  - "hes -> he's"
  - "theres -> there's"
  - "theyre -> they're"

# IMPORTANT: The below list will only work if "process-commands" is true in config.yml
# The below list is which commands the module will apply to. It's recommended to only set these to your private messaging commands.
# Set the list to "affected-commands: []" to apply the module to ALL commands (highly not recommended!)
# Make sure to only include base commands; don't add any command arguments. (spaces)
affected-commands:
  - "/tell"
  - "/t"
  - "/msg"
  - "/w"
  - "/r"
  - "/whisper"
  - "/w"
  - "/pm"
```


# auto-punisher.yml

```yaml
# --------------------------------------------------------------------------------------
# Intelligent Auto Punisher:
# Automatically runs punishment commands on players who excessively trigger modules within a defined time frame.
# Ops or players with "chatsentry.autopunisher.exempt" will be exempt to ONLY automatic warnings.
# --------------------------------------------------------------------------------------

# Under punishment nodes you can:
# Use the format "{player_msg}: message" to send a message to the player.
# Use the format "{console_cmd}: command" to run a command as the console.
# Use the format "{player_cmd}: command" to run a command as the player.
# Use the format "{broadcast}: message" to broadcast a message to all players.

# With network mode enabled in config.yml, you can:
# Use the format "{proxy_console_cmd}: command" to run a command as the from the prox
# Use the format "{proxy_player_cmd}: command" to run a command as the player from the proxy

# Within the above formats, you can use:
# "{PLAYER}" - players username for commands.
# "{PLAYER_DISPLAYNAME}" - players display name with its original colors
# "{PLAYER_DISPLAYNAME_STRIPPED}" - players display name stripped of its original colors
# "{CURRENT_WARNS}" - players current warning count for the target module.
# "{MAX_WARNS}" - maximum warning count for the target module.

# enabled: true/false nodes determine whether a warning will be added to the player who triggered the module.

# Note: You need a plugin to handle the punishment commands for muting, banning, etc. Essentials, AdvancedBan, or LiteBans recommended for punishment commands.

# In hours, how often should one warning (on every module) expire from players?
# Set this to -1 to never have warnings expire automatically. This will disable the option below this option as well.
warning-lifetime: 12

# In hours, how often (after startup) should the warnings file be scanned for expired warnings? Keep this at 1 unless you experience tick lag from ChatSentry.
# Note that the file is also checked on every server startup.
check-expiry-interval: 12

# Should the Auto Punisher send a message to the console when it warns a player, auto expires a players warning, or runs punishment actions on a player?
verbose-from-console: true

# When enabled, pardon messages will be hidden from receiver players only if triggered by the console. The point of this is so players don't see when their warnings are reset when triggered by the last punishment set under a module.
suppress-pardons-from-console: true

# Should a broadcast be sent to everybody when a player is manually warned via /warn? (broadcast is configurable via the misc-lang.yml file)
broadcast-manual-warnings: true

# Currently the only modules that support warnings are:
# Chat Cooldown, Link & Ad Blocker, Word & Phrase Filter, Chat Executor, Unicode remover, Cap limiter, Anti Parrot, Anti chat flood, and Anti Statue Spambot

# Manual = warnings that are applied manually via /cswarn <player>

# Players module warnings can be manually cleared with "/cswarnings clearmodulewarnings <player> <module name>"
# Players admin-given (manual) warnings can be cleared with "/cswarnings pardonallmanual <player>"



# IMPORTANT: The applicable above pardon command should be ran at the end (highest) warning count to reset the players warning count immediately to prevent them getting warning counts higher than the max punishment, allowing them to get infinite warnings without punishment.



warning-config:
  manual:
    enabled: true
    punishments:
      1:
        - "{player_msg}: &r"
        - "{player_msg}: &r"
        - "{player_msg}: &cIf you're warned again in the coming hours you'll receive sanctions. Please review the &4/rules &cto ensure you are following them."
        - "{player_msg}: &r"
        - "{player_msg}: &r"
      2:
        - "{console_cmd}: mute {PLAYER} 3h Rule misconduct; warned twice"
        - "{player_msg}: &r"
        - "{player_msg}: &r"
        - "{player_msg}: &cIf you're warned again in the coming hours you'll be banned. Please review the &4/rules &cto ensure you are following them."
        - "{player_msg}: &r"
        - "{player_msg}: &r"
      3:
        - "{console_cmd}: tempban {PLAYER} 2d Rule misconduct; warned three times"
        - "{console_cmd}: cswarnings pardonallmanual {PLAYER}"

  link-and-ad-blocker:
    enabled: true
    punishments:
      3:
        - "{player_msg}: &r"
        - "{player_msg}: &cIf you keep attempting to put disallowed links/ips in chat sanctions will be applied. You've been warned!"
        - "{player_msg}: &r"
      4:
        - "{console_cmd}: mute {PLAYER} 6h [AUTOMUTE] Excessive attempted disallowed links/ips in chat."
      5:
        - "{console_cmd}: tempban {PLAYER} 5d [AUTOBAN] Excessive attempted disallowed links/ips in chat"
        - "{console_cmd}: cswarnings clearmodulewarnings {PLAYER} link-and-ad-blocker"

  word-and-phrase-filter:
    enabled: true
    punishments:
      4:
        - "{player_msg}: &r"
        - "{player_msg}: &cIf you keep attempting to write disallowed content in chat sanctions will be applied. You've been warned!"
        - "{player_msg}: &r"
      5:
        - "{console_cmd}: mute {PLAYER} 1h [AUTOMUTE] Excessive attempted explicit language"
      6:
        - "{console_cmd}: mute {PLAYER} 6h [AUTOMUTE] Excessive attempted explicit language"
      7:
        - "{console_cmd}: mute {PLAYER} 12h [AUTOMUTE] Excessive attempted explicit language"
      8:
        - "{console_cmd}: tempban {PLAYER} 5d [AUTOBAN] Excessive attempted explicit language"
        - "{console_cmd}: cswarnings clearmodulewarnings {PLAYER} word-and-phrase-filter"

  spam-blocker:
    enabled: true
    punishments:
      5:
        - "{player_msg}: &r"
        - "{player_msg}: &cIf you keep sending the similar messages so fast sanctions will be applied. You've been warned!"
        - "{player_msg}: &r"
      7:
        - "{console_cmd}: mute {PLAYER} 6h [AUTOMUTE] Excessive attempted spam"
        - "{console_cmd}: cswarnings clearmodulewarnings {PLAYER} spam-blocker"

  unicode-remover:
    enabled: true
    punishments:
      4:
        - "{player_msg}: &r"
        - "{player_msg}: &cIf you keep attempting to send messages with disallowed characters in them sanctions will be applied. You've been warned!"
        - "{player_msg}: &r"
      6:
        - "{console_cmd}: mute {PLAYER} 12h [AUTOMUTE] Excessive attempted bad chat unicode"
        - "{console_cmd}: cswarnings clearmodulewarnings {PLAYER} unicode-remover"

  cap-limiter:
    enabled: false
    punishments:
      3:
        - "{player_msg}: &r"
        - "{player_msg}: &cIf you keep attempting to send messages with excessive caps sanctions will be applied. You've been warned!"
        - "{player_msg}: &r"
      6:
        - "{console_cmd}: mute {PLAYER} 1h [AUTOMUTE] Excessive attempted cap spam"
      9:
        - "{console_cmd}: tempban {PLAYER} 12h [AUTOBAN] Excessive attempted cap spam"
        - "{console_cmd}: cswarnings clearmodulewarnings {PLAYER} cap-limiter"

  anti-parrot:
    enabled: true
    punishments:
      4:
        - "{player_msg}: &r"
        - "{player_msg}: &cIf you keep attempting to copy other players sanctions will be applied. You've been warned!"
        - "{player_msg}: &r"
      6:
        - "{console_cmd}: ban {PLAYER} [AUTOBAN] Detected as parroting spambot"
        - "{console_cmd}: cswarnings clearmodulewarnings {PLAYER} anti-parrot"

  anti-chat-flood:
    enabled: false
    punishments:
      5:
        - "{player_msg}: &r"
        - "{player_msg}: &cIf you keep attempting to flood chat sanctions will be applied. You've been warned!"
        - "{player_msg}: &r"
      6:
        - "{console_cmd}: mute {PLAYER} 1h [AUTOMUTE] Excessive attempted chat flood"
        - "{console_cmd}: cswarnings clearmodulewarnings {PLAYER} anti-chat-flood"

  anti-statue-spambot:
    enabled: true
    punishments:
      6:
        - "{console_cmd}: tempban {PLAYER} 7d [AUTOBAN] Detected as statue spambot"

  chat-executor:
    enabled: false
    punishments: []

  chat-cooldown:
    enabled: false
    punishments: []
```


# cap-limiter.yml

```yaml
# --------------------------------------------------------------------------------------
# Intelligent Cap Limiter:
# Limits the use of excessive capital letters in messages without interference of messages using proper grammar. Can auto-set the message to lowercase or blocks it entirely. Player names are ignored.
# Bypass permission: "chatsentry.caplimiter.bypass"
# --------------------------------------------------------------------------------------

# Below is the number of capital letters players will be allowed write in a row
# Player names will be ignored
repeated-cap-limit: 8

# Below is the maximum amount of capital letters messages can contain before being blocked by the filter. To avoid problems, be mindful of players writing with proper capitalization in longer messages by not setting this value lower than about 15.
master-cap-limit: 18

# When set to true, the messages caps will be replaced with lowercase letters and sent. When set to false the detected message will be blocked entirely.
modify-message: true

# Only applies if modify-message is true. When a message is modified, should the blocked message below be sent as well?
send-block-message-when-modified: true

# IMPORTANT: The below list will only work if "process-commands" is true in config.yml
# The below list is which commands the module will apply to. It's recommended to only set these to your private messaging commands.
# Set the list to "affected-commands: []" to apply the module to ALL commands (highly not recommended!)
# Make sure to only include base commands; don't add any command arguments. (spaces)
affected-commands:
  - "/tell"
  - "/t"
  - "/msg"
  - "/w"
  - "/r"
  - "/whisper"
  - "/w"
  - "/pm"
```


# chat-cooldown.yml

```yaml
# --------------------------------------------------------------------------------------
# Intelligent Chat Cooldown:
# Controls how quickly players can send messages and configured or all commands within a defined time frame.
# Bypass permission: "chatsentry.chatcooldown.bypass"
# --------------------------------------------------------------------------------------

# Below is the duration of time the options below this option will apply to
# 20 ticks = 1 second
chat-cooldown-in-ticks: 160

# How many messages can players send every chat-cooldown-in-ticks amount of time?
allowed-message-sends-per-cooldown: 4

# How many commands on the below affected-commands list can players send every chat-cooldown-in-ticks amount of time?
allowed-affected-command-runs-per-cooldown: 6

# IMPORTANT: The below list will only work if "process-commands" is true in config.yml
# The below list is which commands the module will apply to. It's recommended to only set these to your private messaging commands.
# Set the list to "affected-commands: []" to apply the module to ALL commands (highly not recommended!)
# Make sure to only include base commands; don't add any command arguments. (spaces)
affected-commands:
  - "/tell"
  - "/t"
  - "/msg"
  - "/w"
  - "/r"
  - "/whisper"
  - "/w"
  - "/pm"
```


# chat-executor.yml

```yaml
# --------------------------------------------------------------------------------------
# Intelligent Chat Executor:
# Modifies and or performs actions triggered by defined messages/commands using simple or complex matching techniques. Optionally supports execution of sign text and anvil renames.
# Bypass permission: "chatsentry.chatexecutor.bypass"
# --------------------------------------------------------------------------------------

# If "process-commands" is true in config.yml, this module will filter through all commands (of players without bypass permission or op)
# You can execute on anvils and signs by using the provided match node prefixes

# Entry guide:
# For more info on the Chat Executor, see here: https://wiki.chatsentry.xyz/in-depth-chat-executor-guide-and-entry-examples

# You can prefix 'match:' nodes with:
# "{only_commands}" to only run the match on commands
# "{only_chat}" to only run the match on chat
# "{only_anvils}" to run the entry on anvil renames (if the anvil listener is enabled in config.yml)
# "{only_signs}" to run the entry on sign text (if the sign listener is enabled in config.yml)
#  If you use neither only_chat or only_commands it will match both chat and commands. When using only_anvils or only_signs the entry will solely execute on anvils or signs
# You can also add the below:
# "{text}" to specify that the match is just plain text and is not regex
# "{regex}" to specify that the match is using regex
# If you use neither, plain text will be defaulted to

# On regex matches, make sure you escape any regex symbols you want there as regular text by adding a "\" to the start of any of these: <([{^\-=$!|]})?*+.>

# Under 'set-as:' nodes you can:
# Use "{dont_modify}" to not modify the message at all.
# Use "{block}" to block the message entirely.
# Use "{dont_notify}" to not send any admin notifier message when matched (if admin notifications are enabled for the Chat Executor)
# Use "{dont_log}" to not log anything the when the entry is triggered (if logging is enabled for the Chat Executor)
# These are stackable, ex. "{block}{dont_modify}{dont_log}" however, {dont_modify} and {block} must not be in the same set-as node as they conflict.

# Under 'execute:' action lists you can:
# Use the format "{player_msg}: message" to send a message to the player.
# Use the format "{console_cmd}: command" to run a command as the console.
# Use the format "{player_cmd}: command" to run a command as the player.
# Use the format "{broadcast}: message" to broadcast a message to all players.

# With network mode enabled in config.yml, you can:
# Use the format "{proxy_console_cmd}: command" to run a command as the proxy console.
# Use the format "{proxy_player_cmd}: command" to run a command as the player from the proxy.

# To use parts of the players message in execute actions, you can use:
# "{arg<number>}" to get the word/argument of the players message (starting from 0): ex "{arg1}" in "FirstWord SecondWord ThirdWord" is "FirstWord", "{arg2}" is "SecondWord", etc.
# "{multiargs<number>}" to get all the arguments/words after a particular argument/word. Ex "{multiargs2}" of "FirstWord SecondWord ThirdWord FourthWord" is "ThirdWord FourthWord"
# You can use multiple {arg<number>} and {multiarg<number>} placeholders in actions. If the requested argument/word is not present, it will simply be blank.

# Set to "execute: []" to execute no actions.

# To get the players username or displayname in actions, you can use:
# "{PLAYER}" to get the players username.
# "{PLAYER_DISPLAYNAME}" to get the players display name with its original colors
# "{PLAYER_DISPLAYNAME_STRIPPED}" to get the players display name stripped of its original colors

# Note that entries are processed in the order they are listed below. If multiple entries match a message, only the first one will be used
# Also note that character case in all matches is ignored

entries:
  1:
    match: "{regex}(can i apply for|give me|i would like|can i have|could i have|i wanna be|i want|i want to be|i wanna apply for|can i|i want to|i wanna) (admin|staff|op|operator|mod|moderator|owner|co owner|coowner|apply)"
    set-matches-as: "{block}"
    execute:
      - "{player_msg}: &eSorry, staff applications are not open at this time."
      - "{player_msg}: &eWe will let the community know when we're looking again!"
  2:
    match: "{regex}this server (sucks|is lame|is trash|is boring|is not good|isn't good)"
    set-matches-as: "I love this server :D"
    execute: []
  3:
    match: "{regex}{only_commands}^(/plugins|/pl)$"
    set-matches-as: "{block}"
    execute:
      - "{player_msg}: &fPlugins (1): &aNone of your business >:D"
  4:
    match: "{regex}{only_chat}(is there a|what is the|whats the|can i have the|could i have the) (discord|discord server|discord link)"
    set-matches-as: "{dont_modify}{dont_notify}{dont_log}"
    execute:
      - "{broadcast}: &d{PLAYER}, the Discord server can be joined here: &fdiscord.gg/exampleLink"
  5:
    match: "{rexex}^only match this whole message excluding character case$"
    set-matches-as: "{block}{dont_notify}{dont_log}"
    execute:
      - "{player_msg}: Congrats, your whole message was 'only match this whole message excluding character case'!"
  6:
    match: "{text}{only_chat}repeat me:"
    set-matches-as: "{dont_modify}{dont_notify}{dont_log}"
    execute:
      - "{broadcast}: You typed: '{multiargs2}'"
  7:
    match: "{text}{only_chat}repeat only the first word I type:"
    set-matches-as: "{dont_modify}{dont_notify}{dont_log}"
    execute:
      - "{broadcast}: The first word after 'repeat only the first word I type:' was: '{arg8}'"
  8:
    match: "{text}{only_chat}repeat only the first and second word I type:"
    set-matches-as: "{dont_modify}{dont_notify}{dont_log}"
    execute:
      - "{broadcast}: The first word: '{arg10}', the second word: '{arg11}'"
  9:
    match: "{text}{only_signs}Text to replace on a sign"
    set-matches-as: "Replaced text on a sign!"
    execute: []
```


# command-spy.yml

```yaml
# --------------------------------------------------------------------------------------
# Command Spy:
# Shows players real-time commands to admins. Commands can optionally be whitelisted or blacklisted. Does not require "process-commands" in the main config to be enabled to function.
# To receive notifications, op or the permission: "chatsentry.commandspy" is required.
# Players with op or the permissions: "chatsentry.commandspy" & "chatsentry.commandspy.toggle" can toggle their commandspy notifications off and on.
# To make a player or group exempt from having their commands sent to players with command spy permission, add "chatsentry.commandspy.exempt" to their permissions.
# --------------------------------------------------------------------------------------

# If false, all commands will be "spied" on except for ones starting with the blacklisted ones. If true, only commands that start with any of the whitelisted ones will be "spied" on.
use-command-whitelist: false

# Commands that start with any of the ones on below on this list won't be sent to players with commandspy permission.
# Set to "commandspy-command-blacklist: []" to have an empty list.
# Make sure to put a "/" before any commands on the list below or the list will not work properly.
# Only add base commands; don't add any command arguments. (spaces)
commandspy-command-blacklist:
  - "/blacklistedcommand"

# If use-command-whitelist is enabled, only commands that start with any of the words on the below list will be sent to players with commandspy permission.
# Set to "commandspy-command-whitelist: []" to have an empty list.
# Make sure to put a "/" before any commands on the list below or the list will not work properly.
# Only add include base commands; don't add any command arguments. (spaces)
commandspy-command-whitelist:
  - "/tell"
  - "/t"
  - "/msg"
  - "/w"
  - "/r"
  - "/whisper"
  - "/w"
  - "/pm"
```


# link-and-ad-blocker.yml

```yaml
# --------------------------------------------------------------------------------------
# Intelligent Link & Ad Blocker:
# Prevents web links & server advertising (regular server ips & numeric server ips) with optional extra sensitivity bypass detection in chat, commands, signs, anvils, and books (additional check contexts can be disabled). Includes the ability to whitelist domains or all subdomains of a domain.
# Bypass permission: "chatsentry.linkandadblocker.bypass"
# --------------------------------------------------------------------------------------

# If "process-commands" is true in config.yml, this module will filter through all commands (of players without bypass permission or op)
# If "process-signs" is true in config.yml, this module will filter through text written on signs (of players without bypass permission or op)
# If "process-anvils" is true in config.yml, this module will filter through items renamed in anvils (of players without bypass permission or op)
# If "process-books" is true in config.yml, this module will filter through writing in books (of players without bypass permission or op)

# The below list is the list of domain names (not urls) that will be ignored by the filter.
# Variants with and without http://, https://, and www. will automatically be handled by the plugin; no need to add them below.
# Ex. adding "google.com" will allow: https://google.com, http://google.com, www.google.com, https://www.google.com, and http://www.google.com
# If you wish to whitelist all subdomains of a domain, you can do so with "*."; ex. "*.google.com" will permit all subdomains of Google ("mail.google.com", "https://maps.google.com", etc.)
# Character case in the below list does not matter. Case variants are automatically checked by the plugin.
# Set to "domain-whitelist: []" to have an empty list.
domain-whitelist:
  - "*.AllSubdomainsOfThisDomainAreAllowed.com"
  - "minecraft.net"
  - "spigotmc.org"
  - "*.youtube.com"
  - "youtu.be"
  - "spotify.com"
  - "optifine.net"
  - "java.com"
  - "minecraft.fandom.com"
  - "blockpalettes.com"

# If you have commands that you would like the filter to ignore checking, add them to the list below.
# Useful if you want to disable the filters checks in commands that use permissions or use comma lists (extra sensitivity will detect them otherside), or for commands like /msg.
# Make sure to only include base commands; don't add any command arguments. (spaces)
# Set to "command-whitelist: []" to have an empty list.
command-whitelist:
  - "/lp"
  - "/pex"
  - "/mangaddp"
  - "/manuaddp"
  - "/mangdelp"
  - "/manudelp"
  - "/rg"
  - "/region"
  - "//set"
  - "//replace"
  - "//overlay"
  - "//gmask"
  - "//fill"

# If enabled, the plugin will only block roughly 1,500 of the most widely used (TLD) domains (like .com, .net, .org, etc). Keeping this can substantially decrease false positive detections and will still effectively block advertising - however the downside is that uncommon, more suspicious links are unlikely to be detected.
# Only turn this off if you want maximum protection from links of any kind
# The current TLD list utilized by the plugin is a modified version of 2022030400 (Mar 4 22) via https://data.iana.org
only-filter-top-level-domains: true

# If enabled, common exploits to bypass link / ip filters will be blocked. For example, "google,,com", "google(dot)com", "youtube {D_O_T}com", etc.
# This option is NOT RECOMMENDED unless you deal with lots of advertisements. Since having this on makes the filter extra sensitive, it will be more likely to block things when it shouldn't. Due to how this option blindly processes a lot of messages, it does not respect the domain whitelist or only-filter-top-level-domains and will apply itself to any attempted malformed links it detects.
extra-sensitive: false

# If enabled, should social handles with periods (ex. "@some.social.handle") will be ignored. Please note turning this on allows people to bypass the filter by simply adding an "@" symbol to the start of the link/ip in question.
ignore-handles: false
```


# spam-blocker.yml

```yaml
# --------------------------------------------------------------------------------------
# Intelligent Spam Blocker:
# Accurately blocks spammy messages by examining their word, character, and sequence diversity in comparison to the messages length. Additionally prevents players from repeating the same or similar messages over and over within a short period of time with a dynamically adjusting repeat cooldown
# Bypass permission: "chatsentry.spamblocker.bypass"
# --------------------------------------------------------------------------------------

# Some players (or more likely bots) may append random sequences of numbers and other characters to their messages to try and evade filters like this one. This option will try to simplify incoming message data before core processing in attempt to combat this behavior. If you have false positive issues, try increasing the block-repeated-message-similarity-threshold value or turning this option off
flood-combater: true

# Should singular messages the module determines to likely be spam be blocked? Ex. players repeating the same or similar word or phrase over and over in the same message
# Messages are determined as spam based off their length vs character sqeuence repetetion, word diversity, and character diversity
block-singular-message-spam: true

# How sensitive should the singular message processor be?
# LOW, NORMAL, HIGH
singular-message-spam-processor-sensitivity: "NORMAL"

# If a player's message isn't similar to one of the messages on the phrase-whitelist, the below threshold value is used.

# How similar must a player's current message be to their last message(s) within the repeat-cooldown-in-seconds period in order to be blocked?
#
# 1.0 = message will be blocked only if it's exactly (100%) the same as one of their previous messages within the repeat-cooldown-in-seconds period.
# 0.0 = message needs to be 0% similar to their last message(s) within the repeat-cooldown-in-seconds period in order to be blocked. (this eliminates the purpose of the similarity checker)
block-repeated-message-similarity-threshold: 0.82

# This is how many times a player can repeat any messages they said within the last (roughly) repeat-cooldown-in-seconds period of time before being blocked for spam (messages on or similar to the phrase-whitelist will be ignored).
allowed-repeats: 4

# How long after a player sends a message should the module forget that a player said the message? (and allow them to repeat it or a similar message again)
repeat-cooldown-in-seconds: 15

# The phrases below are phrases that can be said over and over in separate messages
# Character case in the below list does NOT matter. Case variants are automatically checked by the plugin.
# Set to "phrase-whitelist: []" to have an empty list.
phrase-whitelist:
  - "wb"
  - "welcome back"
  - "wbbb"
  - "weba"
  - "yes"
  - "yea"
  - "ok"
  - "sure"
  - "no"
  - "nope"
  - "nah"
  - "yup"
  - "yep"
  - "yeh"

# How similar must a message be to a phrase on the list above to be allowed through? (in %)
# 1.0 = exactly as one of the phrases on the list (excluding character case)
# 0.0 = not exact at all (this eliminates the purpose of the whitelist)
phrase-whitelist-similarity-threshold: 0.65

# IMPORTANT: The below list will only work if "process-commands" is true in config.yml
# The below list is which commands the module will apply to. It's recommended to only set these to your private messaging commands.
# Set the list to "affected-commands: []" to apply the module to ALL commands (highly not recommended!)
# Make sure to only include base commands; don't add any command arguments. (spaces)
affected-commands:
  - "/tell"
  - "/t"
  - "/msg"
  - "/w"
  - "/r"
  - "/whisper"
  - "/w"
  - "/pm"
```


# unicode-remover.yml

```yaml
# --------------------------------------------------------------------------------------
# Unicode Remover:
# Removes non US-ASCII (US keyboard) characters in chat messages and commands to prevent alphanumeric lookalike unicode characters from being used to bypass filters & modules. Has the option to use a compatibility mode that only blocks unicode used by hacked clients - blocking virtually all alphanumeric lookalike unicode supported by MC while allowing other languages in chat, commands, signs, anvils, and books (additional check contexts can be disabled)
# Bypass permission: "chatsentry.unicoderemover.bypass"
# --------------------------------------------------------------------------------------

# If "process-commands" is true in config.yml, this module will filter through all commands (of players without bypass permission or op)
# If "process-signs" is true in config.yml, this module will filter through text written on signs (of players without bypass permission or op)
# If "process-anvils" is true in config.yml, this module will filter through items renamed in anvils (of players without bypass permission or op)
# If "process-books" is true in config.yml, this module will filter through writing in books (of players without bypass permission or op)

# Certain hacked clients allow players to type in alphanumeric lookalike unicode characters in order to bypass filters. Enabling this will only limit said alphanumeric lookalike unicode characters that are used by hacked clients and text generators to exploit filters while excluding unicode used by other languages.
# Disabling this will block all unicode (which may cause issues if people speak other languages than English)
# Though it allows for more protection if disabled, having this off may cause conflicts if players speak languages other than English.
enable-compatibility-mode: true

# Should this module filter commands? Turning this off is useful if you want people to be able to use unicode in commands such as private messaging
# This option does nothing if "process-commands" is false in config.yml
filter-commands: true

# If you have certain unicode characters you'd like the filter to ignore entirely you may add them below
ignored-unicode-chars: "áéíóúöőüű"
```


# word-and-phrase-filter.yml

```yaml
# --------------------------------------------------------------------------------------
# Intelligent Word & Phrase Filter:
# Hyper intelligently detects swears configured blocked words or phrases (and words/phrases similar to those on the list) from being said in chat, commands, signs, anvils, and books (additional check contexts can be disabled).
# Bypass permission: "chatsentry.wordandphrasefilter.bypass"
# --------------------------------------------------------------------------------------

# If "process-commands" is true in config.yml, this module will filter through all commands (apart from ignored commands on the list below) (of players without bypass permission or op)
# If "process-signs" is true in config.yml, this module will filter through text written on signs (of players without bypass permission or op)
# If "process-anvils" is true in config.yml, this module will filter through items renamed in anvils (of players without bypass permission or op)
# If "process-books" is true in config.yml, this module will filter through writing in books (of players without bypass permission or op)

censor:
  # Should the filter censor detected messages? When set to false, detected messages will be blocked entirely.
  # Due to the complexity of this options integration with the native filter, it's not always able to modify the message properly. If so, the message will be blocked completely instead.
  enabled: true
  # When set to false, the block message will only be sent if the message could not be censored, or if the entry had a nocensor:: modifier
  send-block-message-when-censored: false
  # Makes the censor leave the first two letters uncensored
  partially-censor: true
  # Since the filter can block long variations of blocked words/phrases, censored words/phrases might end up really spammy looking. This option will shorten the censored result if it's excessively long.
  # Ex. "What the *******************" -> becomes -> "What the *****"
  shorten: true
  # The character used to censor messages
  censor-char: "*"
  # Should Word & Phrase Filter Auto Punisher warnings apply if the message was censored? Has no effect if Auto Punisher warnings for the WAPF are disabled, or if the entire Auto Punisher module is disabled. This in conjunction with the nocensor modifier allows you to apply warnings to players who attempt to use very vulgar language, but apply no warnings to people sending basic swears/other blocked entries that are censored
  autowarn-when-censored: false
  # Should the module send Admin Notifier notifications when a message is censored? Set to false to only get notifications only when the censor fails to censor a message and has to block it entirely, or a nocensor:: entry is triggered. Requires the Admin Notifier module to be enabled to take effect.
  notify-when-censored: true

# To block variants and attempts to bypass the filter, the module will check for similar words & phrases that are on the blocked-words-and-phrases list in players messages and commands.
# The value below is how similar other words/phrases must be to a word/phrase on the blacklist to be considered an attempt to exploit / bypass the filter.
# 1.0 = exactly as one of the phrases on the list (excluding character case)
# 0.0 = not exact (this eliminates the purpose of the similarity checker)
block-similarity-threshold: 0.82

# When enabled, the filter will, based off the below charset process lookalike numbers and symbols as letters to detect players substituting letters with numbers numbers to bypass the filter. Ex. @ = A, # = H, 1 = I, 3 = E, etc.
# Not recommended to use along with the censor as it can leave parts of the visible message substituted. Enable if you're not using the censor or want extra protection anyway
substitution-intelligence: false

# Below is the substitutions the plugin will process. Please note that adding excessive amounts of substitutions will raise false positive rates. For the best results, it's recommended to try and keep this list pretty short and around or under ~12 substitutions.
substitution-intelligence-charset:
  - "0 (->) O"
  - "1 (->) I"
  - "2 (->) R"
  - "3 (->) E"
  - "4 (->) A"
  - "@ (->) A"
  - "< (->) C"
  - "# (->) H"
  - "$ (->) S"
  - "+ (->) T"
  - "( (->) C"
  - "{ (->) C"
  - "| (->) L"

# Should detections found in players usernames be ignored?
ignore-usernames: true

# When enabled, the filter will scan for existing commands from other plugins and allow them to go through, even if they are falsely detected due to being similar to a blocked word
# Keeping this enabled is highly recommended, as it can prevent a lot of false positives depending on how many commands your server has.
# Note that this option will only work if "process-commands" is true in config.yml
ignore-detected-registered-commands: true

# Below is the blacklist of words & phrases that will be blocked from being said in chat & commands.
# Character case in the below list does not matter. Case variants are automatically checked by the plugin on all entries.

# Set to "blocked-words-and-phrases: []" to have an empty list.

# For preconfigured (English) lists of swears, slurs, etc. see here:
# https://wiki.chatsentry.xyz/misc-info/preset-word-lists

# Block list guide: HIGHLY RECOMMENDED TO READ TO PREVENT FALSE DETECTION ISSUES, OR USE THE PRESET LISTS !
# https://wiki.chatsentry.xyz/word-and-phrase-filter-block-list-guide

blocked-words-and-phrases:
  - "badword"
  - "anotherBlockedWord"
  - "a blocked phrase"
  - "exact::exact entry"
  - "exactcontains::exactcontains entry"
  - "regex::(regex entry)"
  - "nocensor::dont censor this entry"

# Below is the whitelist of words & phrases that will under all circumstances be ignored by the filter.
# Since similar words/phrases to the blacklisted words/phrases are detected, the below list functions to fix the plugin not allowing valid but close matching words/phrases on entries you have no modifiers on.
# Similarity checking is not active on these entries & character case does not matter.
# Set to "whitelisted-words-and-phrases: []" to have an empty list.
whitelisted-words-and-phrases:
  - "alwaysAllowThisWord"
  - "always allow this phrase"

# IMPORTANT: The below list will only work if "process-commands" is true in config.yml
# The below list is which commands (including all arguments) the censor will not process.
# Any nocensor:: entries will be respectively blocked
# Make sure to only include base commands; don't add any command arguments. (spaces)
# Set to "censor-whitelisted-commands: []" to have an empty list.
censor-whitelisted-commands:
  - "/exampleIgnoredCommand"

# IMPORTANT: The below list will only work if "process-commands" is true in config.yml
# The below list is which commands (including all arguments) the module under all circumstances will not process.
# Make sure to only include base commands; don't add any command arguments. (spaces)
# Set to "whitelisted-commands: []" to have an empty list.
whitelisted-commands:
  - "/exampleIgnoredCommand"
```


# Preset lists for the Word and Phrase Filter

{% hint style="danger" %}
**Be warned, the lists on this page contains explicit language!**
{% endhint %}

{% hint style="info" %}
**NOTE**\
These blocklists are optimized for the default and recommended similarity threshold of `0.82`
{% endhint %}

## Comprehensive inappropriate words, swears, and slurs

*Suggested for servers seeking a complete PG-13 chat. Originally adapted from Google's blocked words list, with improvements made over the years.*

`Last update: 12/28/25`

{% hint style="success" %}
This list contains all the words and phrases as the below list (only slurs). No need to merge them!
{% endhint %}

<https://chatsentry.xyz/preset_inappropriate_words_swears_slurs_blocklist.txt>

## Only slurs

*Suggested for servers seek to allow some inappropriate language and swearing, but no slurs.*

`Last update: 12/28/25`

<https://chatsentry.xyz/preset_slurs_blocklist.txt>

## Popular server host names

*Suggested as an addition to one of the above lists for extra protection from advertisements (host names typically appear in free subdomains)*

`Last update: 12/28/25`

<https://chatsentry.xyz/preset_popular_server_host_blocklist.txt>


# About

#### As of plugin version 4.2.0, ChatSentry now offers a basic API to allow developers to create their own additions and modifications to the plugin!

Choose a page below to learn more:

{% content-ref url="/pages/-MVcDpX5w0xSgKTUjBa6" %}
[Accessing the API](/api/accessing-the-api)
{% endcontent-ref %}

{% content-ref url="/pages/-MVd1\_PzLJMHKvkVvb8o" %}
[API Documentation](/api/api-documentation)
{% endcontent-ref %}


# Accessing the API

## Getting started

In order to use the API you must download and import it into your project. Follow the steps below to do this before moving forward.

{% hint style="info" %}
**Download**

Go to <https://chatsentry.xyz/api-download> to download the API jar

The latest version is 1.1.0, released 1/5/26
{% endhint %}

### **Importing with IntelliJ**

1. Click on **File** -> **Project Structure** (Ctrl + Alt + Shift + S on windows)
2. Go to the **Modules** tab, then to the **Dependencies** subtab
3. Click the **+** on the bottom left side and choose **Library...** -> **Java** (see below image)
4. Choose your downloaded API jar

![](/files/-MZebxr3rJDeBmRERi3M)

### **Importing with Eclipse**

1. Right-click your project and choose **Properties** -> **Java Build Path**
2. Click on **Add external jar** and add your downloaded API jar

## Setting up your plugin

The next step is to go to your **plugin.yml** and add **ChatSentry** as a depend or softdepend, depending on if it is optional or not for your plugin to work

{% hint style="info" %}
**softdepend** is used if your plugin works without ChatSentry installed on the server

**depend** is used if your plugin requires ChatSentry to be installed on the server
{% endhint %}

{% code title="Example plugin.yml" %}

```yaml
name: ACoolPlugin
version: 0.0.1
author: epic-programmer
main: main.path
depend: [ChatSentry]
```

{% endcode %}


# API Documentation


# Events

### `ModuleTriggerEvent`

`com.kixmc.csapi.api.ModuleTriggerEvent`

This event is fired by ChatSentry when a module triggers.

```java
// get the violation/detection type
APIViolationType getType()

// get the context in which this event was triggered from (chat, command, etc)
APITriggerContext getContext()

// get the player who triggered this event
Player getPlayer()

// get the message before running through the module
String getOldContent()

// get the message after ran through the module
String getNewContent()

// get return the blocked content
String getBlockedContent()

// sets whether the event is cancelled
void setCancelled(boolean)

// returns whether the event is cancelled
boolean isCancelled()
```

### Violation types / supported modules

Any modules that have a violation/detection (`APIViolationType`) type associated with them are supported by this event. The below are valid detection types:

* **`ON_COOLDOWN`**
* **`LINK_OR_AD_BLOCK`**
* **`MESSAGE_FILTER_BLOCK`**
* **`WORD_REPLACER_REPLACE`** (legacy)
* **`SPAM_BLOCK`**
* **`UNICODE_CHARACTER_BLOCK`**
* **`CAP_LIMITER_BLOCK`**
* **`ANTI_PARROT_BLOCK`**
* **`ANTI_CHAT_FLOOD_BLOCK`**
* **`ANTI_STATUE_SPAMBOT_BLOCK`**
* **`ANTI_JOIN_FLOOD_BLOCK`**
* **`CHAT_MODIFIER_MODIFY`** (legacy)
* **`CHAT_EXECUTOR_MATCH`**

### Context types

Below are the valid `APITriggerContext` types:

* **`CHAT`**
* **`COMMAND`**
* **`ANVIL`**
* **`BOOK`**
* **`SIGN`**
* **`JOIN`**
* **`OTHER`** (currently unused)

### Code examples

For testing if everything is working properly

```java
@EventHandler
public void onModuleTrigger(ModuleTriggerEvent e) {
    Bukkit.broadcastMessage("Module trigger event fired! Details:");
    Bukkit.broadcastMessage("Trigger player: " + e.getPlayer().getName());
    Bukkit.broadcastMessage("Trigger type: " + e.getType().toString());
    Bukkit.broadcastMessage("Trigger context: " + e.getContext());
    Bukkit.broadcastMessage("Original msg: " + e.getOldContent());
    Bukkit.broadcastMessage("New msg: " + e.getNewContent());
    Bukkit.broadcastMessage("Blocked content: " + e.getBlockedContent());
    Bukkit.broadcastMessage("Event cancelled: " + e.isCancelled());
}
```

Checking contexts and types

```java
@EventHandler
public void onModuleTrigger(ModuleTriggerEvent e) {
    if (e.getContext() == APITriggerContext.BOOK && e.getType() == APIViolationType.UNICODE_CHARACTER_BLOCK) {
        // do something only if context was a book and detection type was from the unicode remover
    }
}
```

Cancelling under custom conditions

```java
@EventHandler
public void onModuleTrigger(ModuleTriggerEvent e) {
    if(e.getPlayer().getStatistic(Statistic.PLAY_ONE_MINUTE) >= 60) e.setCancelled(true); // allow players who have played 1+ hours to bypass filters
}
```


# Methods

**Below are the currently available API methods, accessible via** `com.kixmc.csapi.api.API`

```java
// the version of ChatSentry running on the server
static String getPluginVersion()
```

Psst.. more methods are on their way! Got a suggestion? Let me know on my [Discord server](/support)


# v5 Changelog

Changelogs are archived here from platforms with a minor delay.

### Newest changelogs can be viewed on the SpigotMC resource updates tab: <https://www.spigotmc.org/resources/79616/updates>

### 5.8.5

{% hint style="info" %}
**In this build**

* Performance optimizations<br>
* New Word & Phrase Filter 'multi-message-scan' option enabled by default, that in addition to scanning each message individually, merges user's recent messages and scans them as one to combat evasion by splitting blocked entries into multiple messages<br>
* New Word & Phrase Filter 'bidirectional-scan' option enabled by default, that in addition to regular message processing, processes all blocklist entries (except regex:: entries) that are >= 4 chars in reverse to combat evasion by writing blocked entries backwards<br>
* Fixed a bug that could cause messages to fail to be cancelled when they were blocked by the Word & Phrase Filter under certain circumstances<br>
* Reorganized Word & Phrase Filter config layout
  {% endhint %}

### 5.8.4

{% hint style="info" %}
**In this build**

* New 'quiet-startup' config option (false by default) that makes ChatSentry's startup less verbose in the console<br>
* Corrected an issue with Chat Executor logic flow that made only one flagged entry (if multiple) warn the user and send an admin notification (if no {dont\_notify} was present on the entry)<br>
* Fixed Anti Chat Flood max word length trigger failing to call an API ModuleTriggerEvent<br>
* API version 1.1.0 is now released and makes ModuleTriggerEvent cancellable.\
  \* [You can download the updated API jar here](https://chatsentry.xyz/api-download)\
  \* View the [API Docs](https://wiki.chatsentry.xyz/api/api-documentation/events) here<br>
  {% endhint %}

### 5.8.3

{% hint style="info" %}
**In this build**

* Fixed an issue that caused the Word & Phrase Filter to still auto warn when censored in some instances for entries with no modifier, even when autowarn-when-censored = false<br>
* As anvils, signs, and books do not support the Word & Phrase Filters censor (detections are always fully blocked, not edited), send-block-message-when-censored is now always true under those contexts to ensure there is feedback to the user instead of silently blocking what would be censored chat/command content, in the case that send-block-message-when-censored = false. This keeps behavior consistent across contexts to ensure a block message appears to the user when their content is fully blocked.<br>
* Refactoring & improvements to Unicode Remover logic<br>
* Fixed the Unicode Remover flagging hex/colorcodes in some contexts<br>
* Fixed inconsistent character whitelist behavior in the Unicode Remover<br>
* A list of the modules overriding bypass permissions (override-bypass-permissions in main config) now appears in /chatsentry info<br>
* All enabled modules that support more than one context now show the contexts that are enabled for them as well in /chatsentry list<br>
* Slightly new styling for /chatsentry help and /chatsentry info
  {% endhint %}

### 5.8.2

{% hint style="info" %}
*This update fixes an issue with module contexts resetting after server restart on plugin versions 5.8.0-PRE & 5.8.1. All users are recommended to update to this version and verify that their module contexts are properly enabled if updating from version 5.8.0-PRE or 5.8.1.*\
​\
**In this build**

* Fixes an issue with 5.8.0 config migration rerunning on 5.8.0-PRE and 5.8.1, causing module contexts to reset on every server reboot.<br>
* If your config is detected as affected, an alert will display to operators on join to notify you that modules are enabled but all their contexts are disabled.
  {% endhint %}

### 5.8.1

{% hint style="info" %}
**In this build**

* New 'truncate-unsafe-chat' main config option, enabled by default that determines whether unsafe player chat exceeding the vanilla length limit should be truncated. A recent vulnerability allows certain servers to accept command packets with lengths far past the reasonable 256 limit, up to 65,536 characters long per command. It's recommended to keep this enabled, as extremely large inputs can be disruptive and cause crashes or issues with other plugins.
  {% endhint %}

### 5.8.0-PRE

{% hint style="info" %}
This is a pre-release\
*This release includes large code changes. While tested, edge-case bugs may exist.*\
*Backing up your config files and databases, or waiting for a stable build, is recommended in the rare case issues occur during migration.*\
​\
**In this build**

* Enabled contexts can now be individually configured on a per-module basis instead of globally in the main config. Contexts can be managed under each module where they are enabled. This allows for more granular control of enabled filters in each context. Your configuration and preferences will be migrated automatically.<br>
* Module config toggles now have their own module-name sections, with an enabled toggle and context toggles (if the module supports multiple contexts), replacing the old enable-module-name nodes. Your configuration and preferences will be migrated automatically.<br>
* Updated main config and module config comments as necessary to reflect the changes in context control<br>
* Major Word and Phrase Filter improvements and optimizations<br>
* Exposed the new recursion depth limit in config.yml, under a new Advanced section at the bottom. This value defines the maximum number of recursive string processing operations that may run for a single input. If the limit is exceeded, processing is terminated and the message is fully blocked. This guards against potential StackOverflow errors before they happen and avoids wasting compute on redundant processing.<br>
* Fixed lockdown kick messages failing to read from lang.yml<br>
* Fixed Anti Statue Spambot ModuleTriggerEvent calling prematurely, resulting in it still calling even if the executed command was whitelisted
  {% endhint %}

### 5.7.0-PRE

{% hint style="info" %}
This is a pre-release\
*This release includes large code changes. While tested, edge-case bugs may exist.*\
*Backing up your config files databases, or waiting for a stable build, is recommended in the rare case issues occur during migration.*\
\
**In this build**

* Resolved potential for DataTruncation errors during database writes<br>
* MySQL/SQLite schema updates and improvements. Migration of old data occurs automatically<br>
* Corrected inconsistencies between MySQL and SQLite data types and capacities to be 1:1<br>
* Implemented regular expression recursion tracking and gating to all operations across all modules to prevent stack overflows and crashes when processing extremely large inputs. In the case recursion depth is exceeded, the event is blocked/canceled fully to prevent unfiltered content from passing through<br>
* Violation lookups now run fully async to prevent disrupting performance with large indexes<br>
* Word and Phrase Filter improvements<br>
  {% endhint %}

### 5.6.8

{% hint style="info" %}
**In this build**

* Added 52 missing ASCII lookalike unicode characters to the Unicode Remover's compatibility mode<br>
* Improvements to the Link & Ad Blockers disallowed link/domain detection capabilities<br>
* Fixed the Link & Ad Blocker throwing ArrayIndexOutOfBoundsException when a message with a disallowed link/domain contained an additional slash surrounded by spaces (" / ")
  {% endhint %}

### 5.6.7

{% hint style="info" %}
**In this build**

* Fixed a performance vulnerability with the Word and Phrase Filter that could trigger a StackOverflowError under some circumstances<br>
* Significantly improved Word and Phrase Filter whitelist handling, as well as other input processing<br>
* Fixed StringIndexOutOfBoundsException occurring with command inputs under some conditions
  {% endhint %}

### 5.6.6

{% hint style="info" %}
**In this build**

* Updated to the most recent TLD list from IANA (v2025082100 Aug 21)<br>
* Fixed ArrayIndexOutOfBoundsException occuring from the Link and Ad Blocker when certain characters appeared before links<br>
* Fixed module bypasses using certain characters in Chat Cooldown, Word and Phrase Filter, and Link and Ad Blocker
  {% endhint %}

### 5.6.5

{% hint style="info" %}
**In this build**

* Updated to the most recent TLD list from IANA (v2025052200 May 23 25)<br>
* Optimized Auto Punisher auto warning expiry scheduling<br>
* Improvements to Link and Ad Blocker's accuracy<br>
* Fixed a StackOverflowError case with particular character sequences in the Word and Phrase Filter
  {% endhint %}

### 5.6.4

{% hint style="info" %}
**In this build**

* Updated to the most recent TLD list from IANA (v2025022700)
  {% endhint %}

### 5.6.3

{% hint style="info" %}
**In this build**

* Updated to the most recent TLD list from IANA (v2024091000)<br>
* Fixed Anti Chat Flood counting colorcodes in max word length<br>
* Improvements to the Word & Phrase Filter and Link & Ad Blocker
  {% endhint %}

### 5.6.2

{% hint style="info" %}
**This release is a continued patch from config sync exploit. It is advisable for all servers to update to this release ASAP.​**\
\
**In this build**

* Prevents Auto Punisher executing various malicious commands used in the exploit. Please review your auto punisher file to ensure no unauthorized modifications have been made to punishment commands.<br>
* Fully deregistered all Bungee messaging channels from ChatSentry.<br>
  {% endhint %}

### 5.6.1

{% hint style="info" %}
**This release patches a newfound critical exploit using ChatSentry configuration syncing.**\
\
A full fix is in the works, but in the meantime this feature has been disabled for security. If you are a network please update to this build ASAP. ​\
\
**In this build**

* Temporarily disable exploitable network features while a fix is developed.
  {% endhint %}

### 5.6.0

{% hint style="info" %}
**In this build**

* Support for MC 1.21. Please report any issues to my support Discord, thank you and enjoy!<br>
* Updated to the most recent TLD list from IANA (v2024061600 Jun 16 24)
  {% endhint %}

### 5.5.9

{% hint style="info" %}
**In this build**

* Explicit support for MC 1.20.6. Please report any issues to my support Discord, thank you and enjoy!
  {% endhint %}

### 5.5.8

{% hint style="info" %}
**In this build**

* Resolved an update checking issue present in 5.5.7<br>
* Improved sign and anvil listener compatibility
  {% endhint %}

### 5.5.7

{% hint style="info" %}
**In this build**

* Explicit support for MC 1.20.5. Please report any issues to my support Discord, thank you and enjoy!<br>
* Updated to the most recent TLD list from IANA (v2024042700)
  {% endhint %}

### 5.5.6

{% hint style="info" %}
**In this build**

* Patches a critical issue. All users should update on all Spigot servers (proxy is not required)<br>
* Minor improvements to the Word & Phrase Filter, Spam Blocker, and Link and Ad Blocker<br>
* New {CONTENT} placeholder for Auto Punisher command actions that returns the players full message that triggered the auto punisher warning
  {% endhint %}

### 5.5.5

{% hint style="info" %}
**In this build**

* Minor patch fully removing some debug messages from the last release
  {% endhint %}

### 5.5.4

{% hint style="info" %}
**In this build**

* Fixed various bypasses and edge cases with the Word & Phrase Filter. Bypasses for particular kinds of entries could be spammed and cause the server to become overloaded, so it's recommended you update to this release sooner than later<br>
* Substantial improvements to the accuracy and reliability of the Word & Phrase Filter censor<br>
* New per context partial bypass permission for the Word & Phrase Filter "chatsentry.wordandphrasefilter.partialbypass.\<context>" where \<context> represents the context to apply the partial bypass, ex. chat, command, sign, etc. This permission bypasses all blocked entries APART from entries with the 'nocensor::' modifier (This modifier is intended to represent entries that should be blocked entirely instead of just censored, but it is also usable even if the censor is disabled). This is useful if you wish to allow users to write some blocked entries freely in commands or another context that would otherwise be censored (or blocked if the censor is disabled). It's important to distinguish this permission from the standard bypass permission, "chatsentry.wordandphrasefilter.bypass" that fully bypasses the module, including 'nocensor::' entries<br>
* Fixed Unicode Remover with compatibility mode disabled incorrectly flagging certain content in chat and commands
  {% endhint %}

### 5.5.3

{% hint style="info" %}
**In this build**

* Updated to the most recent TLD list from IANA (v2024021100)<br>
* Resolved various Link and Ad Blocker false positives<br>
* Resolved various Word and Phrase filter bypasses related to censor failures<br>
* If an exception occurs during censoring, the Word and Phrase Filter now blocks the entire message from being sent<br>
* New 'ignore-usernames' option in the Link and Ad Blocker that when enabled removes usernames from the input message before the module checks for links. Useful if player names can contain periods or other special characters in your server.<br>
* Fixed the anvil processor removing formatting on item names when it flags a module<br>
* The command processor now listens on the earliest priority to have a better chance of compatibility with other plugins listening on command preprocess<br>
* Word and Phrase Filter's substitution intelligence no longer applies to commands to prevent accidental conflicts with command arguments
  {% endhint %}

### 5.5.2

{% hint style="info" %}
**In this build**

* Accuracy improvements to the Spam Blocker's singular message spam processor<br>
* Chat Executor now uses a more reliable context processing method<br>
* Fixed a stack processing issue that made Chat Executor set-matches-as flags be unreliably respected<br>
* Fixed Chat Executor API trigger event calling when no patterns matched<br>
* Fixed Chat Executor sending Discord Notifier notifications regardless of {dont\_notify} flags<br>
* Fixed global admin notifier notifications not respecting players with notifications toggled off<br>
* Updated to the most recent TLD list from IANA (v2023120200)
  {% endhint %}

### 5.5.1

{% hint style="info" %}
**In this build**

* Fixed Chat Executor set-as modifiers appearing in the result message<br>
  {% endhint %}

### 5.5.0

{% hint style="info" %}
**In this build**

* Fixed 400 bad request error when using DEFAULT for the footer-icon option in Discord Notifier<br>
* Fixed an issue with Unicode Remover not respecting ignored characters<br>
* Fixed override bypass perm option for Unicode Remover not working for signs
  {% endhint %}

### 5.4.9

{% hint style="info" %}
**In this build**

* Patches a critical issue. All users should update on all servers, including the proxy if a network<br>
* Fixed startup error on some configurations related to Discord Notifier<br>
* Fixed an issue related to the sign listener that caused false positives with certain styling
  {% endhint %}

### 5.4.8

{% hint style="info" %}
**In this build**

* Fixed potential module startup issues with certain configurations<br>
* Resolved an issue with lockdown modes not reading or writing to the config properly
  {% endhint %}

### 5.4.7

{% hint style="info" %}
**In this build**

* The Link & Ad Blocker module is now utilizing the latest TLD list from IANA (v2023110200)<br>
* Players now require the 'chatsentry.manualwarnings.see' permission in order to see manual warning broadcasts<br>
* Discord Notifier footer text and image icon can now be configured in the modules config using footer-text and footer-icon options.<br>
* Fixed Chat Executor player message or broadcast message actions appearing before the players chat message in chat<br>
* Fixed potential StackOverflowError from the Word and Phrase Filter when filtering commands under rare circumstances
  {% endhint %}

### 5.4.6

{% hint style="info" %}
**In this build**

* Dependency updates to fully support 1.20.2
  {% endhint %}

### 5.4.5

{% hint style="info" %}
**In this build**

* New outside-embed-content config options for Discord Notifier notifications that let you ping users/roles or add other text to be sent before the embed<br>
* Various improvements to event handling aimed to increase compatibility with other plugins doing similar things<br>
* The Link & Ad Blocker module is now utilizing the latest TLD list from IANA (v2023091800)
  {% endhint %}

### 5.4.4

{% hint style="info" %}
**In this build**

* Fixed multiple issues with the unicode remover improperly processing content and sending invalid admin notifier notifications<br>
* Improvements to the link & ad blockers accuracy to further reduce false positives<br>
* Updated to the most recent TLD list from IANA (v2023090200)<br>
* Minor improvements to various default module configs for out of box functionality
  {% endhint %}

### 5.4.3

{% hint style="info" %}
**In this build**

* New 'respect-cancelled-events' option in the main config that determines whether ChatSentry should process chat, command, anvil, sign, etc. events that are cancelled/prevented by other plugins. This is enabled by default. Generally, you should only disable this if you have issues with compatibility with other plugins or want ChatSentry auto punisher warnings to continue to accumulate even when players are muted by another plugin
  {% endhint %}

### 5.4.2

{% hint style="info" %}
**In this build**

* Fixed issue with unicode removers ignored-chars not being respected<br>
* Fixed an issue with the word and phrase filter that let players bypass the filter by adding non-alphanumeric characters before their message<br>
* Updated to the most recent TLD list from IANA (v2023082100)

\
HOTFIX #1:

* Fixed debug messages from the unicode remover appearing
  {% endhint %}

### 5.4.1

{% hint style="info" %}
**In this build**

* Fixed an issue that caused messages with color in them to trigger the unicode remover under some configurations<br>
* The unicode removers config option ignored-unicode-characters now uses a regular yaml list format. Existing configs should not be affected<br>
* Fixed {NL} newline symbol not working in global admin notifier messages cross server<br>
* Updated the top level domain list utilized by the Link & Ad Blocker's only-filter-tlds option to the most recent version from IANA (2023080800, Aug 8 23)
  {% endhint %}

### 5.4.0

{% hint style="info" %}
**In this build**

* Fixed an issue with Russian characters being caught by unicode remover on compatibility mode<br>
* Chat listener adjustments for increased compatibility with other chat plugins<br>
* Fixed an issue with the unicode remover sending invalid sign admin notifications<br>
* Added a new chatsentry.thankyoumsg permission that may be exempted to prevent the initial installation Thank you pop up message to ops from being shown. This is only useful for select circumstances where you may be creating many servers with a fresh ChatSentry installation and do not want to have to run /kcs hidemsg on each
  {% endhint %}

### 5.3.9

{% hint style="info" %}
This update contains a critical patch to the unicode remover module’s compatibility mode on 1.20.x servers.\
It's advisable to update as soon as possible if you are running or plan to run 1.20.x and use the unicode remover.​\
\
**In this build**

* 1.20 adds support for a much wider range of unicode. Unicode removers compatibility mode has been updated with further A-Z lookalike characters, now checking against 1,953 total characters.
* ChatSentry should now respect mutes and not process the cancelled message through modules<br>
* Updated to the most recent TLD list from IANA (v2023072502)

\
HOTFIX #1

* Unicode removers compatibility mode now properly reads unicode characters outside the Basic Multilingual Plane<br>

HOTFIX #2

* Fixed a typo in the first start start thank you message
  {% endhint %}

### 5.3.8

{% hint style="info" %}
**In this build**

* Support for Minecraft 1.20
  {% endhint %}

### 5.3.7

{% hint style="info" %}
**In this build**

* Fixed a typo in the footer of discord notifications
  {% endhint %}

### 5.3.6

{% hint style="info" %}
**In this build**

* Fixed chat executor firing if another module blocked the message<br>
* Increased the leniency of the ignore-short option in anti parrot<br>
* Adjusted footer text in discord notifications<br>
* Updated to the most recent TLD list from IANA (ver 2023053100). XN-- domains were omitted<br>
* Potentially increased compatibility with other chat plugins doing similar things<br>
* Fixed modules firing for muted players, this should be compatible with most chat plugins that listen to and cancel the event on first (LOWEST) priority (ChatSentry listens on LOW)<br>
* Fixed {NL} not working in console on admin notifier messages
  {% endhint %}

### 5.3.5

{% hint style="info" %}
**In this build**

* Various minor optimizations, some tasks have been moved off the main thread
  {% endhint %}

### 5.3.4

{% hint style="info" %}
**In this build**

* Fixed an issue that caused BungeeCord support to fail to initalize. You will have to update the plugin on the proxy & individual servers<br>
* Improvements to Link and AD Blocker's extra sensitivity mode. It is still not recommended unless you deal with excessive advertising due to its high false positive rates<br>
* Updated to the most recent TLD list from IANA (ver 2023020400). XN-- domains were omitted<br>
* Fixed StackOverflowError in Word & Phrase Filter when attempting to censor messages that began with an exclamation point
  {% endhint %}

### 5.3.3

{% hint style="info" %}
**In this build**

* Fixed an issue where the Link & Ad Blocker would block whitelisted domains/links with https<br>
* Updated to the most recent TLD list from IANA (ver 2022112300). XN-- domains were omitted<br>
* Fixed an issue where auto punisher warning expiry in mass amounts would cause the server to hang<br>
* Patched rare database disconnect issue<br>
* Code cleanup & performance improvements
  {% endhint %}

### 5.3.2

{% hint style="info" %}
**In this build**

* Significant code cleanup & optimizations
  {% endhint %}

### 5.3.1

{% hint style="info" %}

#### In this build

* Various false positive fixes for the Link & Ad Blocker module<br>
* Added a new toggle chat 'blacklisted-commands' command list to config.yml. Commands on this list (without exemption permission) will be blocked when chat is toggled via /togglechat<br>
* Resolved a book listener unicode remover false positive if a page was left blank<br>
* Performance optimizations
  {% endhint %}

### **5.3.0**

{% hint style="info" %}
**Additions**

* 1.19 support
  {% endhint %}

### **5.2.9**

{% hint style="info" %}
**Improvements**

* Link & Ad Blocker improvements & false positive fixes
  {% endhint %}

### **5.2.8**

{% hint style="info" %}
**Improvements**

* Link & Ad Blocker improvements & optimizations

**Fixes**

* Resolved auto grammar incorrectly capitalizing two letter words at the start of messages
  {% endhint %}

### **5.2.7**

{% hint style="info" %}
**Improvements**

* Resolved additional Link & Ad Blocker false positives in relation to extended period use<br>
* Updated to the most recent TLD list from IANA<br>
* Modified the TLD list to exclude especially uncommon tlds for better module accuracy<br>
* Added 6 additional default whitelisted domains most servers would likely allow to the Link & Ad Blocker configuration for a better setup experience for this module
  {% endhint %}

### **5.2.6**

{% hint style="info" %}
**Improvements**

* Resolved numerous Link & Ad Blocker potential false positives<br>
* Various code optimizations
  {% endhint %}

### 5.2.5

{% hint style="info" %}
**Improvements**

* Fixed the Link & Ad Blocker failing to respect whitelisted domains if they included a protocol
  {% endhint %}

### 5.2.4

{% hint style="info" %}
**Improvements**

* The Word & Phrase Filter will no longer to attempt to censor segments over 15 characters to prevent excessive resource usage, as the longer the input the more work the plugin has to do to analyze the content

\
**Fixes**

* Fixed potential StackOverflowError related to the Word & Phrase Filter censor caused by very short blocked entries
  {% endhint %}

### 5.2.3

{% hint style="info" %}
**Additions**

* New 'notify-when-censored' option added to the Word & Phrase Filter's censor options. This option determines whether the module should send Admin Notifier notifications when a message is censored. When set to false false notifications will only be sent when the censor fails to censor a message and has to block it entirely, or a nocensor:: entry is triggered. This option requires the Admin Notifier module to be enabled to take effect.

\
**Improvements**

* Improvements to the Word & Phrase Filter's censor. Symbols embedded within blocked entries can now be processed by the censor, reducing the rate the censor fails and has to block a message entirely<br>
* Improvements to the Word & Phrase Filter's partially-censor options internals. Fixed the potential for the module censoring extra parts of detected messages unrelated to the actual censored content<br>
* Improvements to the Link & Ad Blocker's subdomain detection. Links with any amount of subdomains are now supported instead of just one subdomain

\
**Fixes**

* Fixed the Link & Ad Blocker failing to detect links that started with a slash (ex. 'example message /google.com')

* Fixed the Link & Ad Blocker failing to detect links with ports (ex. 'some.domain:25565')
  {% endhint %}

### 5.2.2

{% hint style="info" %}

#### Fixes

* Added autoReconnect=true property to MySQL connections to allow the plugin to reconnect to MySQL if the connection is interrupted<br>
* Fixed the chatsentry.togglechat permission failing to internally register
  {% endhint %}

### 5.2.1

{% hint style="info" %}

#### Improvements

* Added 42 new unicode chars to the unicode removers compatibility mode blacklist to resolve filter bypasses using any of those characters
  {% endhint %}

### 5.2.0

{% hint style="info" %}
**Additions**

* New 'block-singular-message-spam' option for the Spam Blocker that lets the module block on a message-by-message basis messages that are likely be spam. Ex. players repeating the same or similar word or phrase over and over in the same message. Messages are determined as spam using a newly developed algorithm that takes character sequence repetition, word diversity, and character diversity into account. This option comes with a 'singular-message-spam-processor-sensitivity' sub-option that determines how sensitive the singular message spam component should be. Though new, this feature has been tested across thousands of production server chat messages and is considered stable. If you encounter any issues, please report them<br>
* New Spam Blocker lang message 'singular-message-spam-trigger' that shows when a singular message is flagged as spam by the module<br>

#### Fixes

* Fixed the sign listener removing colorcodes from signs<br>
* Fixed potential for a SQL error when logging certain content<br>
* Fixed {PLAYER} placeholder in the Anti Relog Spam module failing to parse
  {% endhint %}

### 5.1.0

{% hint style="info" %}

#### Improvements

* Improvements to the Word & Phrase Filter's detection abilities<br>
* Improvements to the Link & Ad Blocker's detection abilities<br>
* Updated the top level domain list used by the Link & Ad Blocker to version 202112300<br>

#### Additions

* Reformatted censor options in the Word & Phrase Filter config to all be under a singular 'censor' node for better organization. Censor related options will be reset to default and may require reconfiguring.<br>
* New 'send-block-message-when-censored' option for the Word & Phrase Filter censor. When set to false, the block message will only be sent if the message could not be censored, or if the entry had a nocensor:: modifier<br>
* New 'partially-censor' option for the Word & Phrase Filter censor. This option makes the censor leave the first two letters uncensored to partially indicate what the censored content was<br>
* New 'nocensor::' Word & Phrase Filter entry modifier. If an entry with this modifier is found in a message, the message will be blocked entirely and not be attempted to be censored. Good for very vulgar language that you want to keep out of chat entirely. This modifier is stackable, meaning you can use it along with other modifiers, ex. 'nocensor::exact::'<br>
* New 'autowarn-when-censored' option for the Word & Phrase Filter censor. This option determines if Word & Phrase Filter Auto Punisher warnings apply if the message was censored. Has no effect if Auto Punisher warnings for the WAPF are disabled, or if the entire Auto Punisher module is disabled. This in conjunction with the new nocensor modifier allows you to apply warnings to players who attempt to use very vulgar language, but apply no warnings to people sending basic swears/other blocked entries that are censored<br>
* The Chat Executor now supports execution on signs and anvils with the new '{only\_anvils}' & '{only\_signs}' match node prefixes. These options require the sign/anvil listener to be enabled in config.yml as well. When using these new prefixes the entry will solely execute on anvils or signs<br>

#### Fixes

* Fixed commandspy not respecting toggle preferences
  {% endhint %}

### 5.0.4

{% hint style="info" %}

#### In this build

* Resolved line breaks (\n) not being respected in lang.yml entries
* Word & Phrase Filter command & phrase whitelist no longer respects letter case
* Fixed ClassNotFoundException caused by the network bridge
  {% endhint %}

### 5.0.3

{% hint style="info" %}
**In this build**

* Potentially fixed EOFException related to network sync
* Fixed potential NPE caused by ignored unicode char processing
  {% endhint %}

### 5.0.2

{% hint style="info" %}

#### In this build

* Unicode remover:
  * resolved incorrect characters being caught with compatibility mode off
  * potentially resolved NPE caused by an invalid pattern
* Fixed a typo in the default 'anti-chat-flood.trigger-too-long' lang.yml message
  {% endhint %}

### 5.0.1

{% hint style="info" %}

#### In this build

* Fixed hex colors not working on 1.18 servers
* Resolved a potential NPE caused by the unicode remover
* Resolved an issue with the instance identifier
  {% endhint %}

### 5.0.0 - Better than ever

{% hint style="info" %}

#### Improvements & Reworks

* All YAML-based storage has been replaced with SQL-based storage, which is much more efficient & reliable. You can configure whether you'd like to use SQLite (local flatfile) or MySQL (remote database) in the new storage.yml file

* New dynamically adjusting task queuing systems allow the server to no longer hang or excessively lag when performing various tasks such as violation autoclean/cleanlog operations

* Improved overall performance with various optimizations and additional asynchronous operations

* Significantly improved the default blocked words list. It can be accessed at <https://wiki.chatsentry.xyz/misc-info/preset-word-lists>

* Significantly improved the default Auto Punisher configuration. Delete auto-punisher.yml and reload the plugin if you wish to use it

* Renamed various config options for improved clarity and to lower the chance of accidentally setting an option you didn't want

* 15 previously unconfigurable messages from the cswarn and cswarnings commands are now configurable in lang.yml

* Significantly improved the default module trigger lang messages with better clarity and writing. Delete trigger nodes in the file and reload the plugin if you wish to use them

* Network file synchronization now only accepts files that are newer than the current ones in use by the receiving server instance, preventing overriding newer files with older versions of themselves

* New 'ignored-unicode-chars' option in the unicode remover module that allows you to have certain unicode characters be ignored entirely by the module

* Improvements to the World & Phrase Filters detection abilities

#### Additions

* New Discord Notifier module that sends Discord notifications via webhooks when modules flag a message or action, players are manually or automatically warned, warnings are pardoned, autowarns expire, and when the Auto Punisher punishes a player. You can configure each aspect of the webhooks, as well as choose to use the same webhook or separate ones for each notification type. Messages are dynamically delayed to avoid Discord rate limiting

* New Anti Relog Spam module that prevents players excessively relogging in short periods of time to flood chat. Uses a dynamically increasing cooldown to effectively combat excessive relogging without affecting players who are relogging reasonably.

#### Changes

* The option to use the legacy url identifier has been removed as the experimental url identifier is now considered stable

* Reorganized large portions of the main config file

* Lots of config comments rewritten/improved for better readability

#### Bug Fixes

* Fixed the Word & Phrase filter censor failing to work if there was any symbols in a message with a blocked word/phrase

* Fixed "Command cannot be empty" error caused by the Word & Phrase Filter's censor when running commands with a blocked word/phrase in it

* Fixed NPE related to the command processor

* Fixed Anti Join Flood admin notifications not showing up if Anti Statue Spambot notifications were not enabled

* Fixed manual warnings failing to internally register due to a caching error

* Fixed exempt from Auto Punisher warnings permission not being respected

* Fixed auto warning expiry working improperly under some circumstances

* Fixed cslockdown's only exempt allowed message appearing as a blank kick message

* Fixed certain characters corrupting violation logs

* Resolved an issue with {proxy\_player\_cmd} executions

#### **Note about additional proxy support & api improvements**

Many of you know more proxies like Velocity and Waterfall were planned on being supported in this release along with API improvements. After lots of trial and error I've decided to push this support to a future update as it is not stable and needs sufficiently more work. It was the last remaining implementation that was holding up this release. I currently do not have the time to finish it quickly, but still wanted to release v5 with all the other improvements. I hope you understand why I made this decision. Though, the good news is that in the meantime, you can use adapters like Snap to run the plugin on Velocity!
{% endhint %}


# Legacy Changelogs


# v4 Changelog

## 4.8.1 // Word & Phrase Filter censor fixes & colorcode patch

{% hint style="info" %}

### In this build

* Fixed a handful of bugs caused by the Word & Phrase Filter censor option with certain inputs. The censor is now officially considered stable<br>
* Fixed the plugin removing colorcodes from any player messages even with permission
  {% endhint %}

## 4.8.0 // Big bug & bypass fixes

{% hint style="info" %}

### In this build

* Fixed various StackOverflowErrors caused by the Word & Phrase Filter censor option<br>
* Fixed various bypasses that would (despite having the filter detect the message) cause the censor to fail actually censoring the message<br>
* Fixed colorcodes being able to be used mid-word to bypass many of the filters<br>
* Fixed potential of improper regex behavior in Word & Phrase Filter regex:: entries
  {% endhint %}

## 4.7.4 // More bug fixes

{% hint style="info" %}

### In this build

* Fixed the cslockdown only-known & only-exempt allowed kicked messages failing to resolve from the language file<br>
* Fixed cslockdown exempt players failing to resolve<br>
* Fixed inaccessible API issue caused by the last update<br>
* Fixed error when looking up null violation entries
  {% endhint %}

## 4.7.3 // Bug fixes

{% hint style="info" %}

### In this build

* Fixed the Word & Phrase Filter failing to cancel command events with the censor option off<br>
* Fixed the Anti Join Flood module failing to routinely reset its 1 minute join counter
  {% endhint %}

## 4.7.2 // Patches

{% hint style="info" %}

### Patch update

* Resolved non-config related Word & Phrase Filter false positives introduced in the last release<br>
* The plugins Bungee support no longer strictly requires Paper or Spigot to function
  {% endhint %}

## 4.7.1 // Recommended stability update: bug fixes & improvements

{% hint style="info" %}

### In this build

* Improvements to the Word & Phrase Filters accuracy<br>
* Fixed numerous Word & Phrase Filter censor issues<br>
* Fixed word-specific regex blocked entries in the Word & Phrase Filter failing to be matched<br>
* Fixed custom Chat Executor violation type names not showing up in Admin Notifier messages<br>
* The Chat Executor now has priority over other modules<br>
* Admin Notifier messages now support new line insertion with {NL}<br>
* The default recommended block-similarity-threshold for the Word & Phrase Filter is now 0.82
  {% endhint %}

## 4.7.0 // Word & Phrase Filter censor option & lang options for violation types and contexts

{% hint style="info" %}

### In this build

* New 'censor' option in the Word & Phrase Filter. Enabled by default, determines whether detected messages should be censored instead of blocked completely. You can choose the censor character by editing the 'censor-char' value; defaults to '\*'. Long censored messages can be auto shortened with the 'smart-censor' option<br>
* Violation types and contexts shown in Admin Notifier messages can now be customized in the lang file under lang.violation-types & lang.contexts
  {% endhint %}

## 4.6.1 // Escaped characters config manager fix

{% hint style="info" %}

### Patch update

\* Fixed the config manager unescaping escaped characters in string nodes
{% endhint %}

## 4.6.0 // New regex:: modifier and lang changes

{% hint style="info" %}

### In this build

* New Word & Phrase Filter modifier: 'regex::', finds a regex pattern, entry will be subject to minimal checks, such case variants, word exaggerations, and substitution intelligence. Processed text that matches the pattern will be blocked<br>
* lockdown-only-known-allowed-message & lockdown-only-exempt-allowed-message have been moved from the main config file to the language file, updation is automatic and will copy over your existing messages<br>
* Updated plugin (& plugin.yml) tagline
  {% endhint %}

## 4.5.3 // Context prediction improvements, filter improvements, & more

{% hint style="info" %}

### In this build

* Improvements to context prediction<br>
* Improvements to the Word & Phrase filter's accuracy<br>
* Internal optimizations<br>
* Substantial improvements to the preset Word & Phrase Filter block lists: <https://wiki.chatsentry.xyz/misc-info/preset-word-lists>
  {% endhint %}

## 4.5.2 // Misc. improvements & fixes

{% hint style="info" %}

### **In this build**

* Improvements to the Word & Phrase filter's accuracy<br>
* Fixed the Word & Phrase filter failing to detect short entries with numbers in them<br>
* Fixed hex colors not working 1.17 servers<br>
* Fixed cslockdown enabling itself when adding or removing players to the exemption list via /cslockdown add/remove<br>
* Updated the top level domain list used by the Link & Ad Blocker to version 2021071901 (Jul 20 7:07PM)<br>
* Removed the plugins bday message
  {% endhint %}

## 4.5.1 // New server lockdown command & Anti Join Flood fix

{% hint style="info" %}

### In this build

* New '/cslockdown \<onlyknown|onlyexempt|add|remove|exemptlist> \[username]' command allows you to toggle a persistent-through-server-restart lock on your server which can either block unseen before/unknown players from joining, or everybody except those who are on the exemption list. This command was designed to be used under the case of a bot attack to disallow the unseen before player-bots entering the server, but it can be used for any other purpose as well. The disallowed join messages are customizable via the main config file. The new permissions can be found here: <https://wiki.chatsentry.xyz/pac/commands-and-their-perms#other-standalone-commands>\
  \\

* Fixed the Anti Join Flood module timer never starting when the startup delay was enabled

* Fully removed the configurable 'Guarded by ChatSentry' message
  {% endhint %}

## 4.5.0 // Anti Spam & Anti Parrot improvements and various other improvements

{% hint style="info" %}

### In this build

* Added a new "flood-combater" option to the Anti Spam and Anti Parrot module: some players (or more likely bots) may append random sequences of numbers and other characters to their messages to try and evade filters. This option will try to simplify incoming message data before core processing in attempt to combat this behavior<br>
* Fixed an error with the Anti Parrot module processing player names with special characters in them<br>
* Improved the default Word & Phrase Filter substitution intelligence charset<br>
* Updated the Link & Ad Blocker's top level domain list to the latest one from IANA
  {% endhint %}

## 4.4.4 // Chat Executor & Unicode Remover fixes

{% hint style="info" %}

### **Patch update**

* Fixed Chat Executor set-matches-as nodes failing to register stacked actions\
  \\

* Fixed the Unicode Remover failing to send an admin notification when a chat message with disallowed unicode was modified but not fully blocked
  {% endhint %}

## 4.4.3 // Proxy command patch

{% hint style="info" %}

### **Patch update**

* Fixed {proxy\_player\_cmd} and {proxy\_console\_cmd} command entries in the auto punisher & chat executor resolving playername placeholders as console
  {% endhint %}

## 4.4.2 // Auto clean old logs & misc. improvements and optimizations

{% hint style="info" %}

### Additions

* Added a new 'clean-logs-older-than' option to the main config that will periodically attempt to erase log data older the value in days. Set to -1 to disable<br>
* Significantly improved & rewrote the majority of the default Auto Punisher config file with better functioning punishment caps, durations, messages, and more. See the new file here: <https://wiki.chatsentry.xyz/files/files/module-configurations/auto-punisher.yml><br>
* Added a check to cancel and notify console when files attempting to sync cross-server are too large (Java limitation)<br>
* Minimized, removed, and rewrote various startup messages to be less intrusive<br>
* Various optimizations
  {% endhint %}

## 4.4.1 // New module options and performance improvements

{% hint style="info" %}

### Additions

* Added an 'ignore-usernames' option to the Word & Phrase Filter that determines whether or not detections found in players usernames should be ignored<br>
* Added an 'ignore-usernames' option to the Anti Parrot module that determines whether or not players usernames in any phrase-whitelist phrases should be ignored<br>
* Added an 'filter-commands' option to the Unicode Remover module that determines whether or not the module should filter commands. Turning this off is useful if you want people to be able to use unicode in commands such as private messaging. Does nothing if 'process-commands' is false in config.yml<br>
* Violations are now logged asynchronously to prevent lag when logging lots of violations quickly<br>
* Performance optimizations with file loading and auto updation, especially noticeable when using sync-configs on BungeeCord
  {% endhint %}

## 4.4.0 // Experimental BungeeCord support is here!

{% hint style="info" %}

### Additions

* Added a new "bungeecord" config option that when enabled that comes with 4 sub-settings: enabled, sync-configs, sync-playerdata, global-admin-notifier-messages. These options allow ChatSentry to automatically sync config settings and player data with other ChatSentry instances across your network, as well as other synchronization abilities like cross-server admin notifier messages. For information on how to set up the plugin to work with BungeeCord, see the guide here: <https://wiki.chatsentry.xyz/bungeecord-bridge-setup-guide><br>
* Added a new permission node: 'chatsentry.violations.getnotified.cross\_server'. Players with this notification will receive real-time violation notifications across all servers on the network (requires BungeeCord & BungeeCord mode, & global admin notifications enabled in config.yml)<br>
* Added new lang.yml nodes under the admin notifier used when BungeeCord mode is true. These message nodes are almost identical to the regular notification nodes however they use the {SERVER\_NAME} placeholder to show the server in which the notification came from in the message.<br>
* Added new actions to use in the Auto Punisher and Chat Executor modules: "{proxy\_console\_cmd}: command" to run a command as the from BungeeCord proxy console, and "{proxy\_player\_cmd}: command" to run a command as the player from the BungeeCord proxy<br>
* Additional applicable plugin permissions are now registered in the server on startup to resolve issues with some permission plugins failing to pick up unregistered permissions<br>
* Various code optimizations and other improvements
  {% endhint %}

## 4.3.1 // Optimizations & Link & Ad Blocker fixes

{% hint style="info" %}

### Improvements

* Performance improvements & optimizations

### Fixes

* Fixed the Link & Ad Blocker under rare circumstances failing to skip to the next section of some sequences of input text and "detecting" sections that otherwise would be ignored<br>
* Fixed potential ArrayIndexOutOfBoundsException related to the Link & Ad Blocker
  {% endhint %}

## 4.3.0 // Recommended stability update: misc. improvements and fixes

{% hint style="info" %}

### Improvements

* Sign context detections now log and display the entire sign text via "{ENTIRE\_MESSAGE}" (along with the detected line via "{BLOCKED\_CONTENT}") instead of just the detected line<br>

* Various code optimizations and internal improvements<br>

* The Auto Grammar module's "capitalize" option will no longer attempt to capitalize messages of 2 or less letters (commonly faces) such as "xD"\
  \\

* The Auto Grammar module's "add-periods" option will no longer attempt to append periods to messages of 2 or less letters (commonly faces) such as "xD"

### Fixes

* Fixed the Link & Ad Blocker failing to ignore non-tld domains if any of the characters were uppercase<br>
* Fixed sign, anvil, and book processors failing to respect negated module permissions or module config overrides on operators<br>
* Fixed the Auto Grammar module correcting any "typos" that happen to be embedded within a different word

### Other

* Fancy new changelog.txt format!<br>
* Misc. config.yml layout changes<br>
* Minor adjustments to the default lang.yml file
  {% endhint %}

## 4.2.1 // Anti Chat Flood patch and misc. config improvements

{% hint style="info" %}

### Improvements

* Improvements to the default Anti Chat Flood's custom limits list<br>
* Fixed a typo in the Chat Executor's config comments

### Fixes

* Fixed a potential PatternSyntaxException error related to the Anti Chat Flood module when using no custom limits
  {% endhint %}

## 4.2.0 // Show context in admin notifications, bug fixes, developer API, new Chat Executor features, and more

{% hint style="info" %}

### Improvements

* **Admin Notifier messages can now display the context in which the notification is related to with {CONTEXT}**. All the notification messages use this starting format: "&7(\&b{VIOLATION\_TYPE}&8 - \&b{CONTEXT}&7)" - ex. "(Link or Ad Block - Sign)". In order to make use of this placeholder you will need to manually add it to your notification messages in lang.yml, or delete the file and let the plugin regenerate a fresh one<br>
* The plugin now has a developer api! See more here: <https://wiki.chatsentry.xyz/api/about><br>
* Updated the top level domain list utilized by the Link & Ad Blocker, now version 2021031101 (Updated Fri Mar 12)<br>
* You can now use "{dont\_notify}" in Chat Executor set-as nodes to not send any admin notifier message when matched (if admin notifications are enabled for the Chat Executor)<br>
* You can now use "{dont\_log}" in Chat Executor set-as nodes to not log anything the when the entry is triggered (if logging is enabled for the Chat Executor)<br>
* Various code improvements and optimizations across the plugin

### Fixes

* Fixed the plugin taking an increasingly longer amount of time to reload when reloading within similar timeframes. This issue was due to a part of the cache failing to dispose of its previous instance before recache thus continued to eat a growing amount of memory. Was only noticeable when reloading over and over as GC took care of it eventually<br>
* Fixed the Link & Ad Blocker failing to block links with directories with only filter TLDS enabled
  {% endhint %}

## 4.1.6 // Link & Ad Blocker improvements & Command Spy whitelist fix

{% hint style="info" %}

### Improvements

* Coverage improvements to the Link & Ad Blocker's extra sensitivity mode<br>
* Improvements to how the Link & Ad Blocker determines what parts of extra sensitivity detections to show as the most likely content that triggered the detection<br>
* You can now negate / disable the permission node "chatsentry.basecmd" to disallow players from running the plugins base command (/chatsentry, /csentry, /kcs, /cs)

### Fixes

* Fixed the Command Spy's command whitelist not working properly
  {% endhint %}

## 4.1.5 // Chat Executor & Auto Punisher message action patch & more Word & Phrase Filter default config improvements

{% hint style="info" %}

### Improvements

* More improvements the default Word & Phrase Filter substitution intelligence charset; added "| -> L", removed "! -> I" (the ! to L translation could cloud messages ending in one or more ! and allow them to slip through the filter if the circumstances were right. Not super likely, but removed to be on the safe side)

### Fixes

* Fixed Chat Executor & Auto Punisher message (broadcast & player\_msg) actions showing before the players initial message appears in chat (if set to be sent)
  {% endhint %}

## 4.1.4 // Word & Phrase Filter default config improvements & substitution intelligence fix

{% hint style="info" %}

### Improvements

* Improved the default Word & Phrase Filter substitution intelligence charset (thanks ImFoxxy for the suggestions!) **See the default config here for the updated list:** [**https://wiki.chatsentry.xyz/files/files/module-configurations/word-and-phrase-filter.yml**](https://wiki.chatsentry.xyz/files/files/module-configurations/word-and-phrase-filter.yml)<br>
* Misc. config comment updates

### Fixes

* Fixed an issue with Word & Phrase Filter substitution intelligence characters not being translated on some messages
  {% endhint %}

## 4.1.3 // Chat Executor & Auto Punisher action fixes

{% hint style="info" %}

### Fixes

* Fixed synchronous message execution (now async) on Chat Executor execute action lists and Auto Punisher punishment action lists (before this, messages sometimes sent out of order when there was multiple message actions defined)
  {% endhint %}

## 4.1.2 // Violation content serialization fix & minor changes

{% hint style="info" %}

### Changes

* Small config comment modifications and updates to accurately reflect the plugins abilities<br>
* The default anti join flood allowed joins per minute value has been increased to 12

### Fixes

* All blocked content is now force encoded in UTF-8 to fix serialization of particular characters when being written to the violation log file
  {% endhint %}

## 4.1.1 // Experimental link identifier improvements

{% hint style="info" %}

### Changes & Improvements

* Improvements to the new experimental url identifier; significantly lowers false positive chances<br>
* The Link & Ad Blocker's extra-sensitivity mode is no longer enabled by default
  {% endhint %}

## 4.1.0 // New experimental link identifier able to detect links in any language and LAAB fix

{% hint style="info" %}

### Changes & Improvements

* Introduced a new experimental & improved url identifier that notably is able to detect links from any language instead of just English. Enabled by default via the new "experimental-url-identifier" true/false option in the config file. This option applies to any modules or processes that try to identify urls from text (note that some modules that are not mainly based around urls still may process them). If you experience new kinds of false positives after this update with this option on, please report them (and optionally switch back to the stable identifier by setting "experimental-url-identifier" to false)

### Fixes

* Fixed the Link & Ad Blocker on extra-sensitivity mode detecting messages with "..." in them, such as "some phrase...another phrase" or alike
  {% endhint %}

## 4.0.5 // Various Word & Phrase Filter, cleanlogs, and gendebug improvements

{% hint style="info" %}

### Changes & Improvements

* Added a Word & Phrase Filter startup check that aims to skip loading invalid blocked entries, ex. blank or just a modifier ("exact::"). Previously these invalid entries would be loaded and caused the filter to act unexpectedly.<br>
* Various cleanlogs message improvements. Ex. if you request to clean all logs older than 1 day, it will now show "older than 1 day" instead of "older than 1 days".

### Fixes

* Fixed cleanlogs showing logs to clean even after they've been erased (this issue was merely visual)<br>
* Fixed various issues with the cleanlogs command displaying outdated / out of sync info<br>
* Fixed a typo in gendebug output<br>
* Fixed various configurations failing to remove their comments from gendebug output
  {% endhint %}

## 4.0.4 // Misc. fixes & improvements

{% hint style="info" %}

### Changes & Improvements

* Improvements & modifications to how context prediction interacts with the Word & Phrase Filter<br>
* More misc. hard coded message changes

### Fixes

* Fixed the Word & Phrase Filter's whitelist only working if the input was in lowercase<br>
* Fixed string to big int validation working improperly in relation to various modules under some circumstances<br>
* Fixed potential NPE under some circumstances when various modules tried validate certain words as a number
  {% endhint %}

## 4.0.3 // Mini message updates

{% hint style="info" %}

### Changes

* Improved and modified various outdated hard-coded messages
* Fixed a typo in kcs resources output
  {% endhint %}

## 4.0.2 // More LAAB patches

{% hint style="info" %}

### Patches

* Fixed the Link & Ad Blocker under some circumstances displaying the wrong part of the message that was detected when the message also contained a numeric value or when using ignore-handles<br>
* Fixed the Link & Ad Blocker failing to perform all of its checks under some circumstances<br>
* Fixed the Link & Ad Blocker with only filter top level domains enabled failing to detect valid links with a prefix (www/http/https)<br>
* Fixed the Link & Ad Blocker processing subdomains incorrectly with only filter top level domains enabled
  {% endhint %}

## 4.0.1 // LAAB patches and gendebug improvements

{% hint style="info" %}

### **Patches**

* Fixed the Link & Ad Blocker throwing errors with certain messages<br>
* Fixed the Link & Ad Blocker detecting "-.-" and "?.?" faces on extra sensitivity mode

### Other

* Modifications and improvements to /kcs gendebug output<br>
* Added /kcs env output to /kcs gendebug output<br>
* Fixed a typo in /kcs env output
  {% endhint %}

## 4.0.0 // All around major improvements, fixes, and optimizations&#x20;

{% hint style="info" %}

### Changes & Improvements

* Mass code restructuring, improvements, and optimizations<br>
* Added a new 'only-filter-top-level-domains' option to the Link & Ad Blocker module that when enabled (is by default), the plugin will only block roughly 1,500 of the most widely used (TLD) domains (like .com, .net, .org, etc). Keeping this on can substantially decrease false positive detections and will still effectively block advertising - however the downside is that uncommon, more suspicious links are unlikely to be detected. Only turn this off if you're worried about players writing more likely to be malicious links and are willing to sacrifice the decreased false positive rates for better coverage<br>
* Significant intelligence improvements to the Link & Ad Blocker module, large amounts of its code has been reworked and improved<br>
* The Link & Ad Blocker no longer detects invalid links such as "website.e" or "website./"<br>
* Adjustments to the Link & Ad Blocker's extra sensitivity mode<br>
* Improved the Link & Ad Blocker's extra sensitivity mode detection outputs in block messages. The plugin will now try to display the section of the message that was blocked instead of always showing the entire message as blocked<br>
* Other misc. improvements to the Link & Ad Blocker<br>
* Significant optimizations to the plugins permissions handler<br>
* Improved & optimized join related checks<br>
* The plugin now will force the server to register module bypass permissions as children of the bypass all permission instead of relying entirely on code to process inheritance<br>
* If one of the words under the "corrections" list in the Auto Grammar on the left side is typed in all caps by the player, the right side translation will be converted to uppercase as well<br>
* Default configuration improvements to almost all configs<br>
* Added a new /kcs environment command that reports important system information and whether it's compatible / meets the minimum requirements with your version of ChatSentry<br>
* Added missing command aliases in /kcs help output<br>
* Improved & modified various default lang.yml block messages<br>
* Major improvements and optimizations to the Anti Command Prefix module, only processes the base command prefix itself now instead of the entire command

### Fixes

* Fixed module negated bypass permissions not being respected by the plugin when the player also had the bypass all permission<br>
* Fixed toggled chat not respecting negated exemption permission when the player also had the bypass all permission<br>
* Fixed cleared chat not respecting negated exemption permission when the player also had the bypass all permission<br>
* Fixed the Auto Punisher not respecting negated exemption permission when the player also had the bypass all permission<br>
* Fixed manual warnings not respecting negated exemption permission when the player also had the bypass all permission<br>
* Fixed potential NPE when various modules tried validate certain characters as a number<br>
* Fixed potential NPE related to the anvil processor<br>
* Fixed the Anti Command Prefix module having issues when there was additional :'s in commands<br>
* Fixed the Link & Ad Blocker falsely detecting common faces such as "o.o"<br>
* Fixed the Link & Ad Blocker falsely detecting common file name extensions such as "example.txt" or "example.exe"<br>
* Fixed the Link & Ad Blocker under some circumstances displaying the wrong part of the message that was detected<br>
* Fixed the Link & Ad Blocker failing to detect blocked links when an acronym was also present in the message<br>
* Fixed the Link & Ad Blocker failing to detect blocked links when a number with decimals was also present in the message<br>
* Fixed the Link & Ad Blocker logging the modified version of blocked messages and not the original
  {% endhint %}


# v3 Changelog

## 3.5.1 // Highly recommended stability update: bypass permissions fix, CE fixes, and more

{% hint style="info" %}

### **Patches**

* Fixed module bypass and exemption permissions not being respected by the plugin<br>
* Fixed Chat Executor warnings failing to execute if enabled<br>
* Fixed Chat Executor logging violation type mismatch<br>
* Fixed some Chat Executor entries using {text} causing issues with particular match strings<br>
* Fixed some Chat Executor entries using {block} causing issues with sending unrelated messages and commands<br>
* Updated an outdated comment in the Anti Command Prefix config file<br>
* Any dashes in Chat Executor flags are now underscores for consistency with action and placeholder formats, make sure you update any {only-chat}s to {only\_chat}, and so forth<br>
* Modified various default config examples for the Chat Executor<br>
* Fixed the Unicode Remover not working in global chat with compatibility mode off<br>
* Optimized related to the Anti Statue Spambot module
  {% endhint %}

## 3.5.0 // Major new abilities for the Chat Executor

{% hint style="info" %}

### **Changes & Improvements**

* This update adds major improvements to the Chat Executor. It's highly recommended to regenerate your chat-executor config or take a look at <https://wiki.chatsentry.xyz/in-depth-chat-executor-guide-and-entry-examples> to see some of its new abilities!<br>
* In Chat Executor actions, you can now use parts of the players message with:<br>
  * "{arg}" to get the word/argument of the players message (starting from 0): ex "{arg1}" in "FirstWord SecondWord ThirdWord" is "FirstWord", "{arg2}" is "SecondWord", etc.<br>
  * "{multiargs}" to get all the arguments/words after a particular argument/word. Ex "{multiargs2}" of "FirstWord SecondWord ThirdWord FourthWord" is "ThirdWord FourthWord"

You can use multiple {arg} and {multiarg} placeholders in actions. If the requested argument/word is not present, it will simply be blank.

* Renamed the set-as nodes' "{BLOCK}" option to "{block}" in the Chat Executor<br>
* Renamed the set-as nodes' "{DONT\_MODIFY}" option to "{dont-modify}" in the Chat Executor<br>
* You can now prefix Chat Executor match: nodes with "{regex}" to set the match type as regex<br>
* You can now prefix Chat Executor match: nodes with "{text}" to set the match type as plain text<br>
* Using none of the above prefixes means plain text will be defaulted to<br>
* You can additionally prefix Chat Executor match: nodes with "{only-chat}" to set the match to only apply to global chat and not commands<br>
* You can additionally prefix Chat Executor match: nodes with "{only-commands}" to set the match to only apply to commands and not chat<br>
* Using none of the above prefixes means both global chat and commands be defaulted to<br>
* Fixed an issue with metrics related to the Chat Executor
  {% endhint %}

## 3.4.1 // Link & Ad Blocker intelligence improvements & Chat Executor patch

{% hint style="info" %}

### Patches

* Significantly improved Link & Ad Blocker detection logic; more fine tuned and intelligent<br>
* The Link & Ad Blocker will no longer falsely detects most invalid domains such as "chatsentry.c" when using context prediction<br>
* The Link & Ad Blocker will no longer falsely detects common file names as links (ex. "chatsentry.jar") when using context prediction<br>
* Fixed Chat Executor notifications and logging not working on entries with '{DONT\_MODIFY}' set
  {% endhint %}

## 3.4.0 // New Chat Executor module, major code improvements, negated node recognition, and more

{% hint style="info" %}

### Changes & Improvements

* Major code improvements & optimizations across lots of components of the plugin<br>
* Fixed the unicode remover not respecting compatibility mode on signs<br>
* Added a new "{player\_cmd}:" execution type for the Auto Punisher to be used under punishment actions to execute a command as the violator player<br>
* The Chat Modifier module has been significantly revamped and renamed to the Chat Executor module. Old chat-modifier configs will be kept for reference for transferring to the new chat-executor config.<br>
* Major reconstruction to Chat Modifier / Chat Executor entry formats: "message:" nodes are now "execute:" lists that can contain the below action types to perform different actions<br>
* Added new "{player\_msg}:", "{console\_cmd}:", "{player\_cmd}:", and "{broadcast}:" action types to be used under new Chat Modifier / Chat Executor "execute:" lists<br>
* Renamed the set-as nodes' "{NONE}" option to "{BLOCK}" in the Chat Modifier / Chat Executor; it still works the same internally and blocks the message from being sent<br>
* Added a new set-as node "{DONT\_MODIFY}" option for the Chat Modifier / Chat Executor that will execute the actions on the execute list, but not modify the message at all<br>
* Restructured permission checks for all modules & restrictions to check permissions on all players in the case they have a negated / disabled node for a module to apply to them, despite having the bypass all permission. Useful if you want a group/player to bypass all modules/checks except select ones<br>
* Added an option in the config to disable the functionality of particular module and restrictions' bypass permissions and force modules to apply themselves to players even with bypass permissions or op. It's recommended you do this per-player/group with permissions by simply negating/disabling the bypass permission for modules/restrictions you'd like to apply to them if they have the bypass all permission. However, this option is available as a hard override. This option is also useful for testing purposes if you don't want to have to deop yourself to test a module or restriction<br>
* Added new & modified some existing comments in the Auto Punisher config<br>
* Added a check to skip trying to load Chat Executor entries if the entry numbering is invalid<br>
* Updated various contexts with Chat Modifier to Chat Executor internally and externally<br>
* Various modifications and additions to startup console messages<br>
* Various modifications to metrics
  {% endhint %}

## 3.3.5 // WAPF Substitution intelligence & Chat Modifier patches&#x20;

{% hint style="info" %}

### Patches

* Fixed the Word & Phrase Filter's substitution intelligence option in some cases invalidating messages that match the block list and should be blocked\
  \\

* Fixed the Chat Modifier falsely detecting messages containing colorcodes on some entries
  {% endhint %}

## 3.3.4 // Context prediction, module intelligence improvements, bug fixes, and more &#x20;

{% hint style="info" %}

### Changes & Improvements

* \[IN BETA] The main configuration file has a new 'context-prediction' option. Context prediction aims to increase positive detections and decrease false positive detections through acting as a safenet for supported modules with sophisticated logic that dynamically adjusts thresholds and options real-time to react more precisely based on predicted context of messages. Adjustments are temporary & unique to messages; they do not permanently change any config options.<br>
* Significantly improved the Word & Phrase Filter's substitution intelligence logic<br>
* Made the Word & Phrase Filter's substitution intelligence character to character set modifiable to add support for more languages and give more potential for customization<br>
* Fixed the Word & Phrase Filter failing to detect (sufficiently long) blocked numbers<br>
* Misc. improvements and updates to metrics<br>
* Potentially fixed a NPE related to sign processing<br>
* Potentially fixed a NPE related to anvil processing<br>
* The Link & Ad Blocker no longer falsely detects acronyms<br>
* Misc. intelligence improvements to the Link & Ad Blocker
  {% endhint %}

## 3.3.3 // All-around improvements & registration fixes

{% hint style="info" %}

### Changes & Improvements

* Added a whitelisted commands list to the Word & Phrase Filter that allows commands (including all arguments) to be under all circumstances not processed by the module<br>
* Improved segments of legacy configuration updation code<br>
* Misc. other code optimizations and improvements<br>
* Misc. configuration comment improvements<br>
* Misc. console message improvements and changes<br>
* Misc. improvements and updates to metrics<br>
* Added new metric tables for new and renamed options introduced in recent versions<br>
* Updated the plugins description value in correlation with the plugin page & wiki in plugin.yml<br>
* Updated the info commands output in correlation with new and renamed options introduced in recent versions<br>
* Updated any notices in configs that the feature requires enable-\<context>-listener (now process-\<context>) in the main config to be enabled<br>
* Added missing context comments in the Unicode Remover's config file<br>
* Fixed capitalization of some module names in the info commands output

### Fixes

* Fixed "process-\<context>" options in the main configuration failing to register, thus always defaulting to true<br>
* Fixed various issues with the command spy module failing to register certain configuration options<br>
* Fixed registered server commands failing to load on plugin startup (which also caused any processes that relied on them to not work properly)
  {% endhint %}

## 3.3.2 // Ability to disable the vanilla spam kick & configuration improvements

{% hint style="info" %}

### Changes

* Added an option to disable Minecraft's built in "Kicked for spamming" / "disconnect.spam" kick. There is no way to disable these kicks in the server configuration, however with a workaround ChatSentry can override it and prevent it from occurring. It's recommended to keep this enabled to give the auto punisher full punishment priority. This new option is enabled by default and can be found in the main configuration file.<br>
* Renamed "enable-context-listener" config options to "process-context". Old preferences are automatically transferred by the plugin.
  {% endhint %}

## 3.3.1 // Anvil listener & unicode remover patches from 3.3.0

{% hint style="info" %}

### Patches

* Fixed the unicode remover under some circumstances falsely detecting text that is not unicode<br>
* Fixed the unicode remover conflicting with the new anvil listener when adding enchantments to items<br>
* Fixed the unicode remover failing to detect unicode on items being renamed in anvils under some circumstances with compatibility mode disabled<br>
* Fixed a potential NPE related to the new anvil listener integrated with the Word & Phrase Filter, Link & Ad Blocker, and Unicode Remover
  {% endhint %}

## 3.3.0 // Big update: module support to filter through signs, anvils, and books, cleanlogs command, bug fixes & more

{% hint style="info" %}

### Update Highlights

* The Word & Phrase Filter, Link & Ad Blocker, and the Unicode Remover modules can now optionally additionally filter through signs, items renamed in anvils, and text written in books for complete complete protection across all contexts of messages! (enabled by default, disable particular contexts in config.yml)<br>
* New /kcs cleanlogs command! (requires new permission 'chatsentry.cleanlogs'). You can now easily delete old violation log data older than X days (or all violations) to tidy up large amounts of logged violations.

### Other improvements & changes

* Changed the default trigger messages for the Word & Phrase Filter, Link & Ad Blocker, and the Unicode Remover to make sense in the case it is triggered via a different context than chat<br>
* Improved a bunch of other default lang messages<br>
* Improved the ignore-detected-registered-commands options logic for the Word & Phrase Filter<br>
* Changed the default (and recommended) block-similarity-threshold in the Word & Phrase Filter to 0.84<br>
* Improved various configuration comments for clarity<br>
* Added new listener options in kcs infos output<br>
* Updated the dead link for the lookup command's in-depth usage in the lookup commands usage message<br>
* Changed various console messages for improved clarity<br>
* Fixed a typo in a hard coded kcs lookup message<br>
* Modified various hard coded messages related to the lookup command<br>
* Added the new /kcs cleanlogs command to /kcs helps output

### Bug fixes

* Fixed an issue that caused the Word & Phrase Filter to fail to filter the contents of commands with the command listener enabled<br>
* Fixed the potential for particular whitelisted entries conflicting with substitution intelligence in the Word & Phrase Filter<br>
* Fixed the potential for particular whitelisted entries conflicting with blocked entries in the Word & Phrase Filter<br>
* Fixed the low potential of a NPE error occuring when particular command arguments do not meet the syntax
  {% endhint %}

## 3.2.0 // Major configuration improvements and other misc. improvements

{% hint style="info" %}

### Changes in this build

* Improved lots of module configuration comments for better readability and consistency across the plugins files
  * Rewrote almost all module descriptions in config.yml
  * Reorganized module toggles in config.yml to be consistently ordered with the documentation
  * Synchronized repeated comments to be consistent across all files
  * Rewrote portions of various files <br>
* Improved default affected-commands lists in:
  * anti-chat-flood.yml
  * cap-limiter.yml
  * anti-chat-flood.yml <br>
* Added an affected-commands list to the auto grammar module to fix command incompatibilities <br>
* Fixed list indentation across applicable module configurations <br>
* Improved default commandspy-command-whitelist list in command-spy.yml <br>
* Updated base command version tag logic <br>
* Updated the beta console notification message with the new wiki domain <br>
* Changed the disable-join-flood-check-on-startup option duration from 1 min 30 secs to 2 mins 30 secs <br>
* Modified the anti statue spambots default join-command-whitelist list
  {% endhint %}

## 3.1.1 // Unicode remover intelligence improvements

{% hint style="info" %}

### Changes in this build

* Improved the unicode removers dataset for alphanumeric lookalike unicode. Virtually all alphanumeric lookalike unicode supported by MC chat (and used by clients) is now able to be detected and blocked by the module.
  {% endhint %}

## 3.1.0 // Module support to process non English characters, major WAPF optimizations and misc. related fixess

{% hint style="info" %}

### Changes in this build

* Virtually all modules now support processing any languages, whether the word or phrase filter, anti chat flood, etc!<br>
* Significant optimizations to the word and phrase filter module <br>
* Fixed various issues with the word and phrase filter failing to correctly process certain characters<br>
* Fixed whitelisted word entries in the word and phrase filter with more than one word potentially not being registered properly under some instances
  {% endhint %}

## 3.0.6 // LAAB false positive fixes & misc. code improvements

{% hint style="info" %}

### Changes in this build

* Improved various bits of plugin logic for increased intelligence and or efficiency <br>
* Fixed the LAAB module blocking whitelisted domains in emails <br>
* Fixed the LAAB module falsely detecting very exact numbers (ex. 1.123456789101112131415) <br>
* Fixed an issue with a utility method commonly used in command logic that caused the potential to (in rare circumstances) work improperly with particular command arguments
  {% endhint %}

## 3.0.5 // Invalid lang key output with cswarning command fix, gendebug improvements, config improvements, and more

{% hint style="info" %}

### Changes in this build

* Fixed cswarning related messages trying to send an invalid lang key from lang.yml <br>
* Fixed config comments appearing in some sections of csdebug output <br>
* Modified cs gendebug info outputs and various related console messages <br>
* Heavily modified comments in the word and phrase filter config, guide moved to the wiki and made more in-depth <br>
* Updated link in help page 2 output to new domain <br>
* Updated old wiki domain links in various configuration files to the new domain <br>
* Updated old wiki domain links in the changelog file to the new domain <br>
* Modified some configuration file comments for better clarity in various files <br>
* Added a new default example to the chat modifier
  {% endhint %}

## 3.0.4 // Tiny change to where metric collection preferences are modified

{% hint style="info" %}

### Changes in this build

* Removed the collect-anonymized-metrics option from the config file; if you wish to disable metrics, use the bStats global config file
  {% endhint %}

## 3.0.3 // Config comment improvements, internal message improvements, & metric bug fix

{% hint style="info" %}

### Update Summary

This update adds some improvements to various config file comments, changes some hard coded messages, and fixes an issue with metrics.

### Changes in this build

* Fixed the currently running version comment in config.yml showing the wrong plugin version
* Removed and or modified various comments in some configuration files for improved clarity
* Modified the join update notification message
* Modified the running latest version console notification message
* Fixed an issue which prevented metrics from sending when the option was enabled
  {% endhint %}

## 3.0.2 // Default & internal message modifications and other improvements

{% hint style="info" %}

### Update Summary

This update adds improvements to many default plugin messages found in lang.yml as well as some internal hard coded messages and some other misc. improvements. If you wish to use the updated modifiable messages, delete your lang.yml file & run '/chatsentry reload' to generate a fresh lang file.

### Changes in this build

* Modified a lot of default messages in lang.yml for better clarity and appearance
* Updated '/chatsentry resources' output with the new wiki and plugin site links
* Updated the update notification message with the new plugin update link
* Updated plugin.yml plugin website value
* Updated plugin.yml plugin description value
* Misc. other internal message modifications
* Better organized some of the lang.yml structure for consistency throughout the file
* Fixed a problem with metric collection
* Improvements to the plugins ability to detect and fail safe in the case there is corrupt / externally modified bytecode
  {% endhint %}

## 3.0.1 // Less performance toll with lots of internal optimizations & improvements

{% hint style="info" %}

### Update Summary

ChatSentry is speedier than ever! This update adds tons of all-around optimizations and internal code improvements, including but not limited to the core data cacher and sub cachers in all modules, module data processors, the violation indexing engine, and more. Though the performance toll was already low, you can now expect even less of a toll from the plugin. You may also notice faster plugin reloads and startups.

### Changes in this build

* Code improvements and optimizations to almost every internal class
* Improved the overall file structure of the plugin
* Updated plugin.yml description value

### Bug fixes

* &#x20;Fixed the (very small) chance of a NPE error on plugin startup
  {% endhint %}

## 3.0.0 // The most polished and awesome version of ChatSentry yet!

{% hint style="info" %}

### About this release

Update 3.0.0 introduces **major internal reworks and overhauls to how messages are dealt with and sent to users** along with **a large amount of other various improvements & optimizations**.

This version is fully compatible with previous versions\*: the plugins auto updater will take care of moving your current messages to the new file without data loss.\
\
**\* legacy update notice:** the plugin can no longer version jump on the same config files and folder from versions before 1.1.2 to this version. If you're running a version before 1.1.2, update to 2.7.1, then to this version to prevent config data loss. Or better, do a clean reinstall of the plugin.

ChatSentry's terms of use have been updated; by continuing to use the plugin you confirm you accept them and will abide by them, effective the date of this release. The updated terms can be found here: <https://kixmc.gitbook.io/kixmcs-product-resources/>

**Fun fact: though this update doesn't seem that big, it took over 30 hours of development work! (psst, please consider leaving a review as a thank you, it helps a lot!)**

### Changes in this build

* Major changes & optimizations to plugin in-game message handler. All modifiable messages now go through a custom message handler engine instead of individually accessing the message file, allowing for a lot more flexibility and customization.<br>
* All previously modifiable messages (ex. block messages from modules) have been moved to the new lang.yml file to create a master language file where all modifiable strings can be found and edited. This makes it a ton easier to edit lots of the plugins messages quickly. The plugins auto updater will take care of moving your current messages to the new file without data loss.<br>
* Whether or not the plugins prefix is appended to message strings is now individually changeable per string, instead of hard coded to some strings and not others.<br>
* Any lang string in lang.yml can now be disabled entirely by setting it to "".<br>
* Any lang string in lang.yml now supports multi-line messages with the '{NL}' placeholder.<br>
* Quality of life feature: if the message-prefix is set to "" and there are other entries starting with "{PREFIX} ", the space after the prefix will be automatically removed to prevent a gap at the start of the message (this is to allow you to keep '{PREFIX} ' on lang entries seamlessly if the message-prefix is disabled).<br>
* The plugin now collects misc. anonymized data about your server & your use of ChatSentry to help improve the plugin. Data collected includes but is not limited to: whether or not you use particular plugin features (ex. the modules you have enabled), server version, java version, server region, and so forth. ChatSentry never collects data that could identify anybody or your server. All data gets sent and stored anonymously. You can disable the collection of metrics any time by turning metric collection off in the config.yml file.<br>
* Improvements to event handling and registration system.<br>
* Optimized the fetching of embedded commonly needed strings.<br>
* Major improvements to tons of core code and overall project structure.<br>
* Deleted misc-lang.yml.<br>
* Improvements to the legacy data updaters algorithms.<br>
* Deleted large amounts of legacy code related & other code unrelated to the new messaging system.<br>
* Further optimized various portions of remaining old code related to messaging (after the new system was integrated).<br>
* Modified various files comments for better clarity.<br>
* Tweaked various hard coded plugin messages sent in-game for better clarity.<br>
* Modified some existing console messages sent by the plugin.<br>
* Added some new console messages sent by the plugin under particular circumstances.<br>
* Turned a few previously modifiable messages into hard coded messages as editing them didn't make sense.<br>
* Added the plugins tagline to the console startup message.<br>
* Added the Chat Modifier module to /kcs info's output.<br>
* Added the Auto Grammar module to /kcs info's output.<br>
* Added the update checker to /kcs info's output.<br>
* Organized /kcs info's output and added pages.<br>
* Removed the word replacer from /kcs info's output.<br>
* Corrected the command bracket syntax on a few command usage outputs.<br>
* Updated /kcs help pages with command aliases for the pardononemanual, pardonallmanual, clearmodulewarnings, toggleviolationnotifs, and togglecommanyspy subcommands.<br>
* The Word and Phrase Filter module's default similarity threshold is now set to 0.83 on fresh installations of the plugin.<br>
* The Anti Chat Flood module's default repeated-character-limit is now set to 12 on fresh installations of the plugin.

### Bug fixes

* The tab completer no longer tries to auto complete 'clearchat', 'cc', 'togglechat', and 'tglc' after the plugins base command (which is an invalid command as these commands were made standalone a while back and are no longer ran with the plugins command in front of them)
  {% endhint %}


# v2 Changelog

## 2.7.1 // Minor changes & bug fixes

{% hint style="info" %}

### Changes

* The plugins message prefix is no longer automatically appended to violation notification messages in the console.<br>
* Corrected a typo in a hard coded console message sent by the auto punisher if auto warning expiry was set to never.<br>
* The link and ad blockers extra sensitivity mode is now enabled by default on fresh installations of the plugin.<br>
* The spam blockers block-repeated-message-similarity-threshold value is now set to 0.82 on fresh installations of the plugin.<br>
* The chat cooldowns chat-cooldown-in-ticks value is now set to 160 on fresh installations of the plugin.

### Fixes

* Fixed "{console\_cmd}: cswarning\[...]" command entries under auto punisher command sets not running.<br>
* Fixed the admin notifier module not enabling until a reboot even if /kcs reload was ran.
  {% endhint %}

## 2.7.0 // New Intelligent Chat Modifier module, new Auto Grammar module,  & performance optimizations

{% hint style="info" %}

### Additions

* Introducing the new Intelligent Chat Modifier module. The ICM module modifies or blocks chat messages based on entries using simple or complex matching techniques. You can use regular expressions to target specific parts of messages and replace the matches with new content, or block the message entirely with a custom block message. This module is incredibly useful for creating custom chat rules that other modules aren't as equip to handle, such as easily detecting numerous variations of messages. Ex. easily detecting "Can I have staff?" or "I would like admin" as the same, blocking it, and sending the player a message that staff applications are not open. This module has all the functionality of the old word replacer module plus ample more abilities; with this, the ICM module has taken the word replacer modules place. This module supports the admin notifier and auto punisher modules.<br>
* Introducing the Auto Grammar module. The AG module attempts to convert players' messages to proper grammar and correct typos based on a preset list of common typos. You can fine tune the module to 1. automatically capitalize the first letter of the first word after a new sentence, 2. automatically add periods to the end of applicable messages, and 3. automatically fix common typos (ex. changing youre to you're). For obvious reasons, this module does not support admin notifications or auto punishments via the AP module.<br>
* Note: the wiki has been updated with the new bypass permissions and other information about the above two new modules.

### Changes

* Removed the word replacer module. The config file will not be deleted in case you need to get anything from it. When you no longer need it you can safely delete it.<br>
* Improved various internal code for maximum plugin performance.<br>
* Removed some no longer in use code for supporting legacy plugin updating from very old plugin versions.
  {% endhint %}

## 2.6.0 // Optional automatic subdomain whitelisting, LAAB intelligence overhaul, & large internal code optimizations and improvements

{% hint style="info" %}

### Additions

* The link and ad blocker module now supports automatic subdomain whitelisting. If you wish to whitelist all subdomains of a domain, you can now do so with "**\******.***"; ex. "**\*.google.com**" will permit all subdomains of Google ("mail.google.com", "maps.google.com", etc.)<br>
* Significantly improved LAAB intelligence, you can expect a notable decrease of false positive detections from this module now.<br>
* Various internal optimizations and improvements to the LAAB detection algorithms.<br>
* Improved lots of various internal code relating to the majority of the plugins modules.

### Changes

* "\<unable to fetch>" will be displayed in place of where the newest plugin version should be in the update notification message in the case the plugin is unable to fetch it from Spigots API.<br>
* Changed various comments and the default link whitelist for the link and ad blocker config file.<br>
* Changed some hard coded messages sent from the plugin for better readability and clarity.

### Fixes

* **FIXED:** The LAAB module detects and blocks long numeric values such as "0.000000000000000000000000"
  {% endhint %}

## 2.5.2 // Major SCU improvements, Misc. smaller improvements, & NPE when jumping versions fix

{% hint style="info" %}

### Additions

* Smart config updater improvements add support for updation of more complex yml structures (will be especially useful in future builds).<br>
* Misc. internal improvements to the auto punisher.<br>
* Various improvements to other misc. bits of code.

### Changes

* Modified comments in all the files within the storage folder for better clarity and readability.

### Fixes

* Fixed a potential one-time anti parrot related NPE error when jumping versions from a legacy version.
  {% endhint %}

## 2.5.1 // Update notifier fix & improvements, better LAAB algorithms, & various other improvements

{% hint style="info" %}

### Additions

* Improved various portions of the link and ad blockers main detection algorithms.<br>
* Improved various portions of the link and ad blockers extra-sensitivity mode algorithms.

### Changes

* Various modifications and improvements to the automatic update checking system. Spigot api calls have been substantially reduced.<br>
* The stacktrace will no longer be shown if ChatSentry fails to verify the plugins version from Spigot - only the console notification message.

### Fixes

* Fixed the outdated version notification message sending in console more than once; it is now only sent once on startup.<br>
* Fixed the link and ad blocker blocking numeric values starting with or ending in various punctuation marks.
  {% endhint %}

## 2.5.0 // Update checker server crash fix

{% hint style="info" %}

### Fixes

* Fixed an issue regarding the update checker that would crash the server due to buildup of outdated schedulers if the server had been online for about a week or more straight without rebooting.
  {% endhint %}

## 2.4.9 // 2.4.8 Message bug hotfix

{% hint style="info" %}

### Hotfixes

* Fixed an issue where violation notification messages display as "This node does not support empty values!" instead of their configured values.
  {% endhint %}

## 2.4.8 // Numerous code improvements and optimizations, reworked permission handler, lower laab false positives, & more

{% hint style="info" %}

### Additions

* Added a new permission node "chatsentry.updatenotify". Players will require this permission or operator status to be notified when new plugin updates are available (if update notifications are enabled).

### Improvements

* Misc. code optimizations to almost all internal classes.<br>
* Reworked permission handler for less checks, increased optimization and efficiency.<br>
* Introduced new logic improvements to the link and ad blockers automatic false positive recognition abilities.<br>
* Lookalike link text like "x.16.4", "10.5mil", etc. are now less likely be detected by the link and ad blocker.

### Changes

* Changed the "Searching for " message to "Indexing " in the kcs lookup command output.<br>
* Changed the default no-permission value to "You are not permitted to do that." in misc-lang.yml<br>
* If a config message node does not support being empty and is attempted to be sent by the plugin, "This node does not support empty values!" will be sent instead of a console null pointer error.<br>
* "Permissions for commands can be found here: " is no longer shown in /kcs help if no other commands were shown due to the sender not having any of the required permissions.<br>
* Tidied help command spacing.<br>
* '/kcs author' is now shown in the place where '/kcs resources' used to be in the '/kcs output'. '/kcs resources' has been moved to the first part of '/kcs help' (page 1).<br>
* Modified the plugin description line in plugin.yml

### Fixes

* Fixed "clearmodulewarnings" / "cmw" not tab completing after "/cswarnings" even when the sender has proper permission.<br>
* Fixed "clearchat" / "cc" not tab completing even when the sender has proper permission.
  {% endhint %}

## 2.3.7 // Global link recognition improvements, code enhancements, new anti chat flood ignore-long-links option, & more

{% hint style="info" %}

### Additions

* The plugin is now using a globally improved link detection engine for any operations involving recognition of web links.<br>
* Added a new "ignore-long-links" option to the anti chat flood module that determines whether web links longer than the maximum "word" length limit should be ignored.<br>
* Reworked considerable portions of the anti chat flood logic for compatibility with the new ignore-long-links option and improved optimization.<br>
* Misc. logic and structure improvements to various portions of code, especially to final variables.

### Fixes

* Fixed custom anti chat flood limits only updating after a server restart/reload.
  {% endhint %}

## 2.2.6 // Major module data processor & executor optimizations, toggle chat bug fix & more

{% hint style="info" %}

### Additions

* Reworked large portions of the main module data processor & executor for increased efficiency and optimization.<br>
* Added a join notification message visible to all players that can be changed or disabled in the misc lang file.

### Changes

* Corrected a typo in the main config file

### Fixes

* Fixed a console error printing when chat is disabled and a non-authorized player attempts to speak
  {% endhint %}

## 2.2.5 // Anti parrot hotfixes

{% hint style="info" %}

### Fixes

* Fixed a one-time startup error when updating from previous versions to 2.2.4<br>
* Fixed the ignore-short setting in the anti parrot config applying itself to the wrong internal setting
  {% endhint %}

## 2.2.4 // Immense improvements to the cap limiter & anti parrot modules

{% hint style="info" %}

### Main additions / changes

* The cap limiter now uses a more advanced and smarter cap detection algorithm that offers more flexibility and improved accuracy with its detections. The new algorithm comes with 2 (1 renamed, 1 added) new options available in the cap limiter configuration file: you can now set the maximum repeated caps in a row limit before the filter is triggered, and a master cap limit which is a hard limit of how many caps any message can contain.<br>
* The anti parrot module now uses a more advanced and smarter parroting detection algorithm that offers an incredible increase in it's accuracy. The new algorithm comes with 3 (3 added) new options available in the anti parrot configuration file: you can now automatically ignore short messages such as "lol" or "xD" with the new ignore-short option, preventing false positives massively. If you'd like to get more specific or whitelist longer phrases, you can also now define whitelisted common phrases that the anti parrot module will ignore - which allows them to be said by multiple players within a short time frame. With this new whitelist list, you can additionally define a similarity threshold value that determines how similar chat messages must be to a message on the whitelist in order to be considered also whitelisted.<br>
* Logic optimizations to the spam blocker & anti parrot modules.

### Smaller Changes

* Changed the default recommended phrase whitelist similarity threshold value to 0.65.<br>
* Changed a map using player instances to uuids to prevent memory leaks.<br>
* Misc. config comment changes to the spam blocker.<br>
* Fixed a typo in the anti chat flood config.<br>
* Fixed a typo in the spam blocker config.<br>
* Misc. config comment and default value changes to the command spy config.<br>
* Misc. config comment modifications to the main config file.

### Updating notes

* After updating, the old cap limiter limit option will be reset to its default and recommended value. You may want to review it and change it along with its partner maximum limit setting to what works best for your server.
  {% endhint %}

## 2.1.3 // NPE fix & minor default config changes

{% hint style="info" %}

### Changes

* Changed the update notification link to go directly to the plugins updates section instead of the homepage.<br>
* Changed the default recommended chat cooldown value to 120 ticks.<br>
* Changed the default recommended allowed message sends per chat cooldown to 4.<br>
* Changed the default recommended allowed command runs per chat cooldown to 6.<br>
* Modified some comments in the word and phrase filter config.

### Fixes

* Fixed a potential NPE related to the anti chat flood module.
  {% endhint %}

## 2.1.2 // Config comment clarity improvements & spelling fixes

{% hint style="info" %}

### Changes

* Rewrote the majority of the comments in the word and phrase filter module config to be a lot clearer on what entry modifiers do and how to use them.<br>
* Fixed all grammar and spelling mistakes across all plugin files config comments.
  {% endhint %}

## 2.1.1 // Link and ad blocker false positive rate improvements & debug file generator

{% hint style="info" %}

### Additions

* Mini improvements to the link and ad blocker to further lower the chances of false positive detections.<br>
* Added a debug file generator that when executed (/kcs gendebug) compiles a file in the plugins directory containing a bunch of useful information related to ChatSentry. This is mainly a tool that kixmc might ask you to run to help provide info if you are requesting support.
  {% endhint %}

## 2.1.0 // New anti chat flood & spam blocker options, auto punisher fix, & many other improvements

{% hint style="info" %}

### Additions

* Added a custom-limits list to the anti chat flood module config that allows you to specify individual repeated char limits for particular chars/symbols. Since some characters take up less space (like "!") you can optionally allow them to be repeated additional times to reduce interferences with people being extra expressive in chat who aren't attempting to flood it<br>
* Made various improvements and optimizations to the anti chat flood detection logic and intelligence<br>
* The spam blocker now extends repeat durations the more times a player attempts to repeat a message when it's already being blocked creating a dynamic and infinitely expanding block period that will disallow spam bots trying to repeat the same messages over and over for long durations of time<br>
* Added a new 'allowed-repeats' option to the spam-blocker module that determines how many times a player can repeat any messages they said within the last repeat-cooldown-in-seconds (that is not on or similar to the phrase-whitelist) period of time before being blocked for spam. This allows players to repeat themselves, but not excessively.<br>
* Improvements to the auto punishers ability to ignore and notify console of improperly defined config entries instead of throwing huge errors and breaking.<br>
* Optimized plugin reload command handler.

### Changes

* Modified various default module settings and messages for improved out of the box compatibility<br>
* Command spy handler logic is now called after all other command checks to avoid the command spy messages being sent when a command has already been blocked by a module<br>
* Any in-game info messages sent to players reloading the plugin via /cs reload (malformed yml notifications, reload time, etc) will now also be shown in the console when reloading through the console

### Fixes

* Fixed a bug that stopped one of the auto punisher punishment actions from parsing correctly and running.

### Internal (smaller) changes

* Changed a map using player instances to uuids to prevent memory leaks
* Changed plugin.yml description
* Moved certain module checks order of execution around for consistency between chat and command blockings
* Lowered anti parrot other player repeat period by 2 seconds
* \[...lots of various embedded config changes (no actions required by you)...]
  {% endhint %}


# v1 Changelog

## 1.1.9 // Improved out of the box configs, module data processor fix, and other various improvements

{% hint style="info" %}

### Additions

* When reloading the plugin in-game, you'll hear a little success 'ding' if everything reloads properly!

### Changes

* Modified various default module settings and messages for improved out of the box compatibility.<br>
* Various code adjustments & improvements.<br>
* Updated old wiki link in lookup command usage.<br>
* Rewrote / modified various startup & reload messages sent by the plugin for improved readability and less console spam.<br>
* Fixed a console startup message that was sending twice.<br>
* Modified the update join notification message to show the latest and current version. Both the console and in-game notifications are the same now.&#x20;

### Fixes

* **FIXED:** In rare circumstances additional modules can get triggered in a domino effect when one module is triggered. This was due to how certain module checks worked in terms of modifications to the input data (some modules were still reading the old data even after it was modified). This has been fixed.
  {% endhint %}

## 1.1.8 // Unicode remover hotfix

{% hint style="info" %}

### Hotfixes

* FIXED: Unicode remover doesn't initialize even when enabled in the config.
  {% endhint %}

## 1.1.7 // Link and ad blocker improvements, more customizable block messages, code optimizations, & more

{% hint style="info" %}

### Additions

* Added new 'block-message-header' and 'block-message-footer' entries to the misc-lang file that allows you to have a header and footer sent on every block message sent by modules. Useful if you want to have neater block messages through ex. having lines at the top and bottom.<br>
* Added a new 'ignore-social-handles' option to the link and ad blocker module that allows social handles with periods in chat that would otherwise be detected as links/ips.<br>
* Added a new 'command-whitelist' list option to the link and ad blocker config that allows you to make the filter ignore checking certain commands. Added so you can disable the filters checks in commands like /msg.<br>
* The link and ad blocker no longer detects and blocks common units of measurement such as 10.32m.<br>
* The link and ad blocker no longer detects and blocks the use of placeholder value 'x' in the end of numeric values such as "1.16.x"<br>
* Cleaned and optimized various code for improved performance.

### Changes

* Changed /warn and /warnings labels to /cswarn and /cswarnings to fix compatibility with other warning plugins.<br>

  Note: For convenience & to prevent potential immediate issues after updating, the auto punisher will automatically process all '/warnings pardonallmanual' or '/warnings clearmodulewarnings' {console\_cmd} entries as '/cswarnings ' commands automatically. This feature will be removed eventually, so make sure you change all your '/warnings' command labels to '/cswarnings' in the auto punisher config by that time.<br>
* Updated the tab completer, /kcs help output, & warning & warn usage outputs with the new /cswarn & /cswarnings labels.<br>
* Added a small delay before sending the update notification message when you're running an outdated version of the plugin so it doesn't get buried in on-join chat.<br>
* Modified various hard coded console messages for improved readability.

### Fixes

* **FIXED:** The link and ad blocker allows un-whitelisted links through when a segment of a whitelisted domain is present in the disallowed link.
  {% endhint %}

## 1.1.6 // Better out-of-the-box compatibility, quality & clarity improvements, small logic and knowledge modifications, & more

{% hint style="info" %}

### Additions

* Greatly improved the preset word lists for the word and phrase filter module obtainable via the wiki: <https://kixmc.gitbook.io/chatsentry-wiki/misc-info/preset-word-lists><br>
* Improved parts of the word and phrase filters detection logic to reduce false positives and increase positive detection rates.<br>
* Improved the plugins knowledge set for substitution intelligence characters.

### Changes

* Made small configuration setting & list changes/additions to the majority of the configuration files for increased out-of-the-box compatibility.<br>
* Decreased the amount of console messages when the plugin is reloaded.<br>
* Modified some startup & reload messages for better clarity.<br>
* Fancy new changelog layout! :D

### Fixes

* ChatSentry should no longer take '/warn' & '/warning' command priority over LiteBans'. If you run LiteBans but would like to use ChatSentry's warning command, you can use /chatsentry:warn.
  {% endhint %}

## 1.1.5 // Intelligence & performance improvements, bug fixes, and more

{% hint style="info" %}

### Additions

* Intelligence improvements to the word and phrase filter module.

### Changes

* Reworked & tidied portions of the ChatSentry configuration engine for increased intelligence.
* Reworked & tidied large portions of the startup logic for increased efficiency and clarity.
* Changed various startup & reload messages for increased clarity.

### Fixes

* **FIXED:** The invalid yml detection system fails to detect invalid ymls on plugin reloads.<br>
* **FIXED:** The invalid yml detection system repeats the same error under some circumstances upon a singular plugin reload or startup.
  {% endhint %}

## 1.1.4 // Module intelligence improvements, performance improvements, & more

{% hint style="info" %}

### Additions

* Registered server commands are now cached for more effective use in various functions relating to ChatSentry hooking into commands and applying module features to them.<br>
* Added a very useful (and time saving) ignore-detected-registered-commands option to the word and phrase filter that scans for existing commands from other plugins and allows them to go through, even if they are falsely detected due to being similar to a blocked word. Keeping this on (setting enabled by default) is highly recommended as it will prevent a lot of false positives.<br>
* Improvements to the intelligence of the link and ad blocker.<br>
* When update checking is enabled, the plugin now periodically checks for updates during runtime instead of just at startup or when it's outdated.<br>
* Various console startup message modifications, changes, and additions.<br>
* Various performance improvements.
  {% endhint %}

## 1.1.3 // 1.1.2 Hotfixes

{% hint style="info" %}

### Changes

* Changed /togglechat's '/tc' alias to '/tglc' due to conflictions wth Towny's town chat (/tc) command.

### Fixes

* **FIXED:** Auto punisher configuration adds back removed default punishment sets upon reloading or restarting the plugin.<br>
* **FIXED:** On startup ChatSentry sends a console notification saying update checking is disabled even when it isn't.
  {% endhint %}

## 1.1.2 // Bug fixes & improvements

{% hint style="info" %}

### Changes

* Added the anti command prefix module to the '/an info' output.<br>
* Changed "addWarning" nodes to "enabled" in auto-punisher.yml. This rename will convert automatically & your settings will be transferred.<br>
* Added some new plugin startup messages & modified a bunch of existing messages.<br>
* Made some internal changes to how the auto punisher tries and processes punishments.<br>
* All string nodes in the config are now surrounded by double quotes instead of single quotes. This is for consistency with how string lists are newly formatted by the plugin. This change is completely automated and requires no action by you.

### Fixes

* Fixed various issues with the configuration updater failing to update the auto punisher config.<br>
* Fixed a bug where the auto punisher sometimes ran punishment actions twice.<br>
* Fixed a bug where the auto punisher sometimes ran the wrong punishment actions.
  {% endhint %}

## 1.1.1 - officially stable!

{% hint style="info" %}

### Additions

* New anti command prefix module that forces players to use non-prefixed commands to get around filters. Ex. /essentials:msg instead of /msg. The module comes with exemption lists for either specific prefixed commands or all commands with a certain prefix. When this module modifies a command/gets rid of a prefix, it will appear crossed out in the notification via the command spy module. There is also options to send a message to the player when it modifies their command. New permissions can be found on the permissions page on the plugins wiki.

### Fixes

* **FIXED:** Dead link in /kcs help command.
  {% endhint %}

### 1.1.1-BETA-08

{% hint style="info" %}

### Additions

* Added a new substitution intelligence option in the word and phrase filter config that, when enabled, makes the filter process lookalike numbers and symbols as letters to detect players substituting letters with numbers numbers to bypass the filter. Ex. @ = A, # = H, 3 = E, 5 = S, 6 = G, etc.<br>
* Significantly optimized word and phrase filter code.<br>
* Added a suppress pardons from console option in the auto punisher config that, when enabled, hides pardon messages from receiver players only if the command was triggered by the console. The point of this is so players don't see when their warnings are reset when triggered by the last punishment set under a module. You will have to manually add 'suppress-pardons-from-console: true' to your config if your config files have already generated from a previous version (only if you want to make use of this feature) until I can fix the config engine having some problems with the auto punisher file automatically updating.

### Changes

* Added some variations of verbose console messages for the auto punisher module which are used under more specific circumstances so they make more sense.

### Fixes

* **FIXED:** Word and phrase filter modifiers not registering on blocked entries.<br>
* **FIXED:** Warning command usage shows even when the sender does not have permission.<br>
* **FIXED:** Dead links in /kcs resources command.<br>
* **FIXED:** Manual punishment sets fire twice or more times after set 1 when warned.
  {% endhint %}

### 1.1.1-BETA-07

{% hint style="info" %}

### Changes

* Major code optimizations.<br>
* Discontinued the message modifier option in the word and phrase filter until further notice because it significantly lowered detection rates and caused a lot of problems.

### Fixes

* **FIXED:** Manual warnings still go through even when disabled.<br>
* **FIXED:** Modified messages become lowercase when they contain a blocked word or phrase.<br>
* **FIXED:** Violations toggled off reminder message does not send when expected.<br>
* **FIXED:** Link and ad blocker detects common faces like "o.o" as links.
  {% endhint %}

### 1.1.1-BETA-06

{% hint style="info" %}

### Changes

* Modified &/or added a few config comments from the word and phrase filter and admin notifier config for increased clarity.

### Fixes

* **FIXED:** 'exact::' and 'exactcontains::' modifiers cause console errors with the word and phrase filter module.<br>
* **FIXED:** Various issues with the word and phrase filter module throwing errors.<br>
* **FIXED:** The admin notifier only sending notify messages if the exact content is identifiable.
  {% endhint %}

### 1.1.1-BETA-05

{% hint style="info" %}

### Additions

* Further improved the word and phrase filters detection algorithms.

### Fixes

* **FIXED:** The word and phrase filter whitelist does not properly function under all circumstances.<br>
* **FIXED:** The word and phrase filters {BLOCKED\_CONTENT} placeholder does not show the entire blocked content (or entire message if non retrievable) under all circumstances, especially with phrases.<br>
* **FIXED:** The word and phrase filters modification option does not accurately modify messages.
  {% endhint %}

### 1.1.1-BETA-04

{% hint style="info" %}

### Changes

* Simplified the anti chat flood config due to some options clashing with each other.<br>
* Corrected a typo in the misc-lang file for the warned broadcast message. ("{WANRED}" -> "{WARNED}")<br>
* Reworded the warning broadcast message in misc-lang.

### Fixes

* **FIXED:** Anti chat flood modifies messages when it shouldn't.<br>
* **FIXED:** Some warn and warner placeholders do not set in the warning broadcast message.<br>
* **FIXED:** The legacy data translator/updater does not convert message entries from config.yml to the new misc-lang.yml file.<br>
* **FIXED:** Manual warnings do not work if the auto punisher is disabled.<br>
* **FIXED:** Various permission recognition issues related to the warn command and the auto punisher.
  {% endhint %}

### 1.1.1-BETA-03

{% hint style="info" %}

### Changes

* Added an isOp check to the event handlers ensure any modules are not ran on opped players.

### Additions

* Players names now show up in tab completion when typing /warn<br>
* New permission 'chatsentry.manualwarnings.exempt' to be exempt from being manually warned with /warn (Node is a child of the 'chatsentry.bypass.all' permission)

### Fixes

* **FIXED:** Manual warn broadcast message placeholders not setting<br>
* **FIXED:** Message sent to player when warned placeholders not setting
  {% endhint %}

### 1.1.1-BETA-02

{% hint style="info" %}

### Fixes

* **FIXED:** The automatic data updater does not preserve float values for config entries.<br>
* **FIXED:** The auto punisher warns players even when the module is disabled.<br>
* **FIXED:** The anti join flood and auto punisher module shows startup messages in the console that should only be shown when they're enabled when they're disabled.
  {% endhint %}

### 1.1.1-BETA-01 // Massive changes & improvements

{% hint style="info" %}
Please report any bugs or issues to kixmc via SpigotMC or the plugins support Discord server.

### Changes

* MASSIVE code improvements and rewrites<br>
* Optimized a loooot of code<br>
* Reworked entire plugin core code including the file loading and data caching system<br>
* The plugin now scans all it's files with it's custom config engine to ensure the files contain all valid yml to prevent issues, errors and possible file corruption<br>
* Reworked internal file managing and processing system. Using custom made config \
  manager api rather than Spigots for extended capabilities and better performance<br>
* Separate configuration files for modules for improved organization<br>
* The '/chatsentry clearchat' command is now it's own standalone command /clearchat<br>
* The '/chatsentry togglechat' command is now it's own standalone command /togglechat<br>
* The Antibot and Anticlient module has been removed. It's submodules (Anti parrot, Anti join flood, and Anti statue spambot) are now their own full modules<br>
* Miscellaneous plugin language moved to it's own 'misc-lang.yml' file<br>
* Plugin storage files (for violations, warnings, and player toggle preferences) are now stored in their own 'storage' folder within the plugin<br>
* Plugin modules are now stored in their own 'modules' folder within the plugin<br>
* Renamed a ton of config variables for consistency with the plugins naming conventions<br>
* Cleaned and rewrote a lot of config comments for improved clarity<br>
* Reworked everything related to config files with implementation of the plugins custom config engine<br>
* Redesigned info command contents to be more compact and clear<br>
* Rewrote/reformatted some hard coded messages like the update notification on join

### Additions

* Automated post update checking (to fix having to restart if you update before the Spigot API updates the new version release)<br>
* Notification option under the admin notifier for the anti join flood module<br>
* Option for configurable message count per chat-cooldown-in-ticks under chat cooldown configuration<br>
* Auto punisher module: Automatic per module warning system equip with complete \
  customizable rules for punishments based on per module violations with automatic expiry<br>
* Manual warning system linked to customizable punishment rules for admins<br>
* New standalone command '/warn'<br>
* New standalone command '/warnings' with 3 subcommands to manage warnings in-game.<br>
* New standalone subcommand '/warnings pardononemanual'<br>
* New standalone subcommand '/warnings pardonallmanual'<br>
* New standalone subcommand '/warnings clearmodulewarnings'<br>
* Plugins commands moved from '/chatsentry' to '/chatsentry help'<br>
* New subcommand '/chatsentry help' to show the plugins commands neatly organized, shows only the ChatSentry commands the sender has permission for<br>
* New subcommand '/chatsentry resources' to show the plugins help resources quickly. Shows the wiki link, plugin page link, and support Discord link<br>
* New 'intelligent' option in anti parrot module that allows the module to utalize extra intelligence algorithms for increased detection with premium hacked clients<br>
* Greatly improved intelligent anti parrot detection algorithms, most likely the strongest in the market<br>
* Further improved link and ad blocker detection algorithms<br>
* Intelligent anti chat flood module: blocks or intelligently modifies the use of excessive repeated characters and very long "words" (ignores player names)<br>
* Option to \[intelligently] replace blocked words / phrases with \*\*s \[option to be shortened if excessively long] instead of blocking entirely within the intelligent word and phrase filter module<br>
* Word/phrase whitelist for the word and phrase filter for less false positive detections with certain words<br>
* Further improved word and phrase filter detection algorithms<br>
* The plugin can now fetch and cache offline uuids through Mojangs API when needed instead of always from the player data files<br>
* Added various (smaller) miscellaneous new options for a lot of the modules

### Fixes

* **FIXED:** Link and ad blocker blocks a message if it's just a period ('.')<br>
* **FIXED:** Anti parrot fails to register parroting players periodically

### Permission changes

* The bypass node for the cap limiter module has changed from 'chatsentry.excessivecaps.bypass' to 'chatsentry.caplimiter.bypass'<br>
* The bypass node for the link and ad blocker module has changed from 'chatsentry.linkblocker.bypass' to 'chatsentry.linkandadblocker.bypass'<br>
* The bypass node for the spam blocker module has changed from 'chatsentry.spam.bypass' to 'chatsentry.spamblocker.bypass'<br>
* The bpyass node for the chat cooldown module has changed from 'chatsentry.cooldown.bypass' to 'chatsentry.chatcooldown.bypass'<br>
* The bypass node for the anti statue spambot module has changed from 'chatsentry.statuespambot.bypass' to 'chatsentry.antistatuespambot.bypass'<br>
* The bypass node to allow chatting while chat is toggled has changed from 'chatsentry.togglechat.bypass' to 'chatsentry.togglechat.exempt'

### New permissions

All the new permissions can be found on the wiki page: [https://kixmc.gitbook.io/chatsentry-wiki/pac](https://kixmc.gitbook.io/chatsentry-wiki/pac/permissions-and-commands)

### Notes

* An automatic data updater has been programmed to detect legacy data + module settings and translate all of it to the new format, no need to reconfigure stuff!
  {% endhint %}

## 1.1.0 // File optimizations

{% hint style="info" %}

### **Changes**

* Major code optimizations to significantly improve efficiency in preparation for new feature additions and changes.
  {% endhint %}

## 1.0.9 // Big update: new Antibot & Anticlient protection module with 3 submodules, various improvements, optimizations & more.&#x20;

{% hint style="info" %}

### Additions

* The config is now parsed to ensure the yml format is valid prior to attempting to load it. If it's not valid, you will be notified in-game and in console when reloading the plugin or when the plugin starts. This is to stop the Spigot from resetting the config file if the yml is ever invalid.<br>
* Any reload errors shown in the console now additionally show to the player who ran the reload command in-game. (excludes stacktrace due to it's size)<br>
* Added a new module setting to the spam blocker 'block-repeated-message-similarity-threshold'; If a players message isn't similar to one of the messages on the phrase-whitelist, this individual threshold value is now used instead of the same threshold value as the phrase whitelist similarity value.<br>
* New Antibot & Anticlient module - blocks various chat spam and join flooding techniques commomly utilized by bots and players using hacked clients. Composed of 3 submodules with their own settings that must be enabled as well in order to function.<br>
* Added submodule to antibot & anticlient module: Anti parrot - Blocks hacked clients that automatically "parrot" (copy) other players chat messages.<br>
* Added anti parrot notification and logging option (logging of this violation type is not recommended) under the admin notifer and core settings sections of the config. Anti parrot violations can be looked up with the violation type "anti-parrot-block".<br>
* Added submodule (and various submodule settings) to antibot & anticlient module: Anti join flood - Blocks more than a set amount of players joining every minute to prevent bot join flooding to lag & crash the server.<br>
* Updated /an info command output accordingly.<br>
* The block-chat-on-join-until-movement setting has now been moved under the Antibot & Anticlient module.<br>
* The block-chat-on-join-until-movement setting now blocks commands as well as messages until movement.<br>
* The block-chat-on-join-until-movement setting now goes by it's submodules name anti statue spambot. With this, the bypass permission node has been changed to "chatsentry.statuespambot.bypass".

  <br>
* The block-chat-on-join-until-movement setting now has a join-command-whitelist command list that allows you to whitelist commands to be ran on join before movement.

### Changes

* Cleaned unnecessary config comments or bits within comments that contained outdated information.
* Rewrote the majority of config comments to improve user friendliness.

### Fixes

* The block-chat-on-join-until-movement setting now respects the "chatsentry.bypass.all" permission.
* The commandspy module now respects now respects the "chatsentry.bypass.all" permission.
* The clearchat command now respects the "chatsentry.bypass.all" permission.
  {% endhint %}

## 1.0.8 // Command listener support on all modules, compatibility changes, bug fixes, & more

{% hint style="info" %}
Entries highlighted in **bold** may require your action after updating to this version.

### Additions

* The command listener now works with all applicable ChatSentry's modules! This means all ChatSentry's filtering abilities can be used in commands as well. To enable the command listener, set 'enable-command-listener' to true at the top of the config.<br>
* **Added configurable affected command lists under the Cap Limiter, Spam Blocker, and Chat Cooldown modules as conflictions may arise if all commands are filtered by them. (for example, the spam blocker blocking someone using a warp command twice) It's recommended you set these lists only to your servers private messaging commands. If you want to apply the module to all commands (highly not recommended), the lists can be to "\[]".**

### Changes

* Chat handling system reworked to add compatibility for chat modification plugins that intensely change how chat works such as chat channel plugins. Most plugins similar to the previously mentioned should no longer override ChatSentry's filters and checks.
* Large portions of code have been optimized and tidied.
* The 'enable-command-listener' setting in the config is now set to true by default.
* The 'enable-violations-log' setting in the config is now set to true by default.
* **For consistency with the new command lists, the commandspy command whitelist and blacklist now requires commands to be properly formatted with a "/" at the start.**
* Modified and added some configuration comments for clarity.

### Fixes

* **FIXED:** The admin notifier module fails to send notifications to the console (when send-to-console: true) if nobody with admin notifier recipient permissions is online.
  {% endhint %}

## 1.0.7 // Link and ad blocker hotfixes

{% hint style="info" %}

### Fixes

* **FIXED:** Link and ad blocker no longer respects whitelisted domains.<br>
* **FIXED:** Link and ad blocker always displays the first domain in the block message; meaning if one allowed domain and one non-whitelisted domain was present in a message, the whitelisted link would be displayed instead of the non-whitelisted link in the block message.
  {% endhint %}

## 1.0.6 // Link and ad blocker fixes and improvements, new cap limiter options and more

{% hint style="info" %}

### Additions

* A bunch of mini improvements have been made to link and ad blocker modules code for maximum protection and minimal false positive detections.<br>
* Admin notifications that come from the link and ad blocker module will now try and section out the domain or ip that was blocked (instead of always just showing the entire message) in the notification for better readability.<br>
* Added a new 'modify-message' option under the cap limiter module. When set to true, the messages caps will be replaced with lowercase letters and sent. When set to false the detected message will be blocked entirely (like it behaved previous to this update). Defaults to true.<br>
* Added a new 'send-blocked-message-when-modified' option under the cap limiter module that works with the the 'modify-message' option to allow you to fine tune when the blocked message should be sent.

### Changes

* The hex placeholder format is now "\&#hexvalue" instead of "&{#hexvalue}" in order to keep consistency with other plugins such as EssentialsX.<br>
* Added a "{BLOCKED\_CONTENT}" placeholder to the 'blocked-link-or-ip-message' message in the config. This allows you to include the domain or ip that was detected in the blocked message.\
  \
  Tip: With this new placeholder, it's recommended you change your 'blocked-link-or-ip-message' to something like '\&cThe domain or numeric ip ''&4{BLOCKED\_CONTENT}\&c'' is not allowed in chat."

### Fixes

* FIXED: Link and ad blocker detects "Mr. name", "Mrs. name", and "Ms. name" as domains/ips.
* FIXED: Link and ad blocker detects abbreviated numeric values like 3.4k or 1.2b as domains/ips.
* FIXED: Link and ad blocker detects some text faces like "o.o" or "-.-" as domains/ips.
* FIXED: Link and ad blocker on extra sensitivity mode detects any length sequences of periods with spaces ". . . ." as domains/ips.
* FIXED: Metric instances failing communicate with bStats.
  {% endhint %}

## 1.0.5 // Hex color support, violation notifications toggle command & more

{% hint style="info" %}

### Additions

* Added support for hex colors! If you're using 1.16 or above, you can use hex values for custom colors in chat with "&{#hexvalue}". Regular preset colorcodes still work. For example: "&{#bc42f5}Custom color message! \&dPreset color message!". You can easily find hex values with Googles color picker tool: <https://www.google.com/search?q=color+picker><br>
* Added a new command that allows players to change their violation notification preferences. You can now use "/kcs tvn" or "/kcs toggleviolationnotifs" to toggle off or on seeing violation notifications from the admin notifier module.

> #### Players will need the new permission node "chatsentry.violations.togglenotifs" in order to access the toggle violation notifications command.

* Added new module options to change the messages for toggling on and off violation notifications under the admin notifier module.<br>
* Added a new module option to the admin notifier module to remind players with permission when they join if they have admin/violation notifications turned off. This boolean also comes with an option to change the reminder message.

### Changes

* Modified (and added) some lookup hard coded messages so they're easier to understand.
* The plugin prefix is no longer appended to the lookup command usage message.

### Fixes

* Fixed a few messages not appending the message prefix before the content.
  {% endhint %}

## 1.0.4 // Link and ad blocker rework & fixes

{% hint style="info" %}

### Reworks

* A large portion of the link and ad blocker module has been rewritten for better accuracy and efficiency.

### Additions

* The link and and ad blocker module has a new "extra-sensitive" option that is enabled by default. When this option is enabled, common exploits to bypass link / ip filters will be blocked. For example, "google(dot)com" and "youtube {D\_O\_T}com". You can usually safely turn this off you don't lot of advertisers or bots. Since having this on makes the filter extra sensitive, the filter is more liekly to block things when it shouldn't.

### Fixes

* The link and ad blocker (laab) module now properly distinguishes between links/ips and numeric values such as "1.16.2" or "$12.13". These kinds of values are properly handled now along with detecting and blocking links & numeric ips. Numeric values will not be blocked.<br>
* Fixed various issues with the laab module not detecting and blocking links when it should.
  {% endhint %}

## 1.0.3 // New placeholders for messages & optimizations

{% hint style="info" %}

### New Features

* Additional player placeholders added to the admin notifier module and command spy module. Violation & command spy messages can now display player displaynames with their original color or stripped of their original color; see the config for more info.

### Changes

* Optimized portions of various modules code.
  {% endhint %}

## 1.0.2 // Minor fixes, optimizations, changes, and more.

{% hint style="info" %}

### New Features

* Added new config option "check-for-updates" to set whether you'd like to be notified when new updates are available.

### Fixes

* FIXED: '/kcs lookup all' not finding any results, even when violation data is present.

### Changes

* Corrected a typo ("violatiions") in a hard coded message within the lookup command.
* Optimized a large portion of the lookup input parser code further.
* Improved various sections of the violation lookup engines logic.
* Lookup results will now display the UUID of the violator in place of their username (instead of "null") if their username is not able to be retrieved via the servers playerdata files.
* Days are no longer abbreviated as "ds" in lookup results.
  {% endhint %}

## 1.0.1 // New violation lookup command, bug fixes, and more.&#x20;

{% hint style="info" %}

### **Reworks**

* The violation logging system has been reworked. violations.txt has been replaced with violations.yml allowing for better data structuring. With this the configurable formats for how violations are logged have been removed from the config, as data is logged in YAML format now.

### New features

* &#x20;Added a '/kcs lookup ' command that allows violations to be viewed in-game. It utilizes a custom data parsing engine that comes with advanced filtering capabilities based on player, time range, or type (or multiple of of the previously mentioned 'flags'). Name changes are supported as it's UUID based.

> #### Players will need the new permission node "chatsentry.lookup" in order to access the lookup command.

* Automatic version checking is now active.

### Fixes

* Data-persistent command aliases now register under the same instance in order to fix multiple instances of command classes being created when they shouldn't (which in some cases broke data-persistence).<br>
* Modified EventHandler priorities; all necessary handlers are set to HIGHEST now to fix confictions with some custom chat plugins.<br>
* The link and ad blocker module no longer will block version strings such as "1.15.2".

### Changes

* Some config comments tidied for better readability.
* The word replacer module is no longer case-insensitive.
  {% endhint %}

## 1.0.0 // Hello world!

{% hint style="info" %}
Plugin accepted by Spigot and is now available for purchase. :tada:&#x20;
{% endhint %}


