From 621d40bfb6be7430a7cb800469003c18a561c558 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Nov 2025 00:03:00 +0000 Subject: [PATCH 1/2] Bump net.dv8tion:JDA from 5.6.1 to 6.1.1 Bumps [net.dv8tion:JDA](https://github.com/discord-jda/JDA) from 5.6.1 to 6.1.1. - [Release notes](https://github.com/discord-jda/JDA/releases) - [Commits](https://github.com/discord-jda/JDA/compare/v5.6.1...v6.1.1) --- updated-dependencies: - dependency-name: net.dv8tion:JDA dependency-version: 6.1.1 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- application/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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' From b1601b4573eab8d028072c3e60db96714344d00e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Connor=20Schweigh=C3=B6fer?= Date: Mon, 3 Nov 2025 10:42:01 +0100 Subject: [PATCH 2/2] Migrating to components v2 api --- .../tjbot/features/MessageContextCommand.java | 6 +-- .../tjbot/features/SlashCommand.java | 6 +-- .../tjbot/features/UserContextCommand.java | 6 +-- .../features/basic/RoleSelectCommand.java | 10 +++-- .../bookmarks/BookmarksListRemoveHandler.java | 20 +++++----- .../features/chatgpt/ChatGptCommand.java | 15 ++++---- .../features/code/CodeMessageHandler.java | 10 +++-- .../componentids/ComponentIdGenerator.java | 4 +- .../componentids/ComponentIdParser.java | 4 +- .../FileSharingMessageListener.java | 7 +++- .../tjbot/features/help/HelpSystemHelper.java | 11 ++++-- .../tjbot/features/jshell/JShellCommand.java | 13 ++++--- .../features/mathcommands/TeXCommand.java | 8 ++-- .../features/moderation/ReportCommand.java | 29 ++++++++------- .../moderation/TransferQuestionCommand.java | 19 +++++----- .../features/moderation/WhoIsCommand.java | 5 ++- .../moderation/audit/AuditCommand.java | 11 +++--- .../moderation/modmail/ModMailCommand.java | 23 ++++++------ .../features/moderation/scam/ScamBlocker.java | 7 ++-- .../features/reminder/ReminderCommand.java | 10 +++-- .../tjbot/features/tags/TagSystem.java | 4 +- .../TopHelpersAssignmentRoutine.java | 34 +++++++++-------- .../features/utils/DiscordClientAction.java | 4 +- .../tjbot/features/utils/MessageUtils.java | 6 +-- .../tjbot/features/tags/TagSystemTest.java | 4 +- .../tjbot/jda/ButtonClickEventBuilder.java | 37 ++++++++++--------- .../org/togetherjava/tjbot/jda/JdaTester.java | 15 +++----- 27 files changed, 175 insertions(+), 153 deletions(-) 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 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 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