diff --git a/application/build.gradle b/application/build.gradle
index c2c2ff0886..498c83c251 100644
--- a/application/build.gradle
+++ b/application/build.gradle
@@ -46,7 +46,7 @@ dependencies {
implementation project(':utils')
implementation project(':formatter')
- implementation 'net.dv8tion:JDA:5.6.1'
+ implementation 'net.dv8tion:JDA:6.1.1'
implementation 'org.apache.logging.log4j:log4j-core:2.25.0'
runtimeOnly 'org.apache.logging.log4j:log4j-slf4j2-impl:2.25.0'
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/MessageContextCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/MessageContextCommand.java
index 83d9df594f..df7f6e2ad5 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/MessageContextCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/MessageContextCommand.java
@@ -1,12 +1,12 @@
package org.togetherjava.tjbot.features;
+import net.dv8tion.jda.api.components.buttons.ButtonStyle;
import net.dv8tion.jda.api.events.interaction.command.MessageContextInteractionEvent;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.events.interaction.component.EntitySelectInteractionEvent;
import net.dv8tion.jda.api.events.interaction.component.StringSelectInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
import net.dv8tion.jda.api.interactions.components.ComponentInteraction;
-import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
import org.togetherjava.tjbot.features.componentids.ComponentIdGenerator;
@@ -49,8 +49,8 @@ public interface MessageContextCommand extends BotCommand {
*
* Buttons or menus have to be created with a component ID (see
* {@link ComponentInteraction#getComponentId()},
- * {@link net.dv8tion.jda.api.interactions.components.buttons.Button#of(ButtonStyle, String, String)})
- * in a very specific format, otherwise the core system will fail to identify the command that
+ * {@link net.dv8tion.jda.api.components.buttons.Button#of(ButtonStyle, String, String)}) in a
+ * very specific format, otherwise the core system will fail to identify the command that
* corresponded to the button or menu click event and is unable to route it back.
*
* See {@link #acceptComponentIdGenerator(ComponentIdGenerator)} for more info.
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/SlashCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/SlashCommand.java
index 87cd91e187..51cc12f2fb 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/SlashCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/SlashCommand.java
@@ -1,5 +1,6 @@
package org.togetherjava.tjbot.features;
+import net.dv8tion.jda.api.components.buttons.ButtonStyle;
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
@@ -10,7 +11,6 @@
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;
import net.dv8tion.jda.api.interactions.components.ComponentInteraction;
-import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
import org.togetherjava.tjbot.features.componentids.ComponentIdGenerator;
@@ -82,8 +82,8 @@ public interface SlashCommand extends BotCommand {
*
* Buttons or menus have to be created with a component ID (see
* {@link ComponentInteraction#getComponentId()},
- * {@link net.dv8tion.jda.api.interactions.components.buttons.Button#of(ButtonStyle, String, String)})
- * in a very specific format, otherwise the core system will fail to identify the command that
+ * {@link net.dv8tion.jda.api.components.buttons.Button#of(ButtonStyle, String, String)}) in a
+ * very specific format, otherwise the core system will fail to identify the command that
* corresponded to the button or menu click event and is unable to route it back.
*
* See {@link #acceptComponentIdGenerator(ComponentIdGenerator)} for more info on the ID's.
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/UserContextCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/UserContextCommand.java
index 144c81dbe0..71142a106d 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/UserContextCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/UserContextCommand.java
@@ -1,12 +1,12 @@
package org.togetherjava.tjbot.features;
+import net.dv8tion.jda.api.components.buttons.ButtonStyle;
import net.dv8tion.jda.api.events.interaction.command.UserContextInteractionEvent;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.events.interaction.component.EntitySelectInteractionEvent;
import net.dv8tion.jda.api.events.interaction.component.StringSelectInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
import net.dv8tion.jda.api.interactions.components.ComponentInteraction;
-import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
import org.togetherjava.tjbot.features.componentids.ComponentIdGenerator;
@@ -50,8 +50,8 @@ public interface UserContextCommand extends BotCommand {
*
* Buttons or menus have to be created with a component ID (see
* {@link ComponentInteraction#getComponentId()},
- * {@link net.dv8tion.jda.api.interactions.components.buttons.Button#of(ButtonStyle, String, String)})
- * in a very specific format, otherwise the core system will fail to identify the command that
+ * {@link net.dv8tion.jda.api.components.buttons.Button#of(ButtonStyle, String, String)}) in a
+ * very specific format, otherwise the core system will fail to identify the command that
* corresponded to the button or menu click event and is unable to route it back.
*
* See {@link #acceptComponentIdGenerator(ComponentIdGenerator)} for more info.
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/basic/RoleSelectCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/basic/RoleSelectCommand.java
index 1b7c362e48..be2c361479 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/basic/RoleSelectCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/basic/RoleSelectCommand.java
@@ -2,6 +2,10 @@
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.Permission;
+import net.dv8tion.jda.api.components.actionrow.ActionRow;
+import net.dv8tion.jda.api.components.selections.SelectOption;
+import net.dv8tion.jda.api.components.selections.StringSelectMenu;
+import net.dv8tion.jda.api.components.selections.StringSelectMenu.Builder;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.IMentionable;
import net.dv8tion.jda.api.entities.Member;
@@ -16,8 +20,6 @@
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
-import net.dv8tion.jda.api.interactions.components.selections.SelectOption;
-import net.dv8tion.jda.api.interactions.components.selections.StringSelectMenu;
import org.jetbrains.annotations.Contract;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -183,7 +185,7 @@ private static boolean handleInteractableRolesSelected(IReplyCallback event,
private void sendRoleSelectionMenu(final CommandInteraction event,
final Collection extends Role> selectableRoles) {
- StringSelectMenu.Builder menu = StringSelectMenu
+ Builder menu = StringSelectMenu
.create(generateComponentId(Lifespan.PERMANENT, event.getUser().getId()))
.setPlaceholder("Select your roles")
.setMinValues(0)
@@ -197,7 +199,7 @@ private void sendRoleSelectionMenu(final CommandInteraction event,
event.getOption(TITLE_OPTION, "Select your roles:", OptionMapping::getAsString);
MessageEmbed embed = createEmbed(title, event.getOption(DESCRIPTION_OPTION).getAsString());
- event.replyEmbeds(embed).addActionRow(menu.build()).queue();
+ event.replyEmbeds(embed).addComponents(ActionRow.of(menu.build())).queue();
}
private static SelectOption mapToSelectOption(Role role) {
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/bookmarks/BookmarksListRemoveHandler.java b/application/src/main/java/org/togetherjava/tjbot/features/bookmarks/BookmarksListRemoveHandler.java
index 5f851d8b44..0c2b22d1ac 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/bookmarks/BookmarksListRemoveHandler.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/bookmarks/BookmarksListRemoveHandler.java
@@ -2,19 +2,19 @@
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.JDA;
+import net.dv8tion.jda.api.components.MessageTopLevelComponent;
+import net.dv8tion.jda.api.components.actionrow.ActionRow;
+import net.dv8tion.jda.api.components.buttons.Button;
+import net.dv8tion.jda.api.components.selections.SelectMenu;
+import net.dv8tion.jda.api.components.selections.SelectOption;
+import net.dv8tion.jda.api.components.selections.StringSelectMenu;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
import net.dv8tion.jda.api.entities.emoji.Emoji;
import net.dv8tion.jda.api.events.interaction.command.GenericCommandInteractionEvent;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.events.interaction.component.StringSelectInteractionEvent;
-import net.dv8tion.jda.api.interactions.components.ActionRow;
import net.dv8tion.jda.api.interactions.components.ComponentInteraction;
-import net.dv8tion.jda.api.interactions.components.LayoutComponent;
-import net.dv8tion.jda.api.interactions.components.buttons.Button;
-import net.dv8tion.jda.api.interactions.components.selections.SelectMenu;
-import net.dv8tion.jda.api.interactions.components.selections.SelectOption;
-import net.dv8tion.jda.api.interactions.components.selections.StringSelectMenu;
import org.togetherjava.tjbot.db.generated.tables.records.BookmarksRecord;
import org.togetherjava.tjbot.features.utils.MessageUtils;
@@ -75,7 +75,7 @@ private void handlePaginatedRequest(GenericCommandInteractionEvent event,
MessageEmbed pageEmbed = generatePageEmbed(bookmarks, requestType, 0);
- Collection components = new ArrayList<>();
+ Collection components = new ArrayList<>();
components.add(generateNavigationComponent(requestType, 0));
if (requestType == RequestType.REMOVE) {
@@ -199,7 +199,7 @@ private void updatePagination(ComponentInteraction event, Request request,
MessageEmbed pageEmbed =
generatePageEmbed(bookmarks, request.type, request.pageToDisplayIndex);
- Collection components = new ArrayList<>();
+ Collection components = new ArrayList<>();
components.add(generateNavigationComponent(request.type, request.pageToDisplayIndex));
if (request.type == RequestType.REMOVE) {
components.addAll(generateRemoveComponents(event.getJDA(), bookmarks, request.type,
@@ -209,7 +209,7 @@ private void updatePagination(ComponentInteraction event, Request request,
event.editMessageEmbeds(pageEmbed).setComponents(components).queue();
}
- private LayoutComponent generateNavigationComponent(RequestType requestType,
+ private MessageTopLevelComponent generateNavigationComponent(RequestType requestType,
int pageToDisplayIndex) {
UnaryOperator generateNavigationComponentId = name -> {
Request request = new Request(requestType, name, pageToDisplayIndex, Set.of());
@@ -226,7 +226,7 @@ private LayoutComponent generateNavigationComponent(RequestType requestType,
return ActionRow.of(buttonPrev, buttonNext);
}
- private List generateRemoveComponents(JDA jda,
+ private List generateRemoveComponents(JDA jda,
List extends BookmarksRecord> bookmarks, RequestType requestType,
int pageToDisplayIndex, Set bookmarksToRemoveChannelIDs) {
List pageEntries = getPageEntries(bookmarks, pageToDisplayIndex);
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/chatgpt/ChatGptCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/chatgpt/ChatGptCommand.java
index 163220d8a5..b40f8ce2bf 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/chatgpt/ChatGptCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/chatgpt/ChatGptCommand.java
@@ -2,13 +2,14 @@
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
+import net.dv8tion.jda.api.components.label.Label;
+import net.dv8tion.jda.api.components.textinput.TextInput;
+import net.dv8tion.jda.api.components.textinput.TextInputStyle;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.entities.SelfUser;
import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
-import net.dv8tion.jda.api.interactions.components.text.TextInput;
-import net.dv8tion.jda.api.interactions.components.text.TextInputStyle;
-import net.dv8tion.jda.api.interactions.modals.Modal;
+import net.dv8tion.jda.api.modals.Modal;
import org.togetherjava.tjbot.features.CommandVisibility;
import org.togetherjava.tjbot.features.SlashCommandAdapter;
@@ -65,14 +66,14 @@ public void onSlashCommand(SlashCommandInteractionEvent event) {
return;
}
- TextInput body = TextInput
- .create(QUESTION_INPUT, "Ask ChatGPT a question or get help with code",
- TextInputStyle.PARAGRAPH)
+ TextInput body = TextInput.create(QUESTION_INPUT, TextInputStyle.PARAGRAPH)
.setPlaceholder("Put your question for ChatGPT here")
.setRequiredRange(MIN_MESSAGE_INPUT_LENGTH, MAX_MESSAGE_INPUT_LENGTH)
.build();
- Modal modal = Modal.create(generateComponentId(), "ChatGPT").addActionRow(body).build();
+ Modal modal = Modal.create(generateComponentId(), "ChatGPT")
+ .addComponents(Label.of("Ask ChatGPT a question or get help with code", body))
+ .build();
event.replyModal(modal).queue();
}
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/code/CodeMessageHandler.java b/application/src/main/java/org/togetherjava/tjbot/features/code/CodeMessageHandler.java
index 601f91663f..1edf94050a 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/code/CodeMessageHandler.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/code/CodeMessageHandler.java
@@ -2,11 +2,12 @@
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
+import net.dv8tion.jda.api.components.actionrow.ActionRow;
+import net.dv8tion.jda.api.components.buttons.Button;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.events.message.MessageDeleteEvent;
import net.dv8tion.jda.api.events.message.MessageUpdateEvent;
-import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder;
import net.dv8tion.jda.api.utils.messages.MessageCreateData;
import net.dv8tion.jda.internal.requests.CompletedRestAction;
@@ -126,7 +127,7 @@ private MessageCreateData createCodeReplyMessage(long originalMessageId,
}
return new MessageCreateBuilder().setContent("Detected code, here are some useful tools:")
- .setActionRow(codeActionButtons)
+ .setComponents(ActionRow.of(codeActionButtons))
.build();
}
@@ -185,7 +186,7 @@ public void onButtonClick(ButtonInteractionEvent event, List args) {
// Apply the selected action
return event.getHook()
.editOriginalEmbeds(codeAction.apply(code))
- .setActionRow(createButtons(originalMessageId, codeAction));
+ .setComponents(ActionRow.of(createButtons(originalMessageId, codeAction)));
})
.queue();
}
@@ -232,7 +233,8 @@ public void onMessageUpdated(MessageUpdateEvent event) {
private Optional getCurrentActionFromCodeReply(Message codeReplyMessage) {
// The disabled action is the currently applied action
- return codeReplyMessage.getButtons()
+ return codeReplyMessage.getComponentTree()
+ .findAll(Button.class)
.stream()
.filter(Button::isDisabled)
.map(Button::getLabel)
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/componentids/ComponentIdGenerator.java b/application/src/main/java/org/togetherjava/tjbot/features/componentids/ComponentIdGenerator.java
index 55d3b460de..a6fea986f7 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/componentids/ComponentIdGenerator.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/componentids/ComponentIdGenerator.java
@@ -1,9 +1,9 @@
package org.togetherjava.tjbot.features.componentids;
+import net.dv8tion.jda.api.components.buttons.Button;
+import net.dv8tion.jda.api.components.buttons.ButtonStyle;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.components.ComponentInteraction;
-import net.dv8tion.jda.api.interactions.components.buttons.Button;
-import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
import org.togetherjava.tjbot.features.SlashCommand;
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/componentids/ComponentIdParser.java b/application/src/main/java/org/togetherjava/tjbot/features/componentids/ComponentIdParser.java
index 251fcec9cb..d5bb0098a6 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/componentids/ComponentIdParser.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/componentids/ComponentIdParser.java
@@ -1,9 +1,9 @@
package org.togetherjava.tjbot.features.componentids;
+import net.dv8tion.jda.api.components.buttons.Button;
+import net.dv8tion.jda.api.components.buttons.ButtonStyle;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.components.ComponentInteraction;
-import net.dv8tion.jda.api.interactions.components.buttons.Button;
-import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
import java.util.Optional;
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/filesharing/FileSharingMessageListener.java b/application/src/main/java/org/togetherjava/tjbot/features/filesharing/FileSharingMessageListener.java
index c040eaf065..a39b9ec7dd 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/filesharing/FileSharingMessageListener.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/filesharing/FileSharingMessageListener.java
@@ -1,5 +1,7 @@
package org.togetherjava.tjbot.features.filesharing;
+import net.dv8tion.jda.api.components.actionrow.ActionRow;
+import net.dv8tion.jda.api.components.buttons.Button;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.User;
@@ -7,7 +9,6 @@
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
-import net.dv8tion.jda.api.interactions.components.buttons.Button;
import org.kohsuke.github.GHGist;
import org.kohsuke.github.GHGistBuilder;
import org.kohsuke.github.GitHubBuilder;
@@ -190,7 +191,9 @@ private void sendResponse(MessageReceivedEvent event, String url, String gistId)
componentIdInteractor.generateComponentId(message.getAuthor().getId(), gistId),
"Delete");
- message.reply(messageContent).setActionRow(gist, delete).queue();
+ message.reply(messageContent)
+ .setComponents(ActionRow.of(gist), ActionRow.of(delete))
+ .queue();
}
private boolean isHelpThread(MessageReceivedEvent event) {
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/help/HelpSystemHelper.java b/application/src/main/java/org/togetherjava/tjbot/features/help/HelpSystemHelper.java
index dbb6ed55e2..f4cc96e31d 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/help/HelpSystemHelper.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/help/HelpSystemHelper.java
@@ -1,6 +1,9 @@
package org.togetherjava.tjbot.features.help;
import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.components.MessageTopLevelComponent;
+import net.dv8tion.jda.api.components.actionrow.ActionRow;
+import net.dv8tion.jda.api.components.buttons.Button;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
@@ -13,7 +16,6 @@
import net.dv8tion.jda.api.entities.channel.forums.ForumTag;
import net.dv8tion.jda.api.entities.channel.forums.ForumTagSnowflake;
import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
-import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.requests.RestAction;
import net.dv8tion.jda.internal.requests.CompletedRestAction;
import org.slf4j.Logger;
@@ -170,7 +172,7 @@ RestAction constructChatGptAttempt(ThreadChannel threadChannel,
MessageEmbed responseEmbed = generateGptResponseEmbed(answer, selfUser, originalQuestion);
return post.flatMap(_ -> threadChannel.sendMessageEmbeds(responseEmbed)
- .addActionRow(generateDismissButton(componentIdInteractor, messageId.get())));
+ .addComponents(generateDismissButton(componentIdInteractor, messageId.get())));
}
/**
@@ -200,9 +202,10 @@ public MessageEmbed generateGptResponseEmbed(String answer, SelfUser selfUser, S
.build();
}
- private Button generateDismissButton(ComponentIdInteractor componentIdInteractor, String id) {
+ private MessageTopLevelComponent generateDismissButton(
+ ComponentIdInteractor componentIdInteractor, String id) {
String buttonId = componentIdInteractor.generateComponentId(id);
- return Button.danger(buttonId, "Dismiss");
+ return ActionRow.of(Button.danger(buttonId, "Dismiss"));
}
private Optional prepareChatGptQuestion(ThreadChannel threadChannel,
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/jshell/JShellCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/jshell/JShellCommand.java
index f5ebe81f3f..3f8ff716a8 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/jshell/JShellCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/jshell/JShellCommand.java
@@ -1,6 +1,9 @@
package org.togetherjava.tjbot.features.jshell;
import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.components.label.Label;
+import net.dv8tion.jda.api.components.textinput.TextInput;
+import net.dv8tion.jda.api.components.textinput.TextInputStyle;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.MessageEmbed;
@@ -11,10 +14,8 @@
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
-import net.dv8tion.jda.api.interactions.components.text.TextInput;
-import net.dv8tion.jda.api.interactions.components.text.TextInputStyle;
-import net.dv8tion.jda.api.interactions.modals.Modal;
import net.dv8tion.jda.api.interactions.modals.ModalMapping;
+import net.dv8tion.jda.api.modals.Modal;
import net.dv8tion.jda.api.utils.FileUpload;
import org.togetherjava.tjbot.features.CommandVisibility;
@@ -133,12 +134,14 @@ private void handleEvalCommand(SlashCommandInteractionEvent event) {
private void sendEvalModal(SlashCommandInteractionEvent event, boolean startupScript) {
TextInput body = TextInput
.create(TEXT_INPUT_PART_ID + (startupScript ? "|" + STARTUP_SCRIPT_PARAMETER : ""),
- "Enter code to evaluate.", TextInputStyle.PARAGRAPH)
+ TextInputStyle.PARAGRAPH)
.setPlaceholder("Put your code here.")
.setRequiredRange(MIN_MESSAGE_INPUT_LENGTH, MAX_MESSAGE_INPUT_LENGTH)
.build();
- Modal modal = Modal.create(generateComponentId(), "JShell").addActionRow(body).build();
+ Modal modal = Modal.create(generateComponentId(), "JShell")
+ .addComponents(Label.of("Enter code to evaluate.", body))
+ .build();
event.replyModal(modal).queue();
}
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/mathcommands/TeXCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/mathcommands/TeXCommand.java
index dd0e717f92..6a77593712 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/mathcommands/TeXCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/mathcommands/TeXCommand.java
@@ -1,11 +1,12 @@
package org.togetherjava.tjbot.features.mathcommands;
+import net.dv8tion.jda.api.components.actionrow.ActionRow;
+import net.dv8tion.jda.api.components.buttons.Button;
+import net.dv8tion.jda.api.components.buttons.ButtonStyle;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.interactions.callbacks.IDeferrableCallback;
import net.dv8tion.jda.api.interactions.commands.OptionType;
-import net.dv8tion.jda.api.interactions.components.buttons.Button;
-import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
import net.dv8tion.jda.api.utils.FileUpload;
import org.scilab.forge.jlatexmath.ParseException;
import org.scilab.forge.jlatexmath.TeXConstants;
@@ -115,7 +116,8 @@ private void sendImage(IDeferrableCallback event, String userID, Image image)
event.getHook()
.editOriginalAttachments(
FileUpload.fromData(renderedTextImageStream.toByteArray(), "tex.png"))
- .setActionRow(Button.of(ButtonStyle.DANGER, generateComponentId(userID), "Delete"))
+ .setComponents(ActionRow
+ .of(Button.of(ButtonStyle.DANGER, generateComponentId(userID), "Delete")))
.queue();
}
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/moderation/ReportCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/moderation/ReportCommand.java
index ced7aaec4a..0f02292484 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/moderation/ReportCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/moderation/ReportCommand.java
@@ -3,6 +3,11 @@
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.components.actionrow.ActionRow;
+import net.dv8tion.jda.api.components.buttons.Button;
+import net.dv8tion.jda.api.components.label.Label;
+import net.dv8tion.jda.api.components.textinput.TextInput;
+import net.dv8tion.jda.api.components.textinput.TextInputStyle;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.MessageEmbed;
@@ -12,10 +17,7 @@
import net.dv8tion.jda.api.events.interaction.command.MessageContextInteractionEvent;
import net.dv8tion.jda.api.interactions.InteractionHook;
import net.dv8tion.jda.api.interactions.commands.build.Commands;
-import net.dv8tion.jda.api.interactions.components.buttons.Button;
-import net.dv8tion.jda.api.interactions.components.text.TextInput;
-import net.dv8tion.jda.api.interactions.components.text.TextInputStyle;
-import net.dv8tion.jda.api.interactions.modals.Modal;
+import net.dv8tion.jda.api.modals.Modal;
import net.dv8tion.jda.api.requests.restaction.MessageCreateAction;
import net.dv8tion.jda.api.utils.Result;
import org.slf4j.Logger;
@@ -96,18 +98,17 @@ public void onMessageContext(MessageContextInteractionEvent event) {
String reportedAuthorAvatarUrl = event.getTarget().getAuthor().getEffectiveAvatarUrl();
String reportedAuthorID = event.getTarget().getAuthor().getId();
- TextInput modalTextInput = TextInput
- .create(REPORT_REASON_INPUT_ID, "Anonymous report to the moderators",
- TextInputStyle.PARAGRAPH)
- .setPlaceholder("Why do you want to report this message?")
- .setRequiredRange(3, 200)
- .build();
+ TextInput modalTextInput =
+ TextInput.create(REPORT_REASON_INPUT_ID, TextInputStyle.PARAGRAPH)
+ .setPlaceholder("Why do you want to report this message?")
+ .setRequiredRange(3, 200)
+ .build();
String reportModalComponentID = generateComponentId(reportedMessage, reportedMessageID,
reportedMessageJumpUrl, reportedMessageChannel, reportedMessageTimestamp,
reportedAuthorName, reportedAuthorAvatarUrl, reportedAuthorID);
Modal reportModal = Modal.create(reportModalComponentID, "Report this to a moderator")
- .addActionRow(modalTextInput)
+ .addComponents(Label.of("Anonymous report to the moderators", modalTextInput))
.build();
event.replyModal(reportModal).queue();
@@ -182,9 +183,9 @@ private MessageCreateAction createModMessage(String reportReason,
.setColor(AMBIENT_COLOR)
.build();
- MessageCreateAction message =
- modMailAuditLog.sendMessageEmbeds(reportedMessageEmbed, reportReasonEmbed)
- .addActionRow(Button.link(reportedMessage.jumpUrl, "Go to message"));
+ MessageCreateAction message = modMailAuditLog
+ .sendMessageEmbeds(reportedMessageEmbed, reportReasonEmbed)
+ .addComponents(ActionRow.of(Button.link(reportedMessage.jumpUrl, "Go to message")));
Optional moderatorRole = guild.getRoles()
.stream()
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/moderation/TransferQuestionCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/moderation/TransferQuestionCommand.java
index 9751397137..55b68b1e97 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/moderation/TransferQuestionCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/moderation/TransferQuestionCommand.java
@@ -2,6 +2,9 @@
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.JDA;
+import net.dv8tion.jda.api.components.label.Label;
+import net.dv8tion.jda.api.components.textinput.TextInput;
+import net.dv8tion.jda.api.components.textinput.TextInputStyle;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.MessageEmbed;
@@ -16,9 +19,7 @@
import net.dv8tion.jda.api.events.interaction.command.MessageContextInteractionEvent;
import net.dv8tion.jda.api.exceptions.ErrorResponseException;
import net.dv8tion.jda.api.interactions.commands.build.Commands;
-import net.dv8tion.jda.api.interactions.components.text.TextInput;
-import net.dv8tion.jda.api.interactions.components.text.TextInputStyle;
-import net.dv8tion.jda.api.interactions.modals.Modal;
+import net.dv8tion.jda.api.modals.Modal;
import net.dv8tion.jda.api.requests.ErrorResponse;
import net.dv8tion.jda.api.requests.RestAction;
import net.dv8tion.jda.api.requests.restaction.WebhookMessageCreateAction;
@@ -108,7 +109,7 @@ public void onMessageContext(MessageContextInteractionEvent event) {
title = title.substring(0, TITLE_MAX_LENGTH);
}
- TextInput modalTitle = TextInput.create(MODAL_TITLE_ID, "Title", TextInputStyle.SHORT)
+ TextInput modalTitle = TextInput.create(MODAL_TITLE_ID, TextInputStyle.SHORT)
.setMaxLength(TITLE_MAX_LENGTH)
.setMinLength(TITLE_MIN_LENGTH)
.setPlaceholder("Describe the question in short")
@@ -116,7 +117,7 @@ public void onMessageContext(MessageContextInteractionEvent event) {
.build();
TextInput.Builder modalInputBuilder =
- TextInput.create(MODAL_INPUT_ID, "Question", TextInputStyle.PARAGRAPH)
+ TextInput.create(MODAL_INPUT_ID, TextInputStyle.PARAGRAPH)
.setRequiredRange(INPUT_MIN_LENGTH, INPUT_MAX_LENGTH)
.setPlaceholder("Contents of the question");
@@ -125,7 +126,7 @@ public void onMessageContext(MessageContextInteractionEvent event) {
modalInputBuilder.setValue(trimmedMessage);
}
- TextInput modalTag = TextInput.create(MODAL_TAG, "Most fitting tag", TextInputStyle.SHORT)
+ TextInput modalTag = TextInput.create(MODAL_TAG, TextInputStyle.SHORT)
.setValue(mostCommonTag)
.setPlaceholder("Suitable tag for the question")
.build();
@@ -133,9 +134,9 @@ public void onMessageContext(MessageContextInteractionEvent event) {
String modalComponentId =
generateComponentId(authorId, originalMessageId, originalChannelId);
Modal transferModal = Modal.create(modalComponentId, "Transfer this question")
- .addActionRow(modalTitle)
- .addActionRow(modalInputBuilder.build())
- .addActionRow(modalTag)
+ .addComponents(Label.of("Title", modalTitle))
+ .addComponents(Label.of("Question", modalInputBuilder.build()))
+ .addComponents(Label.of("Most fitting tag", modalTag))
.build();
event.replyModal(transferModal).queue();
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/moderation/WhoIsCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/moderation/WhoIsCommand.java
index e7f7f4b8e9..bccaed8be7 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/moderation/WhoIsCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/moderation/WhoIsCommand.java
@@ -1,6 +1,7 @@
package org.togetherjava.tjbot.features.moderation;
import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.components.actionrow.ActionRow;
import net.dv8tion.jda.api.entities.GuildVoiceState;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.MessageEmbed;
@@ -112,8 +113,8 @@ private static ReplyCallbackAction handleWhoIsMember(final IReplyCallback event,
private static ReplyCallbackAction sendEmbedWithProfileAction(final IReplyCallback event,
MessageEmbed embed, String userId) {
return event.replyEmbeds(embed)
- .addActionRow(
- DiscordClientAction.General.USER.asLinkButton("Click to see profile!", userId));
+ .addComponents(ActionRow.of(DiscordClientAction.General.USER
+ .asLinkButton("Click to see profile!", userId)));
}
private static String voiceStateToStringItem(final Member member) {
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/moderation/audit/AuditCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/moderation/audit/AuditCommand.java
index b466bcf18f..3fafbb2cec 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/moderation/audit/AuditCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/moderation/audit/AuditCommand.java
@@ -2,6 +2,8 @@
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.JDA;
+import net.dv8tion.jda.api.components.actionrow.ActionRow;
+import net.dv8tion.jda.api.components.buttons.Button;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.MessageEmbed;
@@ -11,7 +13,6 @@
import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
import net.dv8tion.jda.api.interactions.commands.OptionType;
-import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.requests.RestAction;
import net.dv8tion.jda.api.utils.TimeUtil;
import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder;
@@ -223,13 +224,13 @@ private > R attachPageTurnButtons(
if (totalPages <= 1) {
return messageBuilder;
}
- List pageTurnButtons =
+ List pageTurnButtons =
createPageTurnButtons(guildId, targetId, callerId, pageNumber, totalPages);
- return messageBuilder.setActionRow(pageTurnButtons);
+ return messageBuilder.setComponents(pageTurnButtons);
}
- private List createPageTurnButtons(long guildId, long targetId, long callerId,
+ private List createPageTurnButtons(long guildId, long targetId, long callerId,
int pageNumber, int totalPages) {
int previousButtonTurnPageBy = -1;
Button previousButton = createPageTurnButton(PREVIOUS_BUTTON_LABEL, guildId, targetId,
@@ -245,7 +246,7 @@ private List createPageTurnButtons(long guildId, long targetId, long cal
nextButton = nextButton.asDisabled();
}
- return List.of(previousButton, nextButton);
+ return List.of(ActionRow.of(previousButton), ActionRow.of(nextButton));
}
private Button createPageTurnButton(String label, long guildId, long targetId, long callerId,
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/moderation/modmail/ModMailCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/moderation/modmail/ModMailCommand.java
index b43748ec7a..3525c12294 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/moderation/modmail/ModMailCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/moderation/modmail/ModMailCommand.java
@@ -4,6 +4,10 @@
import com.github.benmanes.caffeine.cache.Caffeine;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.JDA;
+import net.dv8tion.jda.api.components.actionrow.ActionRow;
+import net.dv8tion.jda.api.components.label.Label;
+import net.dv8tion.jda.api.components.textinput.TextInput;
+import net.dv8tion.jda.api.components.textinput.TextInputStyle;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.entities.User;
@@ -14,9 +18,7 @@
import net.dv8tion.jda.api.interactions.commands.Command;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
-import net.dv8tion.jda.api.interactions.components.text.TextInput;
-import net.dv8tion.jda.api.interactions.components.text.TextInputStyle;
-import net.dv8tion.jda.api.interactions.modals.Modal;
+import net.dv8tion.jda.api.modals.Modal;
import net.dv8tion.jda.api.requests.restaction.MessageCreateAction;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
@@ -115,17 +117,16 @@ private void sendMessageModal(SlashCommandInteractionEvent event) {
long userGuildId = event.getOption(OPTION_GUILD).getAsLong();
boolean wantsToRevealName = event.getOption(OPTION_REVEAL_NAME).getAsBoolean();
- TextInput message =
- TextInput.create(OPTION_MESSAGE, "Your message", TextInputStyle.PARAGRAPH)
- .setPlaceholder("What do you want to tell them?")
- .setMinLength(3)
- .build();
+ TextInput message = TextInput.create(OPTION_MESSAGE, TextInputStyle.PARAGRAPH)
+ .setPlaceholder("What do you want to tell them?")
+ .setMinLength(3)
+ .build();
String componentId =
generateComponentId(String.valueOf(userGuildId), String.valueOf(wantsToRevealName));
Modal modal = Modal.create(componentId, "Send message to moderators")
- .addActionRow(message)
+ .addComponents(Label.of("Your Message", message))
.build();
event.replyModal(modal).queue();
@@ -178,8 +179,8 @@ private MessageCreateAction createModMessage(ModalInteractionEvent event, long u
MessageCreateAction message =
modMailAuditLog.sendMessageEmbeds(createModMailMessage(user, userMessage));
if (wantsToRevealName) {
- message.addActionRow(DiscordClientAction.General.USER.asLinkButton("Author Profile",
- String.valueOf(userId)));
+ message.addComponents(ActionRow.of(DiscordClientAction.General.USER
+ .asLinkButton("Author Profile", String.valueOf(userId))));
}
Optional moderatorRole = modMailAuditLog.getGuild()
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/moderation/scam/ScamBlocker.java b/application/src/main/java/org/togetherjava/tjbot/features/moderation/scam/ScamBlocker.java
index 094d05b5ce..59dc08b670 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/moderation/scam/ScamBlocker.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/moderation/scam/ScamBlocker.java
@@ -2,6 +2,9 @@
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.JDA;
+import net.dv8tion.jda.api.components.actionrow.ActionRow;
+import net.dv8tion.jda.api.components.buttons.Button;
+import net.dv8tion.jda.api.components.buttons.ButtonStyle;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
@@ -13,8 +16,6 @@
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.exceptions.ErrorHandler;
-import net.dv8tion.jda.api.interactions.components.buttons.Button;
-import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
import net.dv8tion.jda.api.requests.ErrorResponse;
import net.dv8tion.jda.api.requests.RestAction;
import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder;
@@ -269,7 +270,7 @@ private void reportScamMessage(MessageReceivedEvent event, String reportTitle,
MessageCreateBuilder messageBuilder = new MessageCreateBuilder().setEmbeds(embed);
if (!confirmDialog.isEmpty()) {
- messageBuilder.setActionRow(confirmDialog);
+ messageBuilder.setComponents(ActionRow.of(confirmDialog));
}
MessageCreateData message = messageBuilder.build();
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/reminder/ReminderCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/reminder/ReminderCommand.java
index 88bcef8607..2d9e5a2edf 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/reminder/ReminderCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/reminder/ReminderCommand.java
@@ -1,6 +1,9 @@
package org.togetherjava.tjbot.features.reminder;
import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.components.MessageTopLevelComponent;
+import net.dv8tion.jda.api.components.actionrow.ActionRow;
+import net.dv8tion.jda.api.components.buttons.Button;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.ISnowflake;
import net.dv8tion.jda.api.entities.MessageEmbed;
@@ -16,7 +19,6 @@
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
-import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.utils.TimeFormat;
import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder;
import net.dv8tion.jda.api.utils.messages.MessageCreateData;
@@ -232,7 +234,7 @@ private MessageCreateData createPendingRemindersPage(
if (totalPages > 1) {
pendingReminders = getPageEntries(pendingReminders, pageToShow);
remindersEmbed.setFooter("Page: %d/%d".formatted(pageToShow, totalPages));
- pendingRemindersPage.addActionRow(createPageTurnButtons(pageToShow, totalPages));
+ pendingRemindersPage.addComponents(createPageTurnButtons(pageToShow, totalPages));
}
pendingReminders.forEach(reminder -> addReminderAsField(reminder, remindersEmbed));
}
@@ -240,7 +242,7 @@ private MessageCreateData createPendingRemindersPage(
return pendingRemindersPage.addEmbeds(remindersEmbed.build()).build();
}
- private List createPageTurnButtons(int currentPage, int totalPages) {
+ private List createPageTurnButtons(int currentPage, int totalPages) {
String pageNumberString = String.valueOf(currentPage);
Button previousButton =
@@ -255,7 +257,7 @@ private List createPageTurnButtons(int currentPage, int totalPages) {
nextButton = nextButton.asDisabled();
}
- return List.of(previousButton, nextButton);
+ return List.of(ActionRow.of(previousButton), ActionRow.of(nextButton));
}
private static List getPageEntries(
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/tags/TagSystem.java b/application/src/main/java/org/togetherjava/tjbot/features/tags/TagSystem.java
index f335f97d7c..e994165d63 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/tags/TagSystem.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/tags/TagSystem.java
@@ -1,9 +1,9 @@
package org.togetherjava.tjbot.features.tags;
+import net.dv8tion.jda.api.components.buttons.Button;
+import net.dv8tion.jda.api.components.buttons.ButtonStyle;
import net.dv8tion.jda.api.entities.emoji.Emoji;
import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
-import net.dv8tion.jda.api.interactions.components.buttons.Button;
-import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
import org.togetherjava.tjbot.db.Database;
import org.togetherjava.tjbot.db.generated.tables.Tags;
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/tophelper/TopHelpersAssignmentRoutine.java b/application/src/main/java/org/togetherjava/tjbot/features/tophelper/TopHelpersAssignmentRoutine.java
index 76434af7e8..43df64408e 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/tophelper/TopHelpersAssignmentRoutine.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/tophelper/TopHelpersAssignmentRoutine.java
@@ -1,6 +1,11 @@
package org.togetherjava.tjbot.features.tophelper;
import net.dv8tion.jda.api.JDA;
+import net.dv8tion.jda.api.components.actionrow.ActionRow;
+import net.dv8tion.jda.api.components.buttons.Button;
+import net.dv8tion.jda.api.components.selections.SelectOption;
+import net.dv8tion.jda.api.components.selections.StringSelectMenu;
+import net.dv8tion.jda.api.components.selections.StringSelectMenu.Builder;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Role;
@@ -10,9 +15,6 @@
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.events.interaction.component.StringSelectInteractionEvent;
import net.dv8tion.jda.api.interactions.components.ComponentInteraction;
-import net.dv8tion.jda.api.interactions.components.buttons.Button;
-import net.dv8tion.jda.api.interactions.components.selections.SelectOption;
-import net.dv8tion.jda.api.interactions.components.selections.StringSelectMenu;
import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder;
import net.dv8tion.jda.api.utils.messages.MessageCreateData;
import org.slf4j.Logger;
@@ -171,11 +173,10 @@ private void sendSelectionMenu(Collection topH
```""".formatted(timeRange.description(),
TopHelpersService.asAsciiTable(topHelpers, members));
- StringSelectMenu.Builder menu =
- StringSelectMenu.create(componentIdInteractor.generateComponentId())
- .setPlaceholder("Select the Top Helpers")
- .setMinValues(1)
- .setMaxValues(topHelpers.size());
+ Builder menu = StringSelectMenu.create(componentIdInteractor.generateComponentId())
+ .setPlaceholder("Select the Top Helpers")
+ .setMinValues(1)
+ .setMaxValues(topHelpers.size());
Map userIdToMember = TopHelpersService.mapUserIdToMember(members);
topHelpers.stream()
@@ -184,9 +185,9 @@ private void sendSelectionMenu(Collection topH
.forEach(menu::addOptions);
MessageCreateData message = new MessageCreateBuilder().setContent(content)
- .addActionRow(menu.build())
- .addActionRow(Button
- .danger(componentIdInteractor.generateComponentId(CANCEL_BUTTON_NAME), "Cancel"))
+ .addComponents(ActionRow.of(menu.build()))
+ .addComponents(ActionRow.of(Button
+ .danger(componentIdInteractor.generateComponentId(CANCEL_BUTTON_NAME), "Cancel")))
.build();
channel.sendMessage(message).queue();
@@ -274,11 +275,12 @@ private void reportRoleManageSuccess(StringSelectInteractionEvent event) {
+ topHelperList + "\nShould I send a generic announcement?";
event.getHook()
.editOriginal(content)
- .setActionRow(
- Button.success(componentIdInteractor.generateComponentId(successButtonArgs),
- "Yes"),
- Button.danger(componentIdInteractor.generateComponentId(NO_MESSAGE_BUTTON_NAME),
- "No"))
+ .setComponents(
+ ActionRow.of(Button.success(
+ componentIdInteractor.generateComponentId(successButtonArgs), "Yes")),
+ ActionRow.of(Button.danger(
+ componentIdInteractor.generateComponentId(NO_MESSAGE_BUTTON_NAME),
+ "No")))
.queue();
}
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/utils/DiscordClientAction.java b/application/src/main/java/org/togetherjava/tjbot/features/utils/DiscordClientAction.java
index da4028f656..e1afb0a9e2 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/utils/DiscordClientAction.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/utils/DiscordClientAction.java
@@ -1,7 +1,7 @@
package org.togetherjava.tjbot.features.utils;
-import net.dv8tion.jda.api.interactions.components.buttons.Button;
-import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
+import net.dv8tion.jda.api.components.buttons.Button;
+import net.dv8tion.jda.api.components.buttons.ButtonStyle;
import org.jetbrains.annotations.Contract;
import java.util.regex.Pattern;
diff --git a/application/src/main/java/org/togetherjava/tjbot/features/utils/MessageUtils.java b/application/src/main/java/org/togetherjava/tjbot/features/utils/MessageUtils.java
index 89cc140549..33a33a9274 100644
--- a/application/src/main/java/org/togetherjava/tjbot/features/utils/MessageUtils.java
+++ b/application/src/main/java/org/togetherjava/tjbot/features/utils/MessageUtils.java
@@ -1,11 +1,11 @@
package org.togetherjava.tjbot.features.utils;
import net.dv8tion.jda.api.JDA;
+import net.dv8tion.jda.api.components.actionrow.ActionRow;
+import net.dv8tion.jda.api.components.buttons.Button;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.interactions.commands.Command;
-import net.dv8tion.jda.api.interactions.components.ActionRow;
-import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.requests.RestAction;
import net.dv8tion.jda.api.utils.MarkdownSanitizer;
@@ -38,7 +38,7 @@ private MessageUtils() {
* @throws IllegalArgumentException when the given message does not contain any button
*/
public static void disableButtons(Message message) {
- List buttons = message.getButtons();
+ List buttons = message.getComponentTree().findAll(Button.class);
if (buttons.isEmpty()) {
throw new IllegalArgumentException("Message must contain at least one button");
}
diff --git a/application/src/test/java/org/togetherjava/tjbot/features/tags/TagSystemTest.java b/application/src/test/java/org/togetherjava/tjbot/features/tags/TagSystemTest.java
index 97b1b2ab3f..2dd1427aa1 100644
--- a/application/src/test/java/org/togetherjava/tjbot/features/tags/TagSystemTest.java
+++ b/application/src/test/java/org/togetherjava/tjbot/features/tags/TagSystemTest.java
@@ -49,8 +49,8 @@ void setUp() {
@Test
void createDeleteButton() {
- assertEquals("foo", TagSystem.createDeleteButton("foo").getId());
- assertEquals("fooBarFooBar", TagSystem.createDeleteButton("fooBarFooBar").getId());
+ assertEquals("foo", TagSystem.createDeleteButton("foo").getCustomId());
+ assertEquals("fooBarFooBar", TagSystem.createDeleteButton("fooBarFooBar").getCustomId());
}
@Test
diff --git a/application/src/test/java/org/togetherjava/tjbot/jda/ButtonClickEventBuilder.java b/application/src/test/java/org/togetherjava/tjbot/jda/ButtonClickEventBuilder.java
index 140bfc8e0f..2b10498012 100644
--- a/application/src/test/java/org/togetherjava/tjbot/jda/ButtonClickEventBuilder.java
+++ b/application/src/test/java/org/togetherjava/tjbot/jda/ButtonClickEventBuilder.java
@@ -1,12 +1,12 @@
package org.togetherjava.tjbot.jda;
+import net.dv8tion.jda.api.components.MessageTopLevelComponent;
+import net.dv8tion.jda.api.components.buttons.Button;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
-import net.dv8tion.jda.api.interactions.components.ItemComponent;
-import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder;
import org.togetherjava.tjbot.features.SlashCommand;
@@ -28,14 +28,14 @@
* Among other Discord related things, the builder optionally accepts a message
* ({@link #setMessage(Message)}) and the user who clicked on the button
* ({@link #setUserWhoClicked(Member)} ). As well as several ways to modify the message directly for
- * convenience, such as {@link #setContent(String)} or {@link #setActionRow(ItemComponent...)}. The
- * builder is by default already setup with a valid dummy message and the user who clicked the
- * button is set to the author of the message.
+ * convenience, such as {@link #setContent(String)} or
+ * {@link #setComponents(MessageTopLevelComponent...)}. The builder is by default already setup with
+ * a valid dummy message and the user who clicked the button is set to the author of the message.
*
* In order to build the event, at least one button has to be added to the message and marked as
- * clicked . Therefore, use {@link #setActionRow(ItemComponent...)} or modify the message
- * manually using {@link #setMessage(Message)}. Then mark the desired button as clicked using
- * {@link #build(Button)} or, if the message only contains a single button,
+ * clicked . Therefore, use {@link #setComponents(MessageTopLevelComponent...)} or modify the
+ * message manually using {@link #setMessage(Message)}. Then mark the desired button as clicked
+ * using {@link #build(Button)} or, if the message only contains a single button,
* {@link #buildWithSingleButton()} will automatically select the button.
*
* Refer to the following examples:
@@ -44,7 +44,7 @@
* {@code
* // Default message with a delete button
* jdaTester.createButtonClickEvent()
- * .setActionRows(ActionRow.of(Button.danger("1", "Delete"))
+ * .setComponents(ActionRow.of(Button.danger("1", "Delete"))
* .buildWithSingleButton();
*
* // More complex message with a user who clicked the button that is not the message author and multiple buttons
@@ -58,7 +58,7 @@
* .build())
* .build())
* .setUserWhoClicked(jdaTester.createMemberSpy(5))
- * .setActionRows(
+ * .setComponents(
* ActionRow.of(Button.primary("1", "Previous"),
* clickedButton)
* .build(clickedButton);
@@ -86,10 +86,10 @@ public final class ButtonClickEventBuilder {
/**
* Sets the given message that this event is associated to. Will override any data previously
* set with the more direct methods such as {@link #setContent(String)} or
- * {@link #setActionRow(ItemComponent...)}.
+ * {@link #setComponents(MessageTopLevelComponent...)}.
*
* The message must contain at least one button, or the button has to be added later with
- * {@link #setActionRow(ItemComponent...)}.
+ * {@link #setComponents(MessageTopLevelComponent...)}.
*
* @param message the message to set
* @return this builder instance for chaining
@@ -124,7 +124,7 @@ public ButtonClickEventBuilder setEmbeds(MessageEmbed... embeds) {
}
/**
- * Sets the action rows of the message that this event is associated to. Usage of
+ * Sets the components of the message that this event is associated to. Usage of
* {@link #setMessage(Message)} will overwrite any content set by this.
*
* At least one of the components must be a button before {@link #build(Button)} is called.
@@ -132,8 +132,8 @@ public ButtonClickEventBuilder setEmbeds(MessageEmbed... embeds) {
* @param components the components for this action row
* @return this builder instance for chaining
*/
- public ButtonClickEventBuilder setActionRow(ItemComponent... components) {
- messageBuilder.setActionRow(components);
+ public ButtonClickEventBuilder setComponents(MessageTopLevelComponent... components) {
+ messageBuilder.setComponents(components);
return this;
}
@@ -192,11 +192,12 @@ private static Button determineClickedButton(@Nullable Button maybeClickedButton
// Otherwise, attempt to extract the button from the message. Only allow a single button in
// this case to prevent ambiguity.
- return requireSingleButton(message.getButtons());
+ return requireSingleButton(message.getComponentTree().findAll(Button.class));
}
private static Button requireButtonInMessage(Button clickedButton, Message message) {
- boolean isClickedButtonUnknown = !message.getButtons().contains(clickedButton);
+ boolean isClickedButtonUnknown =
+ !message.getComponentTree().findAll(Button.class).contains(clickedButton);
if (isClickedButtonUnknown) {
throw new IllegalArgumentException(
@@ -228,7 +229,7 @@ private ButtonInteractionEvent mockButtonClickEvent(Message message, Button clic
when(event.getMessage()).thenReturn(message);
when(event.getButton()).thenReturn(clickedButton);
when(event.getComponent()).thenReturn(clickedButton);
- when(event.getComponentId()).thenReturn(clickedButton.getId());
+ when(event.getComponentId()).thenReturn(clickedButton.getCustomId());
when(event.getComponentType()).thenReturn(clickedButton.getType());
when(event.getMember()).thenReturn(userWhoClicked);
diff --git a/application/src/test/java/org/togetherjava/tjbot/jda/JdaTester.java b/application/src/test/java/org/togetherjava/tjbot/jda/JdaTester.java
index bf42857817..2aa330ef5a 100644
--- a/application/src/test/java/org/togetherjava/tjbot/jda/JdaTester.java
+++ b/application/src/test/java/org/togetherjava/tjbot/jda/JdaTester.java
@@ -2,6 +2,7 @@
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.Permission;
+import net.dv8tion.jda.api.components.MessageTopLevelComponent;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.MessageEmbed;
@@ -21,8 +22,6 @@
import net.dv8tion.jda.api.exceptions.ErrorResponseException;
import net.dv8tion.jda.api.interactions.InteractionHook;
import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
-import net.dv8tion.jda.api.interactions.components.ItemComponent;
-import net.dv8tion.jda.api.interactions.components.LayoutComponent;
import net.dv8tion.jda.api.requests.ErrorResponse;
import net.dv8tion.jda.api.requests.Response;
import net.dv8tion.jda.api.requests.RestAction;
@@ -211,8 +210,8 @@ public JdaTester() {
replyAction = mock(ReplyCallbackActionImpl.class);
when(replyAction.setEphemeral(anyBoolean())).thenReturn(replyAction);
- when(replyAction.addActionRow(anyCollection())).thenReturn(replyAction);
- when(replyAction.addActionRow(ArgumentMatchers.any()))
+ when(replyAction.addComponents(anyCollection())).thenReturn(replyAction);
+ when(replyAction.addComponents(ArgumentMatchers.any()))
.thenReturn(replyAction);
when(replyAction.setContent(anyString())).thenReturn(replyAction);
when(replyAction.addFiles(anyCollection())).thenReturn(replyAction);
@@ -223,7 +222,7 @@ public JdaTester() {
doNothing().when(webhookMessageEditAction).queue();
doReturn(webhookMessageEditAction).when(webhookMessageEditAction)
- .setActionRow(any(ItemComponent.class));
+ .setComponents(any(MessageTopLevelComponent.class));
when(guild.getGuildChannelById(anyLong())).thenReturn(textChannel);
doReturn(everyoneRole).when(guild).getPublicRole();
@@ -752,11 +751,7 @@ public Message clientMessageToReceivedMessageMock(MessageCreateData clientMessag
when(receivedMessage.getContentStripped()).thenReturn(clientMessage.getContent());
when(receivedMessage.getComponents()).thenReturn(clientMessage.getComponents());
- when(receivedMessage.getButtons()).thenReturn(clientMessage.getComponents()
- .stream()
- .map(LayoutComponent::getButtons)
- .flatMap(List::stream)
- .toList());
+ when(receivedMessage.getComponentTree()).thenReturn(clientMessage.getComponentTree());
List attachments = clientMessage.getAttachments()
.stream()