A fast, resumable CLI tool to bulk-delete all your Discord messages, reactions, and account data before deleting your account.
When you delete your Discord account, your messages stay visible - only your username is anonymized to "Deleted User." discord-purger reads your GDPR data export to build a complete deletion manifest, then deletes messages in parallel across channels as fast as rate limits allow.
Warning: This tool uses your Discord user token to automate message deletion, which is against Discord's Terms of Service. Use at your own risk. Your account could be suspended. Discord provides no official way to bulk-delete your own messages.
- Parse your data package — Discord's GDPR export contains every message ID you ever sent. The tool reads this to build a complete deletion manifest with zero API calls.
- Search sweep — Catches messages sent after the export was generated using Discord's search API.
- Parallel deletion — Deletes messages across multiple channels simultaneously, as fast as rate limits allow. Resumes automatically if interrupted.
| discord-purger | delete-me-discord | Undiscord | |
|---|---|---|---|
| Discovery | Data package + search API | Full channel scan | Browser search |
| Threads/forums | Yes | No | Varies |
| Async parallel deletion | Yes | No (sequential) | No |
| Resume on crash | Yes | Partial | No |
| Reactions | Yes | Yes | No |
| Rate limiting | Proactive per-route tracking | Conservative fixed delays | Basic |
Requires Python 3.12+.
# With uv (recommended)
uv tool install discord-purger
# With pip
pip install discord-purger
# From source
git clone https://github.com/youruser/discord-purger
cd discord-purger
uv syncGo to Settings > Privacy & Safety > Request all of my Data in Discord. This can take up to 30 days to arrive.
Open Discord in your browser, press F12 to open developer tools, go to the Network tab, and look for the Authorization header on any request to discord.com/api. Copy that value.
Never share your token. It gives full access to your account.
# Dry run first to preview what will be deleted
discord-purger --package ~/Downloads/package.zip --token YOUR_TOKEN --dry-run -v
# Nuke it — delete messages, sweep for stragglers, clear profile,
# leave guilds, unfriend everyone. One command, walk away.
discord-purger --package ~/Downloads/package.zip --token YOUR_TOKEN --nuke--nuke runs the full sequence: delete all messages and reactions from the data package, search sweep for post-export messages, verification sweep to catch anything missed, clear your profile, leave all guilds, and unfriend everyone. It resumes if interrupted.
For more control, you can run individual steps:
# Just delete messages (no profile/guild/friend changes)
discord-purger --package ~/Downloads/package.zip --token YOUR_TOKEN
# Search-only mode (no data package needed, slower)
discord-purger --search-only --token YOUR_TOKEN
# Just the profile/guild/friend purge
discord-purger --search-only --token YOUR_TOKEN --full-purge--package PATH Path to Discord data package (zip or directory)
--search-only Run without a data package (uses search API only)
--token TOKEN Discord user token (or set DISCORD_TOKEN env var)
--dry-run Preview what would be deleted, no API calls
--state PATH Resume state file (default: ~/.config/discord-purger/state.json)
--concurrency N Max parallel channel workers (default: 10)
--no-sweep Skip the supplementary search sweep
--no-reactions Skip reaction deletion
--full-purge Also clear profile, reset nicknames, leave guilds, unfriend everyone
-v, --verbose Show detailed per-guild and per-channel progress
The tool saves progress to a state file after every 50 deletions and on shutdown (Ctrl+C). Just run the same command again — it picks up where it left off.
Press Ctrl+C once for a graceful shutdown (finishes in-flight deletes, saves state). Press Ctrl+C again to force quit.
Discord rate-limits deletions to roughly 1-5 per second per channel. With parallel channels (default 10), expect:
| Messages | Estimated time |
|---|---|
| 1,000 | ~10-30 minutes |
| 10,000 | ~2-5 hours |
| 100,000 | ~1-2 days |
The tool shows a live progress bar with ETA.
With --full-purge, the tool handles: messages, reactions, profile (avatar/bio/banner/pronouns), server nicknames, leaving guilds, and unfriending everyone.
You still need to manually:
- Disconnect linked accounts (Settings > Connections)
- Deauthorize third-party apps (Settings > Authorized Apps)
- Remove payment methods and cancel Nitro
- Change email to a throwaway (Discord retains the last email for 180 days)
- Then delete your account
--guild <id or name>— target specific guilds--channel <id>— target specific channels--before <date>/--after <date>— filter by date range--keep-last <N>— preserve the last N messages per channel
git clone https://github.com/youruser/discord-purger
cd discord-purger
uv sync --dev
uv run pytestDiscord aggressively rate-limits message deletion - typically 3-5 requests per second per channel, with harsher limits on older messages in large guilds. The tool handles this automatically, but you may notice:
- Long pauses (30-60s): Discord returns
429 Too Many Requestswith aRetry-Afterheader. The tool waits the required time and retries. This is normal. - Slower than expected: Reduce
--concurrency(try 3-5). More workers can trigger global rate limits that slow everything down. - "Rate limited" messages flooding the log: This usually means Discord has applied a stricter limit to your account. Let the tool run - it backs off correctly - but expect longer completion times.
Discord tokens rotate periodically. If you get 401 errors, grab a fresh token from your browser (see step 2 above).
Rarely, Discord refuses to delete a message (system messages, some webhook messages). The tool logs these and moves on. You can check the state file at ~/.config/discord-purger/state.json for skipped message IDs.
MIT