024f1082ef
Replace per-case trackers with a unified key-based tracker and tighten detection logic. Introduces buildMessageTrackingKeys/collectTrackableText to canonicalize text, extract invite codes, include image fingerprints and dedupe keys; replaces trackCrossChannelMessage/trackImageOnlySpam with trackCrossChannelKeys that tracks multiple normalized keys. Simplifies detectSpam to use trackable content and invite-aware link handling, updates message preview/attachment embedding, and adjusts command/help text to reflect the new "same content across channels" rule. Overall reduces duplicate-prior merging and streamlines cross-channel spam handling.
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.