
A lightweight, configurable chat moderation plugin: blocks profanity (Italian + English), notifies staff with the full message, and supports anti-bypass modes (normal/strict/ultra). Suitable for lifesteal and SMP
A lightweight, configurable chat moderation plugin for Paper/Spigot: blocks profanity (Italian + English), notifies staff with the full message, and supports anti-bypass modes (normal / strict / ultra).
{message} + {match}).normal — pattern-based detection only (least aggressive).strict — pattern + leet & repeat normalization + insertion-only fuzzy detection.ultra — strict + vowel-stripped checks (most aggressive).f4ck → fack).fuuuck → fuuck).duck).ultra mode).plugins/ folder.config.yml.plugins/bChatMod/config.yml to customize blacklist, messages and anti-bypass mode./bchatmod reload
⚙️ config.yml
# Anti-bypass mode: "normal" | "strict" | "ultra"
anti-bypass-mode: "normal"
# Debug (toggle true while tuning)
debug:
block-log: false
# Messages
player-block-message: "&7You cannot send that message. It contains blocked words."
staff-message-format: "&b[bChatMod] &7{player} tried cursing: &r{message} &7(matched: &b{match}&7)"
# Permission required to receive staff notifications
staff-notify-permission: "bchatmod.notify"
# Blacklist (example entries)
blacklist:
- "fuck"
- "shit"
- "example-offensive-term"
📝 Notes
Short tokens (length ≤ 3) are handled conservatively to avoid false positives (e.g., "ass" inside "basso"). Use caution when adding short tokens.
Use debug.block-log: true during tuning to see which pattern/candidate matched in console.
Commands
Command
Description
/bchatmod reload
Reload configuration and rebuild blacklist patterns
🔑 Permissions
bchatmod.notify — receive staff notifications (default: op)
bchatmod.reload — reload config (default: op)
bchatmod.bypass — bypass chat filter (default: op)
🧩 Placeholders
{player} — player name
{message} — full original message the player attempted to send
{match} — the substring or variant that triggered the block
&b[bChatMod] &7{player} tried cursing: &r{message} &7(matched: &b{match}&7)