Chat Moderator

The ultimate chat moderation solution for Minecraft servers.

40

Chat Moderator

👑 PCM (Premium Chat Moderation Plugin)

Minecraft Version

Platform

License

---

✨ Overview

The ultra-fast chat moderation solution for Minecraft servers. This premium plugin combines ultra-fast profanity detection with a robust punishment system, offering dual-API support, database storage, and automated moderation actions.

---

🚧 Development & Support

PCM is currently in active development! Many more features, flexible layouts, and extended customization options are planned for future updates.

If you need support, want to report an issue, or have a great idea for a new feature you'd like to see added, please join our Discord Server! We would love to hear your feedback and suggestions.

---

🚀 Speed & Performance

* 🚫 v1: We prioritize raw speed. This plugin does v1 rely on slow AI models. * ⚡ v1: Messages are checked and filtered in milliseconds. * 🌍 v1: Powered by v1 (Main) and v1 (Fallback) for 99.9% uptime and extreme accuracy.

---

🌟 Features

* 🛡️ Full Command Suite: * Full Command Suite: Completely prevents the message from being sent if it contains profanity. * Full Command Suite: (Requires v2) Replaces profane words with `****` while keeping the rest of the message intact. * � Full Command Suite: Built to use ProfanityAPI V2 for lightning-fast parsing, seamlessly falling back to V1 if V2 goes offline. * 🏎️ Full Command Suite: Temporarily caches API responses to prevent server lag and reduce network load on recurring spam. * �📊 Full Command Suite: * Assigns a "profanity score" (0.0 - 1.0) to players based on their behavior. * Scores accumulate over time, triggering stricter punishments for repeat offenders at custom thresholds (e.g., 10=Mute 1h, 50=Ban 7d). * 📉 Full Command Suite: Slowly reduces player scores over time to allow for redemption. * ⚖️ Full Command Suite: * 🔇 Full Command Suite: Temporarily silence toxicity with custom durations. * 🚫 Full Command Suite: Automatically ban players who exceed safety thresholds. * 🔔 Full Command Suite: Real-time notifications for staff via Chat or Actionbar when a player's message flags the API. * 💾 Full Command Suite: SQLite storage ensures player data (scores, punishments, infractions) is saved permanently. * 🕵️ Full Command Suite: Monitor private messages between players (`/msg`, `/r`, `/w`, etc.) in real-time, with self-spy support to test formats. * 📣 Full Command Suite: Create rotating text announcements or execute console commands automatically on an interval (Random or Sequential). * 💬 Full Command Suite: Log flagged chat messages, specific command usages (`/op`, `/stop`), and receive admin mentions straight in Discord! * 🛡️ Full Command Suite: Allows players to individually toggle off annoying plugin broadcasts or titles via regex patterns! Download Here: Full Command Suite and install %%MD1%% for it to work. * ⚠️ Full Command Suite: Automatically detect certain words or commands and alert your staff team (both in-game and on Discord). * 🛠️ Full Command Suite: Manually punish users, check status, toggle alerts, or manage your personal notifications.

---

Commands

All commands require `pcm.admin` permission unless otherwise noted.

| Command | Description | | :--- | :--- | | `/pcm reload` | 🔄 Reloads all configuration files and database connections. | | `/pcm mute <player> <duration> [reason]` | 🔇 Mutes a player. Duration ex: `10m`, `1h`, `perm`. | | `/pcm unmute <player>` | 🔊 Unmutes a player. | | `/pcm ban <player> <duration> [reason]` | 🚫 Bans a player. Duration ex: `7d`, `perm`. | | `/pcm unban <player>` | 🤝 Unbans a player. | | `/pcm tempban <player> <duration> [reason]` | ⏳ Alias for ban. | | `/pcm status` | 📡 Displays plugin version, API health, and system status across all modules. | | `/pcm listen` | 👂 Toggles admin alerts for the executor (Requires `pcm.listen`). | | `/pcm spy` | 🕵️ Toggles social spy for private messages (Requires `pcm.socialspy`). | | `/pcm warnings` | ⚠️ Toggles in-game command warnings for the executor (Requires `pcm.warnings`). | | `/notification <channel> [true/false]` | 🔕 Toggle visibility of specific broadcast channels (Requires PCMNF Addon) | | `/notification` | 📋 List all available notification channels and their current status |

---

🔐 Permissions

| Permission | Description | Default | | :--- | :--- | :--- | | `pcm.admin` | 🔑 Access to all administration commands including reload, ban, mute, etc. | OP | | `pcm.bypass` | 🛑 Bypasses all chat moderation filters and score accumulation | False | | `pcm.listen` | 📢 Allows receiving profanity score alerts | OP | | `pcm.socialspy` | 🕵️ Allows using social spy and receiving spy messages | OP | | `pcm.warnings` | ⚠️ Allows receiving in-game command warnings | OP |

---

⚙️ Configuration

Full control over every aspect of the plugin via `config.yml`.

```yaml

PCM Configuration

Moderation Mode

Options:

BLOCK - Cancel the message entirely.

CENSOR - Replace the message with the cleaned version (only works with v2 API).

If v1 fallback is used in CENSOR mode, it will block or use a placeholder depending on availability.

moderation-mode: CENSOR

Profanity API Settings

profanity-api:

Enable/Disable the Profanity Filter entirely

enabled: true v2-url: "https://profanity-api.xeven.workers.dev" v1-url: "https://vector.profanity.dev" timeout-seconds: 5

Cache settings to reduce API calls

cache: enabled: true duration-minutes: 10

Social Spy Settings

social-spy: enabled: true format: "&8[&cSpy&8] &7%player% &8-> &7%target%: &f%message%" commands: - msg - tell - r - reply - w - whisper

Logging

logging: enabled: true

Allow Self-Spy (See your own spy messages?)

allow-self-spy: true

Discord Webhooks

discord-webhooks: enabled: true url: "ReplaceWithWebhookUrl" username: "PCM" avatar-url: "https://cdn-icons-png.flaticon.com/512/4712/4712109.png"

Warnings & Discord Logging

warnings:

Chat Warnings / Logging

chat: enabled: true log-to-discord: true

Format sent to Discord

Placeholders: %player%, %message%, %discord-ping%

discord-format: "%discord-ping% %player%: %message%"

Key = Word/Regex, Value = Discord Role/User ID to ping (e.g. <@&123456789>) or "" for no ping

alerts: "help": "<@&123456789>" "admin": "<@123456789>" "badword": ""

Command Warnings

command: enabled: true log-to-discord: true

key: command, value: Role ID to ping (e.g. <@&123456789>) or "" for no ping

watched: "/op": "<@&123456789>" "/deop": "" "/stop": "<@&987654321>" "/reload": ""

Format sent to admins in-game

format: "&8[&cAlert&8] &e%player% &7executed: &f%command%"

Format sent to Discord

Placeholders: %player%, %command%, %discord-ping%

discord-format: "%discord-ping% :warning: Command: :warning:nCommand: %player%nCommand: `%command%`"

Announcements

Announcements

announcements: settings: enabled: true interval: 300 # seconds order: SEQUENTIAL # SEQUENTIAL or RANDOM list:

You can specify 'lines' (text message) AND/OR 'commands' (executed by console).

- lines: - "&8[&bAnnounce&8] &eCheck out our website!" - "&7www.link.com" commands: - "say This is a console command" - "save-all"

#- commands:

- "weather clear"

Notification Filters

Filter specific system messages/titles/bossbars using Regex.

Players can toggle these filters via /notification <channel> [true/false]

Note: For this feature to work, the optional 'PCMNF' (ProtocolLib) addon must be installed.

#

REGEX GUIDE:

Regex (Regular Expression) is a pattern used to match text.

- (?i) : Makes the match Case-Insensitive (ignores upper/lowercase).

- . : Matches ANY single character.

- * : Matches the previous character 0 or more times.

- .* : Matches ANY sequence of characters (e.g. everything).

#

EXAMPLES:

1. Match any message containing "Crate":

pattern: "(?i).*crate.*"

#

2. Match a specific phrase "Server Restarting":

pattern: "(?i).*Server Restarting.*"

#

3. Match messages starting with "Alert:":

pattern: "^Alert:.*"

#

4. Match messages ending with "Won!":

pattern: ".*Won!$"

# notification-filter: enabled: false

Define channels and their regex patterns

channels: crate_announcements: pattern: "(?i).*crate.*" default-enabled: true # Do players see this by default? server_broadcasts: pattern: "(?i).*broadcast.*" default-enabled: true

Score System

Scores are accumulated 0.0 - 1.0 (probability of profanity).

When a player reaches a score threshold, punishments are applied.

Scores are stored in scores.yml.

score-system: enabled: true min-score-to-flag: 0.9

Admin Alert Format

%score% displays the TOTAL ACCUMULATED SCORE of the player.

admin-listen: type: CHAT # CHAT or ACTIONBAR format: "&c%player% &7score: &e%score% &8(&f%message%&8)"

Punishment Thresholds (Accumulated Score -> Action)

Format: "SCORE: COMMAND"

Use underscore notation (10_0 = 10.0) to avoid YAML path parsing issues.

thresholds: "10_0": "pcm mute %player% 1h Auto-Mute: Too much profanity" "20_0": "pcm mute %player% 24h Auto-Mute: Persistent profanity" "50_0": "pcm ban %player% 7d Auto-Ban: Excessive profanity" "100_0": "pcm ban %player% perm Auto-Ban: Permanent"

Score Decay

Automatically reduce player scores over time to allow redemption.

decay: enabled: true

How much score to remove per interval?

amount: 1.0

How often to apply decay? (in hours)

Checks are made when player joins.

interval-hours: 24

Messages

messages: prefix: "&8[&bPCM&8] " blocked: "&cYour message contains profanity and was blocked." censored-notification: "&cYour message was censored."

Broadcasts (Visible to players with pcm.admin or pcm.listen)

mute-broadcast: "&8[&cPCM&8] &e%player% &7was muted by &e%punisher% &7for &e%duration%&7. Reason: &f%reason%" ban-broadcast: "&8[&cPCM&8] &e%player% &7was banned by &e%punisher% &7for &e%duration%&7. Reason: &f%reason%"

Admin alert format is in score-system.admin-listen.format

Punishments

mute-reason: "&cYou are muted for %duration%. Reason: %reason%" muted-error: "&cYou are muted! Expires in: %time%" ban-message: "&cYou have been banned!n&7Reason: &f%reason%n&7Expires: &f%time%"

Commands

no-permission: "&cNo permission." command-usage: "&cUsage: /pcm <subcommand>" reload-success: "&aConfiguration reloaded." player-not-found: "&cPlayer not found." invalid-duration: "&cInvalid duration. Use 'perm' or time like 10m, 1h, 1d etc." cannot-mute-op: "&cYou cannot mute an Operator." cannot-mute-bypass: "&cYou cannot mute a player with bypass permissions." cannot-ban-op: "&cYou cannot ban an Operator." cannot-ban-bypass: "&cYou cannot ban a player with bypass permissions." mute-success: "&aMuted %player% for %duration%." unmute-success: "&aUnmuted %player%." ban-success: "&aBanned %player% for %duration%." unban-success: "&aUnbanned %player%."

Listen Toggle

listen-enabled: "&aYou are now listening to chat moderation alerts." listen-disabled: "&cYou are no longer listening to chat moderation alerts." listen-only-players: "&cThis command is only for players."

Social Spy

socialspy-enabled: "&aSocial Spy enabled." socialspy-disabled: "&cSocial Spy disabled." socialspy-only-players: "&cThis command is only for players."

Notification Filter

notification-usage: "&cUsage: /notification <channel> [true/false]" notification-unknown-channel: "&cUnknown notification channel: &e%channel%" notification-enabled: "&7Notification channel &e%channel% &7is now &aenabled&7." notification-disabled: "&7Notification channel &e%channel% &7is now &cdisabled&7." notification-list-header: "&8&m---&r &bNotification Filters &8&m---" notification-list-item: "&e%channel%&8: %status%" notification-list-footer: "&7Toggle with: /notification <channel>" notification-no-filters: "&cNo filters configured." notification-on: "&aON" notification-off: "&cOFF"

Database (SQLite)

database: filename: "database.db"

Update Checker

update-checker: true

```

---

📥 Installation

1. Edit the `PCM-X.X.jar` file. 2. Edit it to your server's `plugins` folder. 3. Edit your server to generate the configuration files. 4. Edit `plugins/PremiumPCM/config.yml` to configure it how you would like it. 5. Type `/pcm reload` or restart your server to apply changes.

---

💎 Credits

* 👨‍💻 Advanced API: Advanced API * 🌐 Advanced API: %%MD1%% * 🚀 Advanced API: %%MD2%%

ADS