Discord Role Management
Preview changes. Apply safely. Undo anytime.
The actual preview message you get before anything changes.
Nothing is applied until Proceed is clicked. This exact message is ephemeral, only the person who ran the command can see it.
Every safeguard the requirements asked for, none of the guesswork.
See exactly who gets added, removed, or couldn't be matched, before a single role is touched. Matching is case-insensitive, checked against nickname, then display name, then handle, in that order. Previews older than 30 minutes are discarded automatically rather than applied against a stale member list.
Uploaded the wrong file? /undo-sync reverts the last run completely. Every applied sync is logged with who ran it and when, visible any time via /list-role-syncs.
Large lists update the message in place as they process, so you always know it's still working.
Mark a role (like a free tier) as protected, and it is never touched by this bot, no matter what the file says.
One username per line, or the first column of a spreadsheet export. A header row is detected and skipped automatically.
Set up as many labeled profiles as you need (e.g. "members", "vip") each with its own role and its own undo history, independent of each other.
No dashboard to learn, no config to memorize.
/setup-role-sync
Pick a role using Discord's native picker and give it a short label (e.g. "members"). Run it again with a different label to add another profile. Optionally set a protected role that's never touched.
/sync-roles
Attach a .txt or .csv file and pick which profile's label it's for. Get a preview of exactly what will change, then confirm or cancel.
/list-role-syncs
See every profile configured in this server, which role each one manages, and who last ran a sync for it and when.
/undo-sync
Nothing here is a dead end. Reverts the most recently applied sync for a specific profile, one level of undo per label.
/remove-role-sync
Or go further and delete a profile plus its undo history entirely, for a discontinued tier or a mistyped label.