@@ -190,18 +190,18 @@ public void onSelectionMenu(@NotNull SelectionMenuEvent event, @NotNull List<Str
190190 List <Role > guildRoles = Objects .requireNonNull (event .getGuild ()).getRoles ();
191191 List <String > roleIds = guildRoles .stream ().map (Role ::getId ).collect (Collectors .toList ());
192192
193- List <Role > roles = new ArrayList <>();
193+ List <Role > selectedRoles = new ArrayList <>();
194194 for (SelectOption role : Objects .requireNonNull (event .getSelectedOptions ())) {
195195 if (roleIds .contains (role .getValue ())) {
196- roles .add (guildRoles .get (roleIds .indexOf (role .getValue ())));
196+ selectedRoles .add (guildRoles .get (roleIds .indexOf (role .getValue ())));
197197 }
198198 }
199199
200200 // True if the event option was 'choose'
201201 if (event .getMessage ().isEphemeral ()) {
202202
203203 SelectionMenu .Builder menu = SelectionMenu .create (generateComponentId (member .getId ()));
204- menu .setPlaceholder ("Select your roles" ).setMaxValues (roles .size ());
204+ menu .setPlaceholder ("Select your roles" ).setMaxValues (selectedRoles .size ());
205205
206206 for (SelectOption roleOption : Objects .requireNonNull (event .getSelectedOptions ())) {
207207 Role role = guildRoles .get (roleIds .indexOf (roleOption .getValue ()));
@@ -218,14 +218,25 @@ public void onSelectionMenu(@NotNull SelectionMenuEvent event, @NotNull List<Str
218218 return ;
219219 }
220220
221+ List <SelectOption > menuOptions =
222+ Objects .requireNonNull (event .getInteraction ().getComponent ()).getOptions ();
223+
224+ // Remove deselected roles
225+ for (SelectOption option : menuOptions ) {
226+ Role role = guildRoles .get (roleIds .indexOf (option .getValue ()));
227+ if (!selectedRoles .contains (role )) {
228+ Objects .requireNonNull (event .getGuild ()).removeRoleFromMember (member , role ).queue ();
229+ }
230+ }
231+
221232 // Add the selected roles to the member
222233 for (Role role : guildRoles ) {
223- if (roles .contains (role )) {
234+ if (selectedRoles .contains (role )) {
224235 Objects .requireNonNull (event .getGuild ()).addRoleToMember (member , role ).queue ();
225236 }
226237 }
227238
228- event .reply ("Added your roles!" ).setEphemeral (true ).queue ();
239+ event .reply ("Updated your roles!" ).setEphemeral (true ).queue ();
229240 }
230241
231242 /**
0 commit comments