Features

Everything an administrator can reach.

Wardnox is a security platform first and a community layer second. The community layer runs behind the same gate, which is why the bot will answer a question but never a scam.

Detection and enforcement on this page are free on every plan, with no cap on how many messages are scanned. Three things are bounded by your plan: how many rules you may keep, how far back the history goes, and the AI features, which are marked below. See the plans.

Authoring

Rules you wrote, and can explain.

Three rule types, each scoped as narrowly as you like, each recording why it exists.

Word rules

Several ways to match, with word boundaries that understand accented and non-Latin text rather than assuming plain ASCII. Phrase rules tolerate the punctuation and spacing somebody puts between words to break them up, without ever becoming slow to evaluate.

Regex rules

Checked for dangerous constructions before they save, run isolated and time bounded, and testable in the dashboard against whole multi-line text rather than one line at a time.

Domain rules

Allow or block, with or without subdomains, resolving what a domain genuinely is rather than comparing the end of a string. A block always wins over an allow, because a stale allow entry nobody cleaned up should not be the thing that lets something through.

Phrase groups

Named sets with a weight, a severity and an emitted reason code. The reason code is load-bearing: it is what a combination bonus keys off when it looks for two things happening together.

Attachment policy, without opening the file

Executables and installers are blocked by extension out of the box, and separately by the file type the upload declares itself to be. The interesting case is disagreement between those two: a file named as an image and served as a program is its own finding, because that mismatch is a disguise rather than a mistake. You can also invert the whole thing and permit only the types you name. None of this downloads anything: the name, the declared type and the size are all Wardnox ever looks at.

Profanity, as three lists rather than one switch

Slurs, explicit language and ordinary swearing are separate categories, each with its own severity, its own weight and its own action, because a server that wants slurs gone often does not want swearing touched. All of it is off until you turn it on. This is the only part of Wardnox that ships words rather than structure, and what counts as unacceptable language is a decision your community makes rather than one we should guess at.

An allow list that beats every other list

Word lists produce false positives no amount of curation removes: place names and surnames containing a slur, reclaimed words used by the people they describe, and ordinary words in other languages. Your allow list is checked first and wins over everything, including your own additions, so you can keep a category on and still permit the word your community actually uses.

It will match f4ck, and it will not match Scunthorpe

Look-alike characters are folded back by default, because typing it that way is deliberate. Matching across removed spaces is deliberately off, and should usually stay off: squashing spaces destroys word boundaries, which is the only thing keeping "Scunthorpe" and "assassin" from matching. It trades a rare evasion for a common false positive, so it is a decision rather than a default.

Every rule carries notes

A field for why the rule exists. Six months later, that is the difference between tuning it and deleting it out of caution.

Scoped how you need

Include and exclude by channel and by role, monitor-only, or flagged to run even against trusted accounts.

Scope

Different rooms, different rules.

A support channel and a general channel are not the same risk, and should not share a threshold.

Channel policies

Inherit, watch only, off, strict, or fully custom. Each can set its own sensitivity, its own link policy, which detectors apply, and how much weight to give the room.

Category policies cover what does not exist yet

Policy is inherited outwards, so a setting on a category covers the channels created inside it later. That is the only workable answer for a ticket system, where the channels do not exist yet when you configure it.

Trust roles, not people

A role entry survives staff turnover; a user entry does not. Trust can also be given an expiry date.

Security profiles

Low, normal, high and lockdown are patches over the defaults rather than separate formats, so picking one then loosening a single setting does not silently revert everything else.

Flooding

Volume, repetition and pings.

On by default, and tunable in pieces rather than as one sensitivity slider.

Spam is five different things

How fast somebody posts, the same message sent again, a message that is nearly the same, the same thing posted across several channels at once, and the same link over and over. They are separate because they have separate answers: the cross-channel one is the raid pattern, and catching it needs a view no single channel has.

Near-duplicates ignore short messages on purpose

Catching "reward now" against "reward now!!!" is the point. Catching somebody saying "ok" three times is not, so anything short is left alone. Repetition is only evidence once a message is long enough for repeating it to have taken effort.

An @everyone that did not work is the suspicious one

Discord only delivers @everyone to members with the permission. Someone without it types it and it arrives as ordinary text, which means every mention rule sees nothing at all. Read as a signal the two cases are the wrong way round: a delivered ping is usually staff making an announcement, while an undelivered one is somebody imitating staff, buying the authority of a broadcast without needing permission for one. Wardnox scores it separately, and below a real ping, because it is also what an ordinary member does when they mean "hey all".

Mention limits, with roles that are exempt from them

Separate ceilings for members, roles and the total, plus whether @everyone and @here are allowed at all. Your announcement roles can be listed as exempt rather than you having to choose between a working limit and a working announcement.

Emoji walls, caps, character runs and newline floods

Four separate checks, each with a length below which it does not apply, so a short excited message is not treated the same as a screen-filling one. Each contributes rather than acting, because shouting is annoying and is not the same as an attack.

Members

The gate, and what happens after it.

Verification, greetings and conversation all run behind the same security engine.

Verification you can pitch at the right level

A range of challenges, ordered by how much they ask of a member, from a single click up to something a script will not get through. Pick the lightest one that solves your problem. Nothing about the expected answer is stored server side, so a restart never strands somebody mid-verification.

Tuned for the people, not the theatre

The point is to stop automated joins without punishing the humans behind them. A challenge that real members repeatedly fail and give up on has cost you the community it was meant to protect.

Welcome after the gate

Greetings are sent after verification passes, so a join-raid cannot flood a channel with welcomes for a hundred accounts that never got in.

Conversation, off by default

A server that installed an anti-scam bot did not ask for a chatbot. When enabled, it replies only to messages the engine has already cleared, so a scam is removed rather than answered. Every plan gets enough replies to hear what it sounds like in your own server; Pro and Scale are the plans with the allowance to leave it running.

Project knowledge, on Pro and Scale

Index your docs by paste or site crawl, and the bot answers from them rather than guessing. The model was chosen on a fabrication benchmark rather than price: a bot that confidently sends members to a channel that does not exist is training them to follow instructions from a bot. This is the single biggest difference the paid plans buy, and it is not available on Free or Guard.

The AI can be used without showing it anybody’s words

Turn on redaction and the classifier is sent the signals extracted from a message and never the message. It still contributes, the deterministic detectors are unaffected, and no member text reaches the provider at all. For the administrator whose objection to AI is the data rather than the accuracy, that objection has a switch.

It never DMs a member first

Someone who is actioned gets no direct message, deliberately, so they cannot learn exactly what triggered it and work around it.

Community

Reasons to stay, not just reasons to leave.

Levelling and invite tracking, free on every plan and off until you want them.

Levelling that cannot be farmed the usual way

Every other levelling bot fights farming with a cooldown, because a cooldown is all it has: it never read the message. Wardnox scored it moments earlier and already knows it was spam, a duplicate or a mention flood, so by default none of that earns anything. Closing the usual way a leaderboard is gamed costs nothing when you were scanning anyway.

Rank cards, and where the XP comes from

A rendered rank card members actually want to post, from the /rank command, with a leaderboard beside it. XP can count for more in the channels you care about and for the roles you choose, and not at all in the ones you exclude. Role rewards can stack as they are earned or replace each other like ranks.

Invite tracking that admits what it does not know

Who brought each member, and how many of them stayed. Rejoins are not counted twice by default, because an invite number that goes up when the same person leaves and comes back is a number nobody can act on. Where two people joined too close together to tell apart, it records that it could not tell rather than picking one.

Support

Somewhere for a member to ask.

A ticket desk that runs inside your server, on Guard and above.

A panel, and the doors on it

One message with a button on it, posted where you choose. Each button is a ticket type with its own label and its own opening line, because “describe what happened” and “tell us your order number” are not the same conversation and the difference is almost all in the first message. Editing the panel edits the message already there rather than posting a second one for somebody to find later.

The engine steps back inside a ticket

Scanning is off inside tickets by default, and that is deliberate. A member reporting a fraud has to paste the address, the link and the screenshot that make it a fraud. Being deleted by the bot they are reporting it to is the worst possible introduction to the product. You can turn a relaxed pass back on if you would rather keep impersonation and fake-support detection running.

Claimed, so two people are not answering

Staff take a ticket before replying to it, and everyone else can see it is taken. A second person pressing claim is told who got there first rather than quietly joining the same conversation.

The transcript is written before the channel goes

Closing posts the conversation to an archive channel first, then archives or deletes. If posting the transcript fails, neither happens and the channel is left intact, so there is no order of events in which closing a ticket loses what was said in it.

It does not quietly stop at fifty

Discord caps a category at fifty channels, which a busy support server reaches. You give Wardnox several categories and it moves to the next one when the current has no room, rather than having a ceiling that is not configurable and is simply where ticketing stops working.

One open ticket per member, by default

Somebody who can open ten channels can make ten channels nobody reads, and the usual result is a support category staff stop opening. Raise it when you have the people to answer.

Operations

Answering “what happened, and why”.

Every decision is a record you can read, attribute and reverse.

The arithmetic, rendered

Both the dashboard and the Discord log embed show the score derivation line by line, including a line for every detector that hit its ceiling and what it would otherwise have scored.

Moderator actions in the log

False positive, trust, ignore, timeout, kick, ban, and allow or block the domain, all from the log entry itself. Marking a false positive also attributes it to every rule that fired, so rule performance stays honest.

Analytics, which is what history buys you

What was scanned, logged, deleted and acted on, over time, with the rules doing the most work ranked beside it. Your plan decides how far back it reaches, and that is the one thing on the pricing table you cannot see a preview of, so it is worth saying plainly: the same charts on every plan, over a longer window on the larger ones. A day with nothing recorded is still drawn as a day, because a gap in a chart and a quiet Tuesday should not look the same.

Per-rule false-positive rates

A rule getting a few wrong is normal. A rule getting many wrong is not a rule to soften, it is a rule to rewrite or delete, and the dashboard tells you which of yours is which.

The dashboard gets smaller while you are still setting up

There are a lot of settings pages, which is the product’s strength and a poor first impression. Until the required steps are done you are shown the four the checklist actually sends you to, because tuning a configuration you have not chosen yet is not something anybody needs to do on day one. It is a reduction rather than a restriction: every other page stays reachable by its address, nothing is disabled, and the full sidebar comes back the moment setup is complete.

One page that answers “is it working”

Protection status in words rather than a green tick, what has happened recently, and whatever setup step is still outstanding. It is the page you land on, and it is built to be the only one you need to open on a normal day.

It audits your server, not just your messages

Every other page configures how Wardnox reads messages. One reads the server itself: its roles, its permissions, and whether the enforcement you configured can actually run. Discord refuses to let a bot time out or ban anybody whose highest role sits above its own, and it refuses at the moment of enforcement rather than the moment you set it up. So a server can hold a careful configuration that silently cannot execute: the log shows a decision, the action never happens, and nothing joins the two up. The rest of that page is advice. That finding is a bug report.

Deletion tracking, if you want it

Off until you turn it on, and free on every plan. It records messages deleted in your server and who deleted them, which is how a scammer clearing their own posts stops being invisible. Where Discord will not say who did it, the record says so plainly rather than guessing: “deleted by the author” and “could not be attributed” are different words for different things. Thirty days by default, and it skips Wardnox’s own enforcement so the log is not a copy of your security log.

The playground

Runs your real rules against real text through the same engine, returning the full normalisation ladder, every parsed URL and the complete score derivation. It cannot reach Discord.

Config snapshots

Taken automatically before every settings change, profile switch and import. Restoring is itself snapshotted, so a restore can be undone.

Backups that are verified, not assumed

Nightly, off-platform, and checked twice: a custom-format archive keeps its table of contents at the front, so a file truncated to its first 200 KB still lists every table and exits zero. The archive is also restored and its rows counted. An untested backup is a hypothesis.

Start with the parts you need.

Almost all of this is off until you turn it on. Join the whitelist and we will get in touch when your server can be added.

No spam, no newsletter. One email when your server can be added.