Skip to content
Moderation

XBans

$9.99

Bans, 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

Documentation