Skip to content

Commit e2c833a

Browse files
Fix /suggestions reset command and other button errors
1 parent 2eb4e78 commit e2c833a

3 files changed

Lines changed: 37 additions & 16 deletions

File tree

src/main/java/technobot/commands/suggestions/SuggestionsCommand.java

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,27 @@
55
import net.dv8tion.jda.api.entities.Emoji;
66
import net.dv8tion.jda.api.entities.Guild;
77
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
8+
import net.dv8tion.jda.api.exceptions.ContextException;
9+
import net.dv8tion.jda.api.exceptions.ErrorHandler;
810
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
911
import net.dv8tion.jda.api.interactions.commands.OptionType;
1012
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
1113
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
14+
import net.dv8tion.jda.api.interactions.components.ActionRow;
1215
import net.dv8tion.jda.api.interactions.components.buttons.Button;
16+
import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
17+
import net.dv8tion.jda.api.requests.ErrorResponse;
1318
import technobot.TechnoBot;
1419
import technobot.commands.Category;
1520
import technobot.commands.Command;
1621
import technobot.data.GuildData;
1722
import technobot.handlers.SuggestionHandler;
23+
import technobot.listeners.ButtonListener;
1824
import technobot.util.embeds.EmbedUtils;
1925

2026
import java.util.ArrayList;
27+
import java.util.List;
28+
import java.util.concurrent.TimeUnit;
2129

2230
/**
2331
* Admin command to setup and modify the suggestion board.
@@ -110,13 +118,24 @@ public void execute(SlashCommandInteractionEvent event) {
110118
return;
111119
}
112120
case "reset" -> {
113-
String userID = event.getUser().getId();
121+
long userID = event.getUser().getIdLong();
114122
text = "Would you like to reset the suggestions system?\nThis will delete **ALL** data!";
115-
event.getHook().sendMessageEmbeds(EmbedUtils.createDefault(text))
116-
.addActionRow(
117-
Button.success("suggestions:yes:"+userID, Emoji.fromMarkdown("\u2714")),
118-
Button.danger("suggestions:no:"+userID, Emoji.fromUnicode("\u2716")))
119-
.queue();
123+
List<Button> components = new ArrayList<>();
124+
components.add(Button.success("suggestions:yes:"+userID, Emoji.fromMarkdown("\u2714")));
125+
components.add(Button.danger("suggestions:no:"+userID, Emoji.fromUnicode("\u2716")));
126+
ButtonListener.buttons.put(userID, components);
127+
event.getHook().sendMessageEmbeds(EmbedUtils.createDefault(text)).addActionRow(components).queue(interactionHook -> {
128+
// Timer task to disable buttons and clear cache after 3 minutes
129+
Runnable task = () -> {
130+
List<Button> actionRow = ButtonListener.buttons.get(userID);
131+
for (int i = 0; i < actionRow.size(); i++) {
132+
actionRow.set(i, actionRow.get(i).asDisabled());
133+
}
134+
interactionHook.editMessageComponents(ActionRow.of(actionRow)).queue(null, new ErrorHandler().ignore(ErrorResponse.UNKNOWN_MESSAGE));
135+
ButtonListener.buttons.remove(userID);
136+
};
137+
ButtonListener.executor.schedule(task, 3, TimeUnit.MINUTES);
138+
});
120139
return;
121140
}
122141
}

src/main/java/technobot/commands/utility/HelpCommand.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
import net.dv8tion.jda.api.EmbedBuilder;
44
import net.dv8tion.jda.api.entities.MessageEmbed;
55
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
6+
import net.dv8tion.jda.api.exceptions.ErrorHandler;
67
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
78
import net.dv8tion.jda.api.interactions.commands.OptionType;
89
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
910
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
1011
import net.dv8tion.jda.api.interactions.components.ActionRow;
1112
import net.dv8tion.jda.api.interactions.components.buttons.Button;
1213
import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
14+
import net.dv8tion.jda.api.requests.ErrorResponse;
1315
import net.dv8tion.jda.api.requests.restaction.interactions.ReplyCallbackAction;
1416
import technobot.TechnoBot;
1517
import technobot.commands.Category;
@@ -85,7 +87,7 @@ public void execute(SlashCommandInteractionEvent event) {
8587
List<Button> actionRow = ButtonListener.buttons.get(userID);
8688
actionRow.set(0, actionRow.get(0).asDisabled());
8789
actionRow.set(2, actionRow.get(2).asDisabled());
88-
interactionHook.editOriginalComponents(ActionRow.of(actionRow)).queue();
90+
interactionHook.editOriginalComponents(ActionRow.of(actionRow)).queue(null, new ErrorHandler().ignore(ErrorResponse.UNKNOWN_MESSAGE));
8991
ButtonListener.buttons.remove(userID);
9092
ButtonListener.menus.remove(userID);
9193
};

src/main/java/technobot/listeners/ButtonListener.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,29 +24,29 @@ public class ButtonListener extends ListenerAdapter {
2424
@Override
2525
public void onButtonInteraction(ButtonInteractionEvent event) {
2626
// Check that these are 'help' buttons
27-
String[] args = event.getComponentId().split(":");
27+
String[] pressedArgs = event.getComponentId().split(":");
2828

2929
// Check if user owns this menu
30-
long userID = Long.parseLong(args[2]);
30+
long userID = Long.parseLong(pressedArgs[2]);
3131
if (userID != event.getUser().getIdLong()) return;
3232
List<Button> components = buttons.get(userID);
3333
if (components == null) return;
34+
String[] storedArgs = components.get(0).getId().split(":");
3435

35-
if (args[0].equals("suggestions")) {
36-
if (args[1].equals("yes")) {
36+
if (pressedArgs[0].equals("suggestions") && storedArgs[0].equals("suggestions")) {
37+
if (pressedArgs[1].equals("yes")) {
3738
event.deferEdit().queue();
3839
GuildData.get(event.getGuild()).suggestionHandler.reset();
3940
MessageEmbed embed = EmbedUtils.createSuccess("Suggestion system was successfully reset!");
4041
event.getHook().editOriginalComponents(new ArrayList<>()).setEmbeds(embed).queue();
41-
} else if (args[1].equals("no")) {
42+
} else if (pressedArgs[1].equals("no")) {
4243
event.deferEdit().queue();
4344
MessageEmbed embed = EmbedUtils.createError("Suggestion system was **NOT** reset!");
4445
event.getHook().editOriginalComponents(new ArrayList<>()).setEmbeds(embed).queue();
4546
}
4647
}
47-
48-
if (args[0].equals("help")) {
49-
if (args[1].equals("next")) {
48+
else if (pressedArgs[0].equals("help") && storedArgs[0].equals("help")) {
49+
if (pressedArgs[1].equals("next")) {
5050
// Move to next embed
5151
int page = Integer.parseInt(components.get(1).getId().split(":")[2]) + 1;
5252
List<MessageEmbed> embeds = menus.get(userID);
@@ -60,7 +60,7 @@ public void onButtonInteraction(ButtonInteractionEvent event) {
6060
buttons.put(userID, components);
6161
event.editComponents(ActionRow.of(components)).setEmbeds(embeds.get(page)).queue();
6262
}
63-
} else if (args[1].equals("prev")) {
63+
} else if (pressedArgs[1].equals("prev")) {
6464
// Move to previous embed
6565
int page = Integer.parseInt(components.get(1).getId().split(":")[2]) - 1;
6666
List<MessageEmbed> embeds = menus.get(userID);

0 commit comments

Comments
 (0)