
Chat Moderator
The ultimate chat moderation solution for Minecraft servers.
👑 PCM (Premium Chat Moderation Plugin)
✨ Overview
The ultimate 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
- 🚫 No AI Implementation: We prioritize raw speed. This plugin does not rely on slow AI models.
- ⚡ Instant Processing: Messages are checked and filtered in milliseconds.
- 🌍 Dual API Support: Powered by ProfanityAPI v2 (Main) and v1 (Fallback) for 99.9% uptime and extreme accuracy.
🌟 Features
- 🛡️ Dual Moderation Modes:
- BLOCK: Completely prevents the message from being sent if it contains profanity.
- CENSOR: (Requires v2) Replaces profane words with
****while keeping the rest of the message intact.
- � Native V1/V2 Support: Built to use ProfanityAPI V2 for lightning-fast parsing, seamlessly falling back to V1 if V2 goes offline.
- 🏎️ Ultra-Fast Caching System: Temporarily caches API responses to prevent server lag and reduce network load on recurring spam.
- �📊 Intelligent Scoring System:
- 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).
- 📉 Decay System: Slowly reduces player scores over time to allow for redemption.
- ⚖️ Auto-Punishments:
- 🔇 Mute: Temporarily silence toxicity with custom durations.
- 🚫 Ban: Automatically ban players who exceed safety thresholds.
- 🔔 Admin Alerts: Real-time notifications for staff via Chat or Actionbar when a player's message flags the API.
- 💾 Database Support: SQLite storage ensures player data (scores, punishments, infractions) is saved permanently.
- 🕵️ Social Spy: Monitor private messages between players (
/msg,/r,/w, etc.) in real-time, with self-spy support to test formats. - 📣 Broadcast & Announcements: Create rotating text announcements or execute console commands automatically on an interval (Random or Sequential).
- 💬 Discord Webhooks: Log flagged chat messages, specific command usages (
/op,/stop), and receive admin mentions straight in Discord! - 🛡️ Notification Filters (PCMNF Addon): Allows players to individually toggle off annoying plugin broadcasts or titles via regex patterns! Download Here: PCMNF and install ProtocolLib for it to work.
- ⚠️ Command & Chat Warnings: 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.
# 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** :warning:\n**Player:** %player%\n**Command:** `%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
- Download the
PCM-X.X.jarfile. - Upload it to your server's
pluginsfolder. - Restart your server to generate the configuration files.
- Edit
plugins/PremiumPCM/config.ymlto configure it how you would like it. - Type
/pcm reloador restart your server to apply changes.
💎 Credits
- 👨💻 Development: Obsyron
- 🌐 Core API: ProfanityAPI
- 🚀 Advanced API: ProfanityAPI V2
