Skip to content

Commit 84715e1

Browse files
committed
Users can deselect roles to remove them
1 parent 9312729 commit 84715e1

1 file changed

Lines changed: 16 additions & 5 deletions

File tree

application/src/main/java/org/togetherjava/tjbot/commands/basic/RoleSelectCommand.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)