a panel people pick their own roles from, with buttons and dropdowns, not reactions. a reaction panel needs drain to read every reaction on an old message, breaks when somebody removes the emoji, and leaves a row of counts under the post. a component says what it does, works on a phone, and answers only the person who used it.

setting it up

open the dashboard, pick your server and go to self-roles. it does everything below without a message link. add a panel, pick its channel, and it’s posted when you save. each role gets an emoji from the server’s own, still or animated, or any emoji pasted in, plus its label, button colour and category. changes redraw a panel where it is, and taking a panel off the page deletes its message on save.
everything takes the message link (right-click the panel, copy message link) or its plain id, whichever you have. ,selfroles on its own lists every panel in the server. a panel holds 25 roles, which is as many as a dropdown can show. past that, use categories.

categories

for a server with more roles than fits one list: the card then shows a category dropdown. picking one opens a second picker, visible only to the person who clicked, holding that category’s roles. each category holds 25, and the panel stays one line in the channel however many roles are behind it. ,selfroles ungroup <link> @role puts a role back on the panel itself.

how picking behaves

,selfroles mode <link> single sets it. unique is accepted for single, and verify for keep, since that is what other bots call them.

how it looks

buttons come in grey, blurple, green and red, and a label can lead with an emoji. a role with no emoji of its own on the panel shows its role icon, the picture or emoji the server set on the role. nothing to add: change the icon in the server’s settings and the next redraw of the panel picks it up.
a role whose name has a space needs quotes: ,selfroles add <link> "north america".

what it will not do

  • it will not hand out a dangerous role. anything carrying administrator, manage server, manage roles, manage channels, manage webhooks, ban, kick, timeout or mention everyone is refused. a role anybody can give themselves is a role the next raider gives themselves too.
  • it checks again on every click, not only when the role was added, so a role handed a dangerous permission later stops being handed out.
  • it will not give a role above drain. discord refuses it, so drain says so when you add it rather than failing quietly when somebody clicks.
  • it never touches a role that is not on the panel, so picking from a panel can never remove somebody’s staff role.
  • it never answers in public. every reply is visible only to the person who clicked.

ways to type it

the group answers to selfroles, selfrole, reactionroles and rr.

every command

roles on join instead

if you want a role given automatically rather than chosen, that is autorole, which hands roles out the moment somebody arrives, with the same refusals.