# 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.md)
{% 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"
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.chatsentry.xyz/config-guides/module-config-guides/word-and-phrase-filter.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
