Chat Moderator
The ultimate chat moderation solution for Minecraft servers.
Chat Moderator
👑 PCM (Premium Chat Moderation Plugin)
---
✨ 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%%