Moderation
XBans
$9.99Bans, mutes, jails and reports, plus proxy blocking, alt detection and a chat filter that learns.
What it does
A moderation toolkit for servers large enough that staff cannot watch everything. The usual sanctions — ban, mute, warn, kick, jail, temporary or permanent, and issuable against a player who has never connected — sit alongside VPN and proxy blocking, GeoIP rules, client-brand filtering and a ten-factor alt-account check. A Bayesian classifier pre-trained in five languages reads chat and escalates on its own. Everything synchronises across the network, and the same jar runs on Velocity or BungeeCord so a banned player is turned away at the proxy rather than by the backend a moment later.
Worth knowing
- One command, temporary or not
- Pass a duration to make a sanction temporary, omit it for permanent. No separate /tempban to remember.
- Sanctions before first join
- Ban, mute or warn a player who has never connected; it lands the moment they do.
- Enforced at the proxy
- The same jar runs on Velocity and BungeeCord, so a banned player is refused there instead of by the backend.
- A chat filter that learns
- A Bayesian classifier, pre-trained in five languages, scoring toxicity, spam and scams — with auto-escalation.
- Ten-factor alt detection
- IP, subnet, client brand, join timing and more, combined into a risk score you can tune.
- VPN, proxy and GeoIP rules
- Block datacenter ranges, Tor exits, or whole countries, with a whitelist for the people it catches wrongly.
The full list — 13 entries
- Ban, IP ban, IP range ban, mute, IP mute, warn, kick, shadow ban & jail
- AI-powered moderation with Bayesian classifier (pre-trained in 5 languages)
- Real-time chat analysis — toxicity, spam & scam detection with auto-escalation
- VPN/proxy/Tor, datacenter, mobile network & GeoIP blocking
- Client brand detection & blocking (whitelist or blacklist mode)
- 10-factor alt-account detection with configurable risk scoring
- Multi-jail system with configurable restrictions, auto-expiration & cross-server sync
- Freeze, watchlist, staff notes & Warden real-time notification system
- Report system with AI classification, chat evidence & GUI resolution
- 15 fully YAML-configurable GUI screens with player profiles
- Sanction templates, auto-escalation & reason-based auto-sanctions
- Discord webhooks, Web API & full audit logging
- Cross-server sync of sanctions and AI training via XCore SyncManager
What changed in 1.1.1
- Fixed shadow-ban.enabled disabling every ban on the server instead of hiding one player
- Added /shadowban, so a shadow ban targets one player like any other sanction
- Fixed country blocking never running, the settings were read under keys the config never had
- Fixed whitelist mode letting everyone in when the country lookup fails, see geoip.fail-closed
- Fixed temporary sanctions coming back after a restart when they expired while the server was off
- Expiry is now checked when a sanction is read, instead of one scheduled task per sanction
64 more
- The sweep covers bans, IP bans, mutes, IP mutes and jails, not just warns and reports
- Fixed the chat cooldown message always saying 2 seconds whatever cooldowns.chat was set to
- Chat history is kept after a disconnect, which is when reports usually arrive
- Added chat-ai.history-keep-minutes
- The chat AI no longer trains itself on its own verdicts
- auto-train-on-action and auto-train-on-sanction now do something, they were never read
- Added ban waves, prepare sanctions and apply them in one go with /banwave
- Added a duration to /ban-ip-range, which was permanent only
- Dates follow the language file (date-format) instead of being French everywhere
- Moved the last hardcoded texts into the language files
- One query instead of two to find the accounts sharing an address on join
- Discord notifications survive a rate limit, they wait their turn instead of being lost
- GUI clicks go through the shared handler in XCore, sounds and actions behave the same everywhere
- Requires XCore 1.1
- Removed the web-dashboard settings, read but never used and absent from the config
- Fixed the sanction lists showing one player's head above another player's details once a sanction had run out
- Fixed the player list and the alt accounts list reading the whole player table on every page turn
- Fixed the player list leaving a background task running after it was closed
- The sanction lists redraw the navigation arrows between blinks instead of the whole page
- Every list loads off the main thread, including when changing page
- Staff notes are stored in the language files, so they can be translated
- Removed two menus that no command could open
- The chat and command cooldowns follow a reload instead of waiting for a restart
- Alt detection now counts the client, the language and options.txt, even on an offline account
- A shared address is weighted by what it is: a VPN exit or a mobile carrier is not a household
- An address used by forty accounts counts for almost nothing, one used by two counts for a lot
- Added same-subnet and same-network matching, for a household whose address changes
- Shared addresses lose weight as they age
- Fixed multi-shared-ip counting every address the other account ever used instead of the shared ones
- Banned linked accounts are capped, three of them no longer clear any threshold on their own
- Country, ISP and login timing looked at a linked account picked at random
- A two-letter name no longer counts as a name match against everybody
- Every weight is in the config, and the risk levels follow the thresholds you set
- The alt menu shows what the engine actually weighed, not just that an address was shared
- /alts <player> opens that menu directly instead of printing a list
- Added /alts link and /alts unlink, for what the engine cannot see
- Added a name history, and /whois shows the names an account has gone by
- Added /xbans schedule, to apply a sanction later
- Fixed the obfuscation defence only working on messages short enough to be nothing but the word
- Classifier confidence is spread over the message length instead of saturating at 100% on anything long
- Added /xbans ai: stats, test with the words behind a verdict, train, and reset
- Added chat rules for what a word model cannot see: capitals, held keys, links, mixed alphabets
- Messages that stay just under the confidence bar now add up instead of being forgotten
- Added a classifier page to the dashboard
- Fingerprints are read for every linked account in one query instead of two per account
- The fingerprint table keeps one row per account instead of one per login, and the old rows are cleared once
- The audit log, the classifier and three commands run their queries on the database pool
- The account you are looking at no longer appears in its own list of alts
- Fixed the blank lines missing from the alt lore
- Accents restored in the French wording of the alt, classifier and scheduling messages
- Fixed a reload leaving the freeze reminder running, so a frozen player got one message per reload
- Removed two language keys nothing read
- Fixed /xbans import opening its connection on the wrong pool
- Fixed chat moderation never acting on anything
- The clean check is now a ratio, chat-ai.clean-margin, and min-confidence ships at 0.5 to match the new scale
- /xbans ai test now says which of the three checks would stop a message
- Added a listed-terms rule that still matches a word split or disguised
- 1 and | are now read as both i and l instead of guessed
- Two lists: terms searched anywhere, and terms compared as whole words for those that live inside ordinary ones
- Fixed chat-rules.min-length exempting short messages from every rule
- Fixed a Russian, Greek or Arabic message never matching a listed term
- German ß, Danish ø and Icelandic þ are spelled out instead of dropped
- The shipped list of terms is a real list now, not three examples
- Fixed a word from the allow list swallowing an insult it happened to straddle