Security engine

Twenty detectors. Four stages. Nothing acts that you did not configure.

The engine depends on neither Discord nor the database, which is what makes testing a rule structurally incapable of touching your server rather than merely careful about it.

20Independent detectors
4Detection stages
8Resolved forms per message
84Distinct reason codes
1900+Tests passing

The detectors

Every one has a ceiling it cannot exceed.

Each detector contributes evidence up to a limit, and no further, however much it found. Where those limits sit is visible and tunable in your dashboard. It is not published here, for reasons that should be obvious.

Content

What the message actually says, once any disguise has been undone.

Word rules
Your own terms, checked past the disguises
Pattern rules
Your own patterns, safety checked before they run
Link analysis
Look-alike domains and links that hide where they go
Masked links
A label that disagrees with its real destination
Server invites
Invites to elsewhere, including disguised ones
Obfuscation
Text assembled to defeat a naive filter
Attachments
Executables and files pretending to be something else
Character spam
Emoji floods, shouting, repetition
Profanity
Swearing and slurs, from lists you switch on
Support impersonation
The shapes a fake help desk takes
Wallet and seed scams
Phrasing that only ever precedes a theft

Behaviour

What this account has been doing lately. Editing a message is never counted as flooding.

Message rate
Floods, measured over a window you set
Repetition
The same thing again, and near enough the same
Mention spam
Mass pings and everyone abuse

Identity

Who is speaking. Age and profile are indicators, never a verdict on their own.

Account age
How new the account is. An indicator, never proof
Membership age
How new to your server. An indicator, never proof
Staff impersonation
Names shadowing the people members trust
Profile and status
A scam parked somewhere other than a message
Bots and webhooks
Automated accounts are scanned too

External

Off until you turn it on, never consulted when you are only testing, and metered rather than withheld.

AI review
A second opinion on the genuinely ambiguous. Spends credits, and capped daily on Free

What your moderators see

Every decision arrives with its evidence.

This is the engine’s own output, not a mock-up of it. The message below was put through the real engine, and what it posted is rendered here as it was returned: the band it landed in, what it did, why, and the four other signals that agreed.

#general
WardnoxAPPtoday at 14:02
🔴 SECURITY EVENT
User
@Member One
member_one
000000000000000010
Channel
#general
Risk
CRITICAL
Action
Message deleted + member timed out + member banned (1 hour)
Why this was flagged
Link text claims to point at "discord.gg/nitro" but actually points at "d1scord-nitr0.ru". The visible text and the real destination do not match.
Link deception
Visible link: discord.gg/nitro
Actual destination: https://d1scord-nitr0.ru/claim
Other signals (4)
ℹ️ External link
🟠 Invite to another Discord server
🟢 Recently created Discord account
🟢 Recently joined this server
Message
Jump to message
000000000000000020
Message content
FREE NITRO for the first 100! Claim: [discord.gg/nitro](https://d1scord-nitr0.ru/claim)
False positiveTrust userIgnore user
Timeout 10mKickBan
Allow d1scord-nitr0.ruBlock d1scord-nitr0.ru
Your moderators see the scoring behind this decision. This page does not show it.
#mod-log
WardnoxAPPtoday at 14:02
✅ Verified
@Member One · member_one
Account age
3 days
One line per attempt at the gate, small on purpose: this channel is read at a glance during a raid.

Monitor mode says what it would have done.

The same message again, on a server that has not switched enforcement on. Nothing was deleted and nobody was timed out. The verdict is identical and the action is hypothetical, which is the point of watching first.

#general
WardnoxAPPtoday at 14:02
🔴 SECURITY EVENT · MONITOR MODE
User
@Member One
member_one
000000000000000010
Channel
#general
Risk
CRITICAL
Would have done
Message deleted + member timed out + member banned (1 hour)
_Monitor mode is on. Nothing was actually done. Switch to Enforce mode in the dashboard when you are satisfied with your rules._
Why this was flagged
Link text claims to point at "discord.gg/nitro" but actually points at "d1scord-nitr0.ru". The visible text and the real destination do not match.
Link deception
Visible link: discord.gg/nitro
Actual destination: https://d1scord-nitr0.ru/claim
Other signals (4)
ℹ️ External link
🟠 Invite to another Discord server
🟢 Recently created Discord account
🟢 Recently joined this server
Message
Jump to message
000000000000000020
False positiveTrust userIgnore user
Timeout 10mKickBan
Allow d1scord-nitr0.ruBlock d1scord-nitr0.ru

Safety of the platform itself

The engine has to survive what you configure.

A security tool that can be brought down by its own rules is a liability. These are the defences that point inward.

Your rules cannot hang your server

Patterns are checked for dangerous constructions before they can be saved, then run isolated and time bounded. One that would otherwise run away is stopped, and Wardnox can tell you which one it was rather than leaving you to bisect your own ruleset.

Domains are matched properly

A familiar name buried inside an unfamiliar domain is not that domain. Wardnox resolves what a domain genuinely is rather than comparing the end of a string, which is the single most common way naive filters get walked past.

A rule that misfires pulls itself

Wardnox watches how often each of your rules fires relative to what it is seeing. One that starts behaving like a mistake stops enforcing and your moderators are notified. It keeps logging, because silently disabling a rule somebody wrote is its own kind of surprise.

Following a link cannot be turned inward

When link resolution is enabled, every protection applies to every hop rather than only the first, and Wardnox refuses to be aimed at anything on your own infrastructure. It never reads, parses or executes what it finds. It only wants to know where the link ended up.

One failure is not an outage

Each stage settles independently. Something timing out or throwing removes that one opinion and nothing else. The message is still assessed, and the bot never falls over because Discord said no.

Your servers cannot see each other

Every stored row belongs to exactly one server, and every read is filtered by that on the row being read rather than somewhere upstream. The boundary is covered by tests that run against a real database, not by convention.

Optional, and doubly gated

Nothing goes to a third party by default.

AI review is off until an administrator of your server switches it on, andthe provider has to be configured on our side as well. Being on a paid plan does not turn it on: a plan decides what you may enable, never what runs. When it is on, what leaves is the minimum needed to ask the question, and never user IDs, usernames, channel IDs or guild IDs.

Several independent limits hold the AI stage down, and they are enforced outside it: a provider should not be trusted to police its own influence.

See it assess your own traffic.

Monitor mode first, always. Join the whitelist and we will be in touch when your server can be added.

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