Overview

Every message is checked against seven filters, in this fixed order. The first one that matches wins, and no further filters are checked for that message. AutoMod's own switch at the top of the page runs the whole set, and each filter has its own switch on its own card, so a filter that is off is skipped entirely. The Bad Words filter also needs at least one word in its list before it can match.

The page opens in a Simple view holding the seven filter cards, the exemption lists and one DM message. Advanced adds the per-filter DM wording, the per-filter exemptions, the across-channels repeat count, and the two repeat switches beside it.

Anti-Scam used to be its own page. Its two detectors live here now: pinging across several channels is the second half of Mass Mentions, and posting the same thing over and over is the Repeated Messages filter.

OrderFilterDetection
1Bad Words / PhrasesCase-insensitive substring match against your own word list
2Mass MentionsCounts @user/@role mentions in one message, and separately how many channels one member pinged in
3Discord Invitesdiscord.gg / discord.com/invite links
4LinksAny http(s):// URL
5Caps% of letters that are uppercase, above a minimum message length
6Anti-SpamMessage count from one user within a rolling time window
7Repeated MessagesThe same message from one member, counted in a row, within a window, or across channels

Filter Settings

Each card carries the filter's switch, what counts as a hit, and what happens when one does. All seven offer the same five actions.

FilterWhat you can setDefault action
Bad WordsYour word/phrase listDelete + Strike
Anti-SpamMessages threshold (2โ€“20, default 5) ยท window in seconds (2โ€“30, default 5)Delete + Strike + Timeout
CapsCaps % (30โ€“100, default 70) ยท Minimum message length (5โ€“50, default 10)Delete + Strike
Mass MentionsMentions in one message (2โ€“20, default 5) ยท channels pinged, with its own switch (0 = off) ยท window in seconds (3โ€“120, default 30)Delete + Strike + Timeout
Repeated MessagesTimes in a row (0โ€“20, default 4) ยท times within a window (0 = off) ยท across channels (0 = off) ยท window in seconds (3โ€“120, default 30) ยท only count repeats in one channel ยท count near-matches too ยท channels this filter ignoresDelete + Strike
Linksโ€”Delete + Strike
Invitesโ€”Delete + Strike

Repeated Messages

โš ๏ธ

Set Channels this filter ignores before you switch this on. A channel where people talk to a bot is the usual false positive: repeating one command, or one word, is normal there and this filter cannot tell that from spam. The list sits on the card itself, and a channel on it is removed from the count entirely rather than merely skipped, so repeats there never add up anywhere else either.

Three counts, and any one of them firing is enough. Set a count to 0 to switch that one off.

CountWhat it catches
Times in a rowThe same message posted back to back. Saying anything different resets the run
In secondsThe same message that many times inside the window, whatever was said in between
Across channelsThe same message in that many different channels inside the window, whatever the volume in each. This is what Anti-Scam used to catch

Only count repeats in one channel is on to begin with, so the first two counts only add up within a single channel and switching the filter on affects one room at a time. Turning it off makes them count wherever the member posts. The across-channels count ignores this setting, since counting channels is the whole point of it.

Count near-matches too widens matching from identical text to roughly 85% of the same words, on messages of four words or more, so changing one word each time does not dodge it. It is off to begin with because it is the half that can misfire on short or formulaic messages.

Messages with no text are not checked, so the same image posted repeatedly with no caption does not count.

Actions

Five actions, the same five on all seven filters:

ActionWhat happens
Delete + StrikeThe message is removed and a strike is recorded against the member
Delete + Strike + TimeoutThe same, then the member is timed out for that filter's Timeout length
Delete + Strike + MuteThe same, then the member is given the muted role for that filter's Timeout length
Delete + Strike + KickThe same, then the member is kicked
Delete + Strike + BanThe same, then the member is banned and a day of their messages is removed

Every action deletes the message and records a strike, so nothing a filter catches walks past your strike ladder. The only difference between them is what happens to the member on top of that. Each filter picks its own Timeout length beside its action, from 1 minute up to 1 week, and 10 minutes is used when nothing is chosen. That length applies to the timeout and mute actions.

There is no separate warn action. Delete + Strike + Warn DM was removed because it did exactly what Delete + Strike does: whether the member is DM'd is set on the DM card, not by the action.

๐Ÿ’ก

A strike from AutoMod moves the strike ladder like any other, so auto-kick and auto-ban fire when a filter hands out the strike that reaches them, rather than waiting for a moderator to act. Only the strike that actually crosses a threshold triggers anything, so nobody is punished for strikes they already had. The thresholds and severity tiers themselves live on the Strike Automation page.

Exemptions

Exemptions all sit on one card rather than inside the seven filter cards. Two global lists (Exempt Roles and Exempt Channels) bypass every filter entirely. Under Advanced, each filter can also have its own additional role and channel exemptions layered on top. Anyone with the Manage Messages permission is automatically exempt from every filter Aegis scans itself.

Native Discord AutoMod

Bad Words, Invites, Links and Mass Mentions set to Delete + Strike are mirrored into a real Discord AutoMod rule, so Discord blocks the message before it is ever posted and the member sees Discord's own notice rather than watching their message disappear. The strike and the DM are applied when Discord reports the block, since the message Aegis would have scanned was never sent. Your exempt roles and channels are written onto the rule, so they still apply. A Discord rule can only carry roles and channels, so the Manage Messages exemption does not travel with it: on a mirrored filter, a Manage Messages holder's message is blocked like anyone else's. The timeout, mute, kick and ban actions all punish the member rather than only removing the message, so those stay with Aegis's own scan, as do Anti-Spam, Caps and Repeated Messages, which Discord has no equivalent trigger for, and the channels-pinged half of Mass Mentions, which the mirrored rule does not count. This requires Aegis to have Manage Server, and the in-bot scanner keeps running as a fallback regardless.

Discord AutoMod rules you wrote yourself are a separate matter: they can be counted toward the same strike ladder with Your own Discord AutoMod rules count on the Strike Automation page. It is off unless you turn it on, and the hit is recorded as a strike rather than adding a timeout or a kick of its own.

DM on Removal

The DM on AutoMod Action card turns AutoMod DMs on, and the box beneath the switch holds the message every filter falls back to. Under Advanced, the same card holds a switch and a message box for each of the seven filters. Whether a filter DMs at all is decided here; no action sends a DM on its own.

When a filter acts, the message sent is its own text if it has any, otherwise the default at the top. There is no built-in wording. If the filter has nothing of its own and the default is blank, nothing is sent. Placeholders: {user} (mentions the member), {username} (their name, no ping), {server}, {filter}, {reason}. {user} used to print the member's name in AutoMod messages while it mentioned them everywhere else in the bot; it mentions them here too now, and anything already written was moved to {username} so nothing you had changed.

Logging

Every AutoMod action posts an embed to the AutoMod event on the Logging page, in the same style as every other server log: the member's identity block, the channel, when the message was sent, which filter caught it, what actually happened, the reason, and the message itself. Since every action records a strike, it also carries the member's strike count after it, and whether the DM reached them or their DMs were closed.

The Action line says what was actually done rather than what the filter was set to do. An action Discord refused isn't reported as though it went through. A filter handled by native AutoMod logs the same entry, noting that the message was blocked before it posted.

Separately, a message AutoMod removes is footed AutoMod in the Message Deleted log, with the filter and reason, rather than being credited to whoever wrote it.