A single explicit image in a public channel can drive members away and put your server at risk under Discord's rules. A Discord NSFW bot for moderation scans what people post and removes explicit images before most members see them.
We only list bots that block NSFW content, not bots that serve it. Features come from each bot's own website, documentation or listing, checked on October 31, 2026. We did not run them side by side, so test your choice on a private server first.
| Option | Scans | Actions | Runs on |
|---|---|---|---|
| Moderator Bot | Images, GIFs, stickers, video frames | Deletes by default; optional strikes, timeouts, bans | Hosted |
| SfwBot | Images, plus hash blacklists | Configurable actions, strikes, logs | Hosted |
| DeGore | Images and GIFs in non-NSFW channels | Deletes; category settings with /config | Hosted |
| Beholder | Images, GIFs, video, text inside images | Delete, log, moderator review | Self-hosted, open source |
| Your own bot + NSFW Detect | Whatever your code sends | Anything your code does | Your server |
1. Moderator Bot
Moderator Bot says it "checks images, GIFs, stickers and video frames" and deletes NSFW media from day one. Strikes, timeouts and bans only start if you enable them. Best for servers that want broad media coverage and a quick setup.
2. SfwBot
SfwBot combines image detection with hash-based blacklists, and you adjust sensitivity, whitelists and actions in a dashboard. Best for communities that want NSFW filtering and general moderation in one bot.
3. DeGore
DeGore scans images sent in non-NSFW channels, and its bot listing says it deletes explicit images and GIFs automatically. Best for admins who want a focused image filter. Its invite link requests Administrator permission, so review that first.
4. Beholder
Beholder is open source under Apache-2.0. It reads text inside images, blocks known images by hash, detects NSFW imagery, and scans GIFs and videos. Best for technical teams that want to host the code themselves.
5. Build Your Own with an NSFW Detection API
A custom bot lets you decide what is removed in each server. The NSFW Detect API returns top-level categories with a confidence score, so your rules fit in a small dictionary:
import os import requests API_URL = "https://nsfw-detect3.p.rapidapi.com/nsfw-detect" HEADERS = { "x-rapidapi-host": "nsfw-detect3.p.rapidapi.com", "x-rapidapi-key": os.environ["RAPIDAPI_KEY"], } # Your server rules: top-level category -> minimum confidence to delete DELETE_RULES = { "Explicit": 50, "Non-Explicit Nudity of Intimate parts and Kissing": 70, "Violence": 70, "Visually Disturbing": 70, "Hate Symbols": 70, "Drugs & Tobacco": 80, "Gambling": 80, "Alcohol": 80, } def check_attachment(image_url): """Return ("delete", category, score) or ("allow", None, None).""" response = requests.post(API_URL, headers=HEADERS, data={"url": image_url}) for label in response.json()["body"]["ModerationLabels"]: minimum = DELETE_RULES.get(label["Name"]) if label["ParentName"] == "" and minimum and label["Confidence"] >= minimum: return "delete", label["Name"], round(label["Confidence"], 1) return "allow", None, None We ran this function on real images through the live API:
For the full bot with discord.py, warnings and a mod log channel, follow the Discord NSFW moderation bot tutorial.
Need your own rules per category? Try the NSFW Detect API on your server's images.


