I filed a GDPR Article 17 erasure request. After a long email battle, Discord did offer to delete the messages I no longer had access to (if I provided them with IDs from my data package), but wouldn't go further, citing other users' interest in the conversation. They said I could either delete all my other messages manually, one at a time, or delete my whole account (which merely anonymizes them to "Deleted User"). I wasn't particularly inclined to click delete hundreds of thousands of times, so I built this.
How it works: your export already lists the exact channel and message IDs for everything you've posted, so discord-delete sends one DELETE per message against the same REST endpoint the client uses. The search API is never used. Pacing is adaptive: AIMD off a floor, plus obeying Discord's rate-limit headers, so it settles near the fastest rate Discord tolerates. It runs as a TUI/headless, is open source (MIT), and is packaged as a single Go binary. Requests are made to Discord, plus ntfy for progress updates if you opt in and a once-a-day version check against GitHub releases (opt out with an env var). Token storage is opt-in to the OS keyring.
The two caveats are that automating a user account is against Discord's ToS and can get it banned, and a large account will take days, which is a limit set by Discord.
I've been thinking about a similar tool for Reddit next, working from their data export the same way, since a quick search didn't turn up anything up to my standards. Please do point me towards anything good that exists. The scripts I found on GitHub either didn't handle rate limits well or required you to go through Reddit's whole API signup process.