9007f210ef
Introduce a rapidSpamTracker to detect same messages posted across channels within a short window and return prior message IDs for cleanup. Refactor spam detection to collect scannable text from message content, embeds and attachments, simplify role-ping and link heuristics, and mark spam when a role ping + link is duplicated across channels. Update index to use the tracker/collector, delete prior spam messages, improve moderation flow (ban → kick fallback), report clearer action/error labels, and warn about missing channel permissions. Update commands display text for detection/actions and bump .env.example MIN_ACCOUNT_AGE_DAYS default to 7.
Anti-Spam Discord Bot
Automatically deletes phishing and mass-mention spam, then bans the sender. Works across multiple servers from a single bot instance.
What it catches
- Phishing URLs (fake Discord / Nitro / Steam links, typosquat domains)
- Suspicious TLDs combined with spam patterns
- Messages with image links plus other URLs
@everyoneand large role mentions (default: roles with 50+ members)- Mass mentions paired with links
- Optional: stricter rules for very new accounts
Setup
- Create a bot at the Discord Developer Portal.
- Under Bot → Privileged Gateway Intents, enable Message Content Intent.
(Required — the bot cannot read messages without this. You do not need Server Members Intent.) - Invite the bot using a URL that includes the
applications.commandsscope, plusBan Members,Manage Messages,Read Message History, andView Channels.
In the Developer Portal: OAuth2 → URL Generator → scopes:bot+applications.commands. - Copy
.env.exampleto.envand setDISCORD_TOKENandAPPLICATION_ID. - Install and run:
npm install
npm start
- In each server, run
/antispam set-logto choose a mod log channel.
Commands not showing?
/antispamis only visible to users with Manage Server permission.- Restart the bot after inviting it — commands are registered per-server on startup.
- Or deploy instantly: set
DEPLOY_GUILD_IDto your server ID in.env, then runnpm run deploy-commands. - Re-invite the bot if it was added without the
applications.commandsscope.
Per-server configuration
Use /antispam in any server (requires Manage Server permission):
| Command | Description |
|---|---|
/antispam set-log |
Set the moderation log channel for this server |
/antispam add-trusted-role |
Exempt a role from spam checks |
/antispam remove-trusted-role |
Remove a trusted role |
/antispam status |
View this server's settings |
/antispam enable / /antispam disable |
Turn protection on or off per server |
Settings are stored in data/guild-settings.json on disk.
Global configuration (.env)
These apply to every server the bot is in:
| Variable | Default | Purpose |
|---|---|---|
MAX_ROLE_MENTION_SIZE |
50 |
Flag role pings at or above this size |
BAN_ON_SPAM |
true |
Ban offenders (set false to only delete) |
TRUSTED_USER_IDS |
— | User IDs that bypass checks on all servers |
Admins and users with Manage Server are always trusted.
Notes
- The bot needs a role above spammers in each server's role list to ban them.
- Test in a private channel first with
BAN_ON_SPAM=falseif you want delete-only mode.