A Discord reaction role bot with buttons and a menu
Post a role picker and members choose their own roles. Each button gives a role, and a second press takes it back. A menu of colours swaps one name colour for another. It runs on a slash command, buttons and a menu, so it works on the Free plan.
What it does
- A moderator runs /roles panel in the channel where members pick roles.
- The bot posts the panel: four buttons for ping roles and a menu of name colours.
- Pressing a button gives that role, or takes it away if the member has it already. Only they see the reply.
- Picking a colour takes away any other colour role on the list and gives the new one. No colour takes it away.
Commands
/roles panelPosts the role picker in the current channel. Needs the Manage Roles permission.
Before you add it
- Roles named Announcements, Events, Giveaways and Game night, and Red, Orange, Yellow, Green, Blue and Purple for colours. Rename them to suit your server.
- The bot's role placed above all of them, so it's allowed to hand them out.
How adding it works
Press Add to my server and Buildcord asks you to sign up or sign in. It then makes a new bot from this template, with every flow already drawn. Paste your Discord bot token, add the bot to your server with the invite link and deploy. Nothing is final: the template is an ordinary bot you can open and change.
What you can change
- Point a button at any role by changing its label and data, or add more buttons, up to 20.
- Change the menu's choices. Each choice's label is the role it gives, and the colourRoles variable lists them all.
- Edit the panel's text in the Embeds page.
- Keep a button for members with a certain role by adding a role check first.
Questions
Why buttons and not emoji reactions?
Buttons work without the bot staying connected to Discord, so the template runs on the Free plan, and they keep working however old the message is. Reacting with emoji is a server event, which needs the Paid plan.
Can a member have more than one colour?
No. Picking a colour takes away every other role in the colourRoles variable first. The ping roles are separate, so members can have any of them at once.