diff --git a/application/build.gradle b/application/build.gradle
index 3ed6987a3f..28e4136531 100644
--- a/application/build.gradle
+++ b/application/build.gradle
@@ -13,10 +13,6 @@ plugins {
repositories {
mavenCentral()
- maven {
- name 'm2-dv8tion'
- url 'https://m2.dv8tion.net/releases'
- }
}
var outputImage = 'togetherjava.duckdns.org:5001/togetherjava/tjbot:' + System.getenv('BRANCH_NAME') ?: 'latest'
@@ -45,7 +41,7 @@ shadowJar {
dependencies {
implementation project(':database')
- implementation 'net.dv8tion:JDA:4.4.0_352'
+ implementation 'net.dv8tion:JDA:5.0.0-alpha.9'
implementation 'org.apache.logging.log4j:log4j-core:2.16.0'
runtimeOnly 'org.apache.logging.log4j:log4j-slf4j18-impl:2.16.0'
diff --git a/application/src/main/java/org/togetherjava/tjbot/Application.java b/application/src/main/java/org/togetherjava/tjbot/Application.java
index e26f948db2..e0995470d4 100644
--- a/application/src/main/java/org/togetherjava/tjbot/Application.java
+++ b/application/src/main/java/org/togetherjava/tjbot/Application.java
@@ -20,7 +20,7 @@
* Main class of the application. Use {@link #main(String[])} to start an instance of it.
*
* New commands can be created by implementing
- * {@link net.dv8tion.jda.api.events.interaction.SlashCommandEvent} or extending
+ * {@link net.dv8tion.jda.api.events.interaction.SlashCommandInteractionEvent} or extending
* {@link org.togetherjava.tjbot.commands.SlashCommandAdapter}. They can then be registered in
* {@link Features}.
*/
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/MessageReceiver.java b/application/src/main/java/org/togetherjava/tjbot/commands/MessageReceiver.java
index e43284ee31..ee679a47f0 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/MessageReceiver.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/MessageReceiver.java
@@ -1,7 +1,7 @@
package org.togetherjava.tjbot.commands;
-import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
-import net.dv8tion.jda.api.events.message.guild.GuildMessageUpdateEvent;
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import net.dv8tion.jda.api.events.message.MessageUpdateEvent;
import org.jetbrains.annotations.NotNull;
import java.util.regex.Pattern;
@@ -38,7 +38,7 @@ public interface MessageReceiver extends Feature {
* @param event the event that triggered this, containing information about the corresponding
* message that was sent and received
*/
- void onMessageReceived(@NotNull GuildMessageReceivedEvent event);
+ void onMessageReceived(@NotNull MessageReceivedEvent event);
/**
* Triggered by the core system whenever an existing message was edited in a text channel of a
@@ -47,5 +47,5 @@ public interface MessageReceiver extends Feature {
* @param event the event that triggered this, containing information about the corresponding
* message that was edited
*/
- void onMessageUpdated(@NotNull GuildMessageUpdateEvent event);
+ void onMessageUpdated(@NotNull MessageUpdateEvent event);
}
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/MessageReceiverAdapter.java b/application/src/main/java/org/togetherjava/tjbot/commands/MessageReceiverAdapter.java
index 506d2aa6e7..3d13b3b3e9 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/MessageReceiverAdapter.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/MessageReceiverAdapter.java
@@ -1,7 +1,7 @@
package org.togetherjava.tjbot.commands;
-import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
-import net.dv8tion.jda.api.events.message.guild.GuildMessageUpdateEvent;
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import net.dv8tion.jda.api.events.message.MessageUpdateEvent;
import org.jetbrains.annotations.NotNull;
import java.util.regex.Pattern;
@@ -10,8 +10,8 @@
* Adapter implementation of a {@link MessageReceiver}. A new receiver can then be registered by
* adding it to {@link Features}.
*
- * {@link #onMessageReceived(GuildMessageReceivedEvent)} and
- * {@link #onMessageUpdated(GuildMessageUpdateEvent)} can be overridden if desired. The default
+ * {@link #onMessageReceived(MessageReceivedEvent)} and
+ * {@link #onMessageUpdated(MessageUpdateEvent)} can be overridden if desired. The default
* implementation is empty, the adapter will not react to such events.
*/
public abstract class MessageReceiverAdapter implements MessageReceiver {
@@ -35,13 +35,13 @@ protected MessageReceiverAdapter(@NotNull Pattern channelNamePattern) {
@SuppressWarnings("NoopMethodInAbstractClass")
@Override
- public void onMessageReceived(@NotNull GuildMessageReceivedEvent event) {
+ public void onMessageReceived(@NotNull MessageReceivedEvent event) {
// Adapter does not react by default, subclasses may change this behavior
}
@SuppressWarnings("NoopMethodInAbstractClass")
@Override
- public void onMessageUpdated(@NotNull GuildMessageUpdateEvent event) {
+ public void onMessageUpdated(@NotNull MessageUpdateEvent event) {
// Adapter does not react by default, subclasses may change this behavior
}
}
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/SlashCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/SlashCommand.java
index a5a01c20e8..fd1c2c2c08 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/SlashCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/SlashCommand.java
@@ -1,12 +1,15 @@
package org.togetherjava.tjbot.commands;
import net.dv8tion.jda.api.entities.Emoji;
-import net.dv8tion.jda.api.events.interaction.ButtonClickEvent;
-import net.dv8tion.jda.api.events.interaction.SelectionMenuEvent;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
+import net.dv8tion.jda.api.events.interaction.component.SelectMenuInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
-import net.dv8tion.jda.api.interactions.components.ButtonStyle;
+import net.dv8tion.jda.api.interactions.commands.build.Commands;
+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.Button;
+import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
import org.jetbrains.annotations.NotNull;
import org.togetherjava.tjbot.commands.componentids.ComponentId;
import org.togetherjava.tjbot.commands.componentids.ComponentIdGenerator;
@@ -28,9 +31,9 @@
* is then to be returned by {@link #getData()} where the system will then pick it up from.
*
* After registration, the system will notify a command whenever one of its corresponding slash
- * commands ({@link #onSlashCommand(SlashCommandEvent)}), buttons
- * ({@link #onButtonClick(ButtonClickEvent, List)}) or menus
- * ({@link #onSelectionMenu(SelectionMenuEvent, List)}) have been triggered.
+ * commands ({@link #onSlashCommand(SlashCommandInteractionEvent)}), buttons
+ * ({@link #onButtonClick(ButtonInteractionEvent, List)}) or menus
+ * ({@link #onSelectionMenu(SelectMenuInteractionEvent, List)}) have been triggered.
*
*
* Some example commands are available in {@link org.togetherjava.tjbot.commands.basic}.
@@ -40,7 +43,7 @@ public interface SlashCommand extends Feature {
/**
* Gets the name of the command.
*
- * Requirements for this are documented in {@link CommandData#CommandData(String, String)}.
+ * Requirements for this are documented in {@link Commands#slash(String, String)}.
*
*
* After registration of the command, the name must not change anymore.
@@ -53,7 +56,7 @@ public interface SlashCommand extends Feature {
/**
* Gets the description of the command.
*
- * Requirements for this are documented in {@link CommandData#CommandData(String, String)}.
+ * Requirements for this are documented in {@link Commands#slash(String, String)}.
*
*
* After registration of the command, the description must not change anymore.
@@ -89,7 +92,7 @@ public interface SlashCommand extends Feature {
* @return the command data of this command
*/
@NotNull
- CommandData getData();
+ SlashCommandData getData();
/**
* Triggered by the core system when a slash command corresponding to this implementation (based
@@ -104,9 +107,9 @@ public interface SlashCommand extends Feature {
*
* Buttons or menus have to be created with a component ID (see
* {@link ComponentInteraction#getComponentId()},
- * {@link net.dv8tion.jda.api.interactions.components.Button#of(ButtonStyle, String, Emoji)}) 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.
+ * {@link Button#of(ButtonStyle, String, Emoji)}}) 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.
*
* The component ID has to be a UUID-string (see {@link java.util.UUID}), which is associated to
* a specific database entry, containing meta information about the command being executed. Such
@@ -115,8 +118,8 @@ public interface SlashCommand extends Feature {
* given to {@link #acceptComponentIdGenerator(ComponentIdGenerator)} during system setup. The
* required {@link ComponentId} instance accepts optional extra arguments, which, if provided,
* can be picked up during the corresponding event (see
- * {@link #onButtonClick(ButtonClickEvent, List)},
- * {@link #onSelectionMenu(SelectionMenuEvent, List)}).
+ * {@link #onButtonClick(ButtonInteractionEvent, List)},
+ * {@link #onSelectionMenu(SelectMenuInteractionEvent, List)}).
*
* Alternatively, if {@link SlashCommandAdapter} has been extended, it also offers a handy
* {@link SlashCommandAdapter#generateComponentId(String...)} method to ease the flow.
@@ -129,7 +132,7 @@ public interface SlashCommand extends Feature {
*
* @param event the event that triggered this
*/
- void onSlashCommand(@NotNull SlashCommandEvent event);
+ void onSlashCommand(@NotNull SlashCommandInteractionEvent event);
/**
* Triggered by the core system when a button corresponding to this implementation (based on
@@ -147,9 +150,10 @@ public interface SlashCommand extends Feature {
*
* @param event the event that triggered this
* @param args the arguments transported with the button, see
- * {@link #onSlashCommand(SlashCommandEvent)} for details on how these are created
+ * {@link #onSlashCommand(SlashCommandInteractionEvent)} for details on how these are
+ * created
*/
- void onButtonClick(@NotNull ButtonClickEvent event, @NotNull List args);
+ void onButtonClick(@NotNull ButtonInteractionEvent event, @NotNull List args);
/**
* Triggered by the core system when a selection menu corresponding to this implementation
@@ -167,15 +171,16 @@ public interface SlashCommand extends Feature {
*
* @param event the event that triggered this
* @param args the arguments transported with the selection menu, see
- * {@link #onSlashCommand(SlashCommandEvent)} for details on how these are created
+ * {@link #onSlashCommand(SlashCommandInteractionEvent)} for details on how these are
+ * created
*/
- void onSelectionMenu(@NotNull SelectionMenuEvent event, @NotNull List args);
+ void onSelectionMenu(@NotNull SelectMenuInteractionEvent event, @NotNull List args);
/**
* Triggered by the core system during its setup phase. It will provide the command a component
* id generator through this method, which can be used to generate component ids, as used for
- * button or selection menus. See {@link #onSlashCommand(SlashCommandEvent)} for details on how
- * to use this.
+ * button or selection menus. See {@link #onSlashCommand(SlashCommandInteractionEvent)} for
+ * details on how to use this.
*
* @param generator the provided component id generator
*/
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/SlashCommandAdapter.java b/application/src/main/java/org/togetherjava/tjbot/commands/SlashCommandAdapter.java
index f49d82a639..a8bb33b9ab 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/SlashCommandAdapter.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/SlashCommandAdapter.java
@@ -1,9 +1,11 @@
package org.togetherjava.tjbot.commands;
-import net.dv8tion.jda.api.events.interaction.ButtonClickEvent;
-import net.dv8tion.jda.api.events.interaction.SelectionMenuEvent;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
+import net.dv8tion.jda.api.events.interaction.component.SelectMenuInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
+import net.dv8tion.jda.api.interactions.commands.build.Commands;
+import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;
import org.jetbrains.annotations.NotNull;
import org.togetherjava.tjbot.commands.componentids.ComponentId;
import org.togetherjava.tjbot.commands.componentids.ComponentIdGenerator;
@@ -15,12 +17,12 @@
/**
* Adapter implementation of a {@link SlashCommand}. The minimal setup only requires implementation
- * of {@link #onSlashCommand(SlashCommandEvent)}. A new command can then be registered by adding it
- * to {@link Features}.
+ * of {@link #onSlashCommand(SlashCommandInteractionEvent)}. A new command can then be registered by
+ * adding it to {@link Features}.
*
- * Further, {@link #onButtonClick(ButtonClickEvent, List)} and
- * {@link #onSelectionMenu(SelectionMenuEvent, List)} can be overridden if desired. The default
- * implementation is empty, the adapter will not react to such events.
+ * Further, {@link #onButtonClick(ButtonInteractionEvent, List)} and
+ * {@link #onSelectionMenu(SelectMenuInteractionEvent, List)} can be overridden if desired. The
+ * default implementation is empty, the adapter will not react to such events.
*
*
* The adapter manages all command related data itself, which can be provided during construction
@@ -31,7 +33,7 @@
*
* If implementations want to add buttons or selection menus, it is highly advised to use component
* IDs generated by {@link #generateComponentId(String...)}, which will automatically create IDs
- * that are valid per {@link SlashCommand#onSlashCommand(SlashCommandEvent)}.
+ * that are valid per {@link SlashCommand#onSlashCommand(SlashCommandInteractionEvent)}.
*
*
* Some example commands are available in {@link org.togetherjava.tjbot.commands.basic}. A minimal
@@ -46,7 +48,7 @@
* }
*
* @Override
- * public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ * public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
* event.reply("Pong!").queue();
* }
* }
@@ -59,7 +61,7 @@ public abstract class SlashCommandAdapter implements SlashCommand {
private final String name;
private final String description;
private final SlashCommandVisibility visibility;
- private final CommandData data;
+ private final SlashCommandData data;
private ComponentIdGenerator componentIdGenerator;
/**
@@ -77,7 +79,7 @@ protected SlashCommandAdapter(@NotNull String name, @NotNull String description,
this.description = description;
this.visibility = visibility;
- data = new CommandData(name, description);
+ data = Commands.slash(name, description);
}
@Override
@@ -96,7 +98,7 @@ protected SlashCommandAdapter(@NotNull String name, @NotNull String description,
}
@Override
- public final @NotNull CommandData getData() {
+ public final @NotNull SlashCommandData getData() {
return data;
}
@@ -107,19 +109,20 @@ public final void acceptComponentIdGenerator(@NotNull ComponentIdGenerator gener
@SuppressWarnings("NoopMethodInAbstractClass")
@Override
- public void onButtonClick(@NotNull ButtonClickEvent event, @NotNull List args) {
+ public void onButtonClick(@NotNull ButtonInteractionEvent event, @NotNull List args) {
// Adapter does not react by default, subclasses may change this behavior
}
@SuppressWarnings("NoopMethodInAbstractClass")
@Override
- public void onSelectionMenu(@NotNull SelectionMenuEvent event, @NotNull List args) {
+ public void onSelectionMenu(@NotNull SelectMenuInteractionEvent event,
+ @NotNull List args) {
// Adapter does not react by default, subclasses may change this behavior
}
/**
* Helper method to generate component IDs that are considered valid per
- * {@link SlashCommand#onSlashCommand(SlashCommandEvent)}.
+ * {@link SlashCommand#onSlashCommand(SlashCommandInteractionEvent)}.
*
* They can be used to create buttons or selection menus and transport additional data
* throughout the event (e.g. the user id who created the button dialog).
@@ -138,7 +141,7 @@ public void onSelectionMenu(@NotNull SelectionMenuEvent event, @NotNull List
* They can be used to create buttons or selection menus and transport additional data
* throughout the event (e.g. the user id who created the button dialog).
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/basic/PingCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/basic/PingCommand.java
index eec68480c3..17928dbd7f 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/basic/PingCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/basic/PingCommand.java
@@ -1,6 +1,6 @@
package org.togetherjava.tjbot.commands.basic;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.jetbrains.annotations.NotNull;
import org.togetherjava.tjbot.commands.SlashCommandAdapter;
import org.togetherjava.tjbot.commands.SlashCommandVisibility;
@@ -24,7 +24,7 @@ public PingCommand() {
* @param event the corresponding event
*/
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
event.reply("Pong!").queue();
}
}
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/basic/RoleSelectCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/basic/RoleSelectCommand.java
index de5f9c5716..594489b223 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/basic/RoleSelectCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/basic/RoleSelectCommand.java
@@ -4,16 +4,17 @@
import net.dv8tion.jda.api.MessageBuilder;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.*;
-import net.dv8tion.jda.api.events.interaction.SelectionMenuEvent;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.events.interaction.component.SelectMenuInteractionEvent;
import net.dv8tion.jda.api.interactions.Interaction;
+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.commands.build.OptionData;
import net.dv8tion.jda.api.interactions.components.ActionRow;
import net.dv8tion.jda.api.interactions.components.ComponentInteraction;
+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.SelectionMenu;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -77,7 +78,7 @@ private static SelectOption mapToSelectOption(@NotNull Role role) {
}
@Override
- public void onSlashCommand(@NotNull final SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull final SlashCommandInteractionEvent event) {
Member member = Objects.requireNonNull(event.getMember(), "Member is null");
if (!member.hasPermission(Permission.MANAGE_ROLES)) {
event.reply("You dont have the right permissions to use this command")
@@ -93,8 +94,8 @@ public void onSlashCommand(@NotNull final SlashCommandEvent event) {
return;
}
- SelectionMenu.Builder menu =
- SelectionMenu.create(generateComponentId(Lifespan.PERMANENT, member.getId()));
+ SelectMenu.Builder menu =
+ SelectMenu.create(generateComponentId(Lifespan.PERMANENT, member.getId()));
addMenuOptions(event, menu, "Select the roles to display", 1);
@@ -115,13 +116,13 @@ public void onSlashCommand(@NotNull final SlashCommandEvent event) {
* Adds role options to a selection menu.
*
*
- * @param event the {@link SlashCommandEvent}
- * @param menu the menu to add options to {@link SelectionMenu.Builder}
+ * @param event the {@link SlashCommandInteractionEvent}
+ * @param menu the menu to add options to {@link SelectMenu.Builder}
* @param placeHolder the placeholder for the menu {@link String}
* @param minValues the minimum number of selections. nullable {@link Integer}
*/
private static void addMenuOptions(@NotNull final Interaction event,
- @NotNull final SelectionMenu.Builder menu, @NotNull final String placeHolder,
+ @NotNull final SelectMenu.Builder menu, @NotNull final String placeHolder,
@Nullable final Integer minValues) {
Guild guild = Objects.requireNonNull(event.getGuild(), "The given guild cannot be null");
@@ -164,7 +165,7 @@ private static void addMenuOptions(@NotNull final Interaction event,
}
@Override
- public void onSelectionMenu(@NotNull final SelectionMenuEvent event,
+ public void onSelectionMenu(@NotNull final SelectMenuInteractionEvent event,
@NotNull final List args) {
Guild guild = Objects.requireNonNull(event.getGuild(), "The given guild cannot be null");
@@ -187,13 +188,13 @@ public void onSelectionMenu(@NotNull final SelectionMenuEvent event,
}
/**
- * Handles selection of a {@link SelectionMenuEvent}.
+ * Handles selection of a {@link SelectMenuInteractionEvent}.
*
- * @param event the unacknowledged {@link SelectionMenuEvent}
+ * @param event the unacknowledged {@link SelectMenuInteractionEvent}
* @param selectedRoles the {@link Role roles} selected
* @param guild the {@link Guild}
*/
- private static void handleRoleSelection(final @NotNull SelectionMenuEvent event,
+ private static void handleRoleSelection(final @NotNull SelectMenuInteractionEvent event,
final @NotNull Collection selectedRoles, final Guild guild) {
Collection rolesToAdd = new ArrayList<>(selectedRoles.size());
Collection rolesToRemove = new ArrayList<>(selectedRoles.size());
@@ -237,11 +238,10 @@ private static Function roleFromSelectOptionFunction(Guild g
*/
private void handleNewRoleBuilderSelection(@NotNull final ComponentInteraction event,
final @NotNull Collection extends Role> selectedRoles) {
- SelectionMenu.Builder menu =
- SelectionMenu.create(generateComponentId(event.getUser().getId()))
- .setPlaceholder("Select your roles")
- .setMaxValues(selectedRoles.size())
- .setMinValues(0);
+ SelectMenu.Builder menu = SelectMenu.create(generateComponentId(event.getUser().getId()))
+ .setPlaceholder("Select your roles")
+ .setMaxValues(selectedRoles.size())
+ .setMinValues(0);
selectedRoles.forEach(role -> menu.addOption(role.getName(), role.getId()));
@@ -273,7 +273,7 @@ private static void handleNullRole(final @NotNull SelectOption selectedOption) {
* @param additionRoles the roles to add
* @param removalRoles the roles to remove
*/
- private static void handleRoleModifications(@NotNull final Interaction event,
+ private static void handleRoleModifications(@NotNull final IReplyCallback event,
final Member member, final @NotNull Guild guild, final Collection additionRoles,
final Collection removalRoles) {
guild.modifyMemberRoles(member, additionRoles, removalRoles)
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/basic/SuggestionsUpDownVoter.java b/application/src/main/java/org/togetherjava/tjbot/commands/basic/SuggestionsUpDownVoter.java
index 8966932dcd..e3d7b5b29a 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/basic/SuggestionsUpDownVoter.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/basic/SuggestionsUpDownVoter.java
@@ -3,7 +3,7 @@
import net.dv8tion.jda.api.entities.Emote;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Message;
-import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.exceptions.ErrorResponseException;
import net.dv8tion.jda.api.requests.ErrorResponse;
import org.jetbrains.annotations.NotNull;
@@ -39,8 +39,8 @@ public SuggestionsUpDownVoter(@NotNull Config config) {
}
@Override
- public void onMessageReceived(@NotNull GuildMessageReceivedEvent event) {
- if (event.getAuthor().isBot() || event.isWebhookMessage()) {
+ public void onMessageReceived(@NotNull MessageReceivedEvent event) {
+ if (event.getAuthor().isBot() || event.isWebhookMessage() || !event.isFromGuild()) {
return;
}
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/basic/VcActivityCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/basic/VcActivityCommand.java
index 6c575e43af..04819cd751 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/basic/VcActivityCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/basic/VcActivityCommand.java
@@ -5,13 +5,13 @@
import net.dv8tion.jda.api.entities.Invite;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.VoiceChannel;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.Command;
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.commands.build.SubcommandData;
-import net.dv8tion.jda.api.requests.restaction.interactions.ReplyAction;
+import net.dv8tion.jda.api.requests.restaction.interactions.ReplyCallbackAction;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -19,6 +19,7 @@
import org.slf4j.LoggerFactory;
import org.togetherjava.tjbot.commands.SlashCommandAdapter;
import org.togetherjava.tjbot.commands.SlashCommandVisibility;
+
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -117,12 +118,13 @@ public VcActivityCommand() {
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
Member member = Objects.requireNonNull(event.getMember(), "member is null");
GuildVoiceState voiceState = Objects.requireNonNull(member.getVoiceState(),
"Voicestates aren't being cached, check the JDABuilder");
- if (!voiceState.inVoiceChannel()) {
+ if (!voiceState.inAudioChannel()
+ || !(voiceState.getChannel() instanceof VoiceChannel voiceChannel)) {
event.reply("You need to be in a voicechannel to run this command!")
.setEphemeral(true)
.queue();
@@ -130,8 +132,6 @@ public void onSlashCommand(@NotNull SlashCommandEvent event) {
return;
}
- VoiceChannel voiceChannel = Objects.requireNonNull(voiceState.getChannel());
-
Member selfMember = Objects.requireNonNull(event.getGuild()).getSelfMember();
if (!selfMember.hasPermission(Permission.CREATE_INSTANT_INVITE)) {
event.reply("The bot needs the create instant invite permission!")
@@ -177,7 +177,7 @@ public void onSlashCommand(@NotNull SlashCommandEvent event) {
return Optional.empty();
}
- private static void handleSubcommand(@NotNull SlashCommandEvent event,
+ private static void handleSubcommand(@NotNull SlashCommandInteractionEvent event,
@NotNull VoiceChannel voiceChannel, @NotNull String applicationId,
@Nullable Integer maxUses, @Nullable Integer maxAgeDays,
@NotNull String applicationName) {
@@ -193,8 +193,9 @@ private static void handleSubcommand(@NotNull SlashCommandEvent event,
}
- private static @NotNull ReplyAction replyInvite(@NotNull SlashCommandEvent event,
- @NotNull Invite invite, @NotNull String applicationName) {
+ private static @NotNull ReplyCallbackAction replyInvite(
+ @NotNull SlashCommandInteractionEvent event, @NotNull Invite invite,
+ @NotNull String applicationName) {
return event.reply("""
%s wants to start %s.
Feel free to join by clicking %s , enjoy!
@@ -202,7 +203,7 @@ private static void handleSubcommand(@NotNull SlashCommandEvent event,
""".formatted(event.getUser().getAsTag(), applicationName, invite.getUrl()));
}
- private static void handleErrors(@NotNull SlashCommandEvent event,
+ private static void handleErrors(@NotNull SlashCommandInteractionEvent event,
@Nullable Throwable throwable) {
event.reply("Something went wrong :/").queue();
logger.warn("Something went wrong in the VcActivityCommand", throwable);
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/componentids/ComponentId.java b/application/src/main/java/org/togetherjava/tjbot/commands/componentids/ComponentId.java
index eaeb9b17b8..4b31487515 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/componentids/ComponentId.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/componentids/ComponentId.java
@@ -1,14 +1,13 @@
package org.togetherjava.tjbot.commands.componentids;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
import org.jetbrains.annotations.NotNull;
import java.util.List;
/**
* Payload carried by component IDs. See
- * {@link org.togetherjava.tjbot.commands.SlashCommand#onSlashCommand(SlashCommandEvent)} for its
- * usages.
+ * {@link org.togetherjava.tjbot.commands.SlashCommand#onSlashCommand(SlashCommandInteractionEvent)}
+ * for its usages.
*
* @param commandName the name of the command that handles the event associated to this component
* ID, when triggered
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/componentids/ComponentIdGenerator.java b/application/src/main/java/org/togetherjava/tjbot/commands/componentids/ComponentIdGenerator.java
index 52bffc901a..41b9ef0a3c 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/componentids/ComponentIdGenerator.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/componentids/ComponentIdGenerator.java
@@ -1,8 +1,7 @@
package org.togetherjava.tjbot.commands.componentids;
import net.dv8tion.jda.api.entities.Emoji;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
-import net.dv8tion.jda.api.interactions.components.ButtonStyle;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.components.ComponentInteraction;
import org.jetbrains.annotations.NotNull;
@@ -12,8 +11,9 @@
* Component IDs are used during button or selection menu events. They can carry arbitrary data and
* are persisted by the system.
*
- * See {@link org.togetherjava.tjbot.commands.SlashCommand#onSlashCommand(SlashCommandEvent)} for
- * more context on how to use this.
+ * See
+ * {@link org.togetherjava.tjbot.commands.SlashCommand#onSlashCommand(SlashCommandInteractionEvent)}
+ * for more context on how to use this.
*
* The interface {@link ComponentIdParser} is the counterpart to this, offering parsing back the
* payload from the ID.
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/componentids/ComponentIdParser.java b/application/src/main/java/org/togetherjava/tjbot/commands/componentids/ComponentIdParser.java
index a6188da8b9..e616592bd0 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/componentids/ComponentIdParser.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/componentids/ComponentIdParser.java
@@ -1,8 +1,6 @@
package org.togetherjava.tjbot.commands.componentids;
import net.dv8tion.jda.api.entities.Emoji;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
-import net.dv8tion.jda.api.interactions.components.ButtonStyle;
import net.dv8tion.jda.api.interactions.components.ComponentInteraction;
import org.jetbrains.annotations.NotNull;
@@ -14,8 +12,9 @@
* Component IDs are used during button or selection menu events. They can carry arbitrary data and
* are persisted by the system.
*
- * See {@link org.togetherjava.tjbot.commands.SlashCommand#onSlashCommand(SlashCommandEvent)} for
- * more context on how to use this.
+ * See
+ * {@link org.togetherjava.tjbot.commands.SlashCommand#onSlashCommand(SlashCommandInteractionEvent)}
+ * for more context on how to use this.
*
* The interface {@link ComponentIdGenerator} is the counterpart to this, offering generation of IDs
* from payload.
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/componentids/ComponentIdStore.java b/application/src/main/java/org/togetherjava/tjbot/commands/componentids/ComponentIdStore.java
index 8aca4f38c3..ad4dcde67e 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/componentids/ComponentIdStore.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/componentids/ComponentIdStore.java
@@ -4,7 +4,6 @@
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
import org.jetbrains.annotations.NotNull;
import org.jooq.Result;
import org.slf4j.Logger;
@@ -27,8 +26,8 @@
/**
* Thread-safe storage for component IDs. Can put, persist and get back component IDs based on
* UUIDs. Component IDs are used for button and selection menu commands, see
- * {@link org.togetherjava.tjbot.commands.SlashCommand#onSlashCommand(SlashCommandEvent)} for
- * details.
+ * {@link org.togetherjava.tjbot.commands.SlashCommand#onSlashCommand(SlashCommandInteractionEvent)}
+ * for details.
*
* Use {@link #putOrThrow(UUID, ComponentId, Lifespan)} to put and persist a component ID; and
* {@link #get(UUID)} to get it back. Component IDs are persisted during application runs and can
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/componentids/package-info.java b/application/src/main/java/org/togetherjava/tjbot/commands/componentids/package-info.java
index 1353844d85..239d79060a 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/componentids/package-info.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/componentids/package-info.java
@@ -2,7 +2,7 @@
* This package provides utilities to generate, persist and parse component IDs.
*
* See
- * {@link org.togetherjava.tjbot.commands.SlashCommand#onSlashCommand(net.dv8tion.jda.api.events.interaction.SlashCommandEvent)}
+ * {@link org.togetherjava.tjbot.commands.SlashCommand#onSlashCommand(net.dv8tion.jda.api.events.interaction.SlashCommandInteractionEvent)}
* for details on component IDs.
*
* The class {@link org.togetherjava.tjbot.commands.componentids.ComponentIdStore} is the central
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/free/ChannelMonitor.java b/application/src/main/java/org/togetherjava/tjbot/commands/free/ChannelMonitor.java
index af2619dfc9..7eec12bb24 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/free/ChannelMonitor.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/free/ChannelMonitor.java
@@ -215,7 +215,7 @@ public String statusMessage(@NotNull final Guild guild) {
// pointless ... added to remove warnings
continue;
}
- Category category = channel.getParent();
+ Category category = channel.getParentCategory();
if (category != null && !category.getName().equals(categoryName)) {
categoryName = category.getName();
// append the category name on a new line with markup for underlining
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/free/FreeCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/free/FreeCommand.java
index dea8890c7c..5ac0ff2b57 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/free/FreeCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/free/FreeCommand.java
@@ -8,8 +8,8 @@
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.events.GenericEvent;
import net.dv8tion.jda.api.events.ReadyEvent;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
-import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.requests.RestAction;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
@@ -129,7 +129,7 @@ public void onReady(@NotNull final ReadyEvent event) {
* @throws IllegalStateException if this method is called for a Global Slash Command
*/
@Override
- public void onSlashCommand(@NotNull final SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull final SlashCommandInteractionEvent event) {
logger.debug("/free used by {} on channel {}", event.getUser().getAsTag(),
event.getChannel().getName());
if (!handleShouldBeProcessed(event)) {
@@ -159,7 +159,7 @@ public void onSlashCommand(@NotNull final SlashCommandEvent event) {
* @param event the event to test for validity.
* @return true if the event should be processed false otherwise.
*/
- private boolean handleShouldBeProcessed(@NotNull final SlashCommandEvent event) {
+ private boolean handleShouldBeProcessed(@NotNull final SlashCommandInteractionEvent event) {
if (!isReady) {
logger.debug(
"Slash command requested by {} in {}(channel: {}) before command is ready.",
@@ -245,7 +245,7 @@ private void checkBusyStatusAllChannels(@NotNull JDA jda) {
return guild;
}
- private @NotNull Guild requiresGuild(SlashCommandEvent event) {
+ private @NotNull Guild requiresGuild(SlashCommandInteractionEvent event) {
Guild guild = event.getGuild();
if (guild == null) {
throw new IllegalStateException(
@@ -294,26 +294,30 @@ private void checkBusyStatusAllChannels(@NotNull JDA jda) {
public void onEvent(@NotNull GenericEvent event) {
if (event instanceof ReadyEvent readyEvent) {
onReady(readyEvent);
- } else if (event instanceof GuildMessageReceivedEvent guildEvent) {
- if (guildEvent.isWebhookMessage() || guildEvent.getAuthor().isBot()) {
+ } else if (event instanceof MessageReceivedEvent messageEvent) {
+ if (messageEvent.isFromGuild()) {
return;
}
- if (!channelMonitor.isMonitoringChannel(guildEvent.getChannel().getIdLong())) {
+
+ if (messageEvent.isWebhookMessage() || messageEvent.getAuthor().isBot()) {
+ return;
+ }
+ if (!channelMonitor.isMonitoringChannel(messageEvent.getChannel().getIdLong())) {
logger.debug(
"Channel is not being monitored, ignoring message received in {} from {}",
- guildEvent.getChannel().getName(), guildEvent.getAuthor());
+ messageEvent.getChannel().getName(), messageEvent.getAuthor());
return;
}
- if (channelMonitor.isChannelBusy(guildEvent.getChannel().getIdLong())) {
+ if (channelMonitor.isChannelBusy(messageEvent.getChannel().getIdLong())) {
logger.debug(
"Channel status is currently busy, ignoring message received in {} from {}",
- guildEvent.getChannel().getName(), guildEvent.getAuthor());
+ messageEvent.getChannel().getName(), messageEvent.getAuthor());
return;
}
- channelMonitor.setChannelBusy(guildEvent.getChannel().getIdLong(),
- guildEvent.getAuthor().getIdLong());
- displayStatus(channelMonitor.getStatusChannelFor(guildEvent.getGuild()));
- guildEvent.getMessage().reply(UserStrings.NEW_QUESTION.message()).queue();
+ channelMonitor.setChannelBusy(messageEvent.getChannel().getIdLong(),
+ messageEvent.getAuthor().getIdLong());
+ displayStatus(channelMonitor.getStatusChannelFor(messageEvent.getGuild()));
+ messageEvent.getMessage().reply(UserStrings.NEW_QUESTION.message()).queue();
}
}
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/free/FreeUtil.java b/application/src/main/java/org/togetherjava/tjbot/commands/free/FreeUtil.java
index 99a002c257..0ab0711a4c 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/free/FreeUtil.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/free/FreeUtil.java
@@ -2,7 +2,7 @@
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.TextChannel;
-import net.dv8tion.jda.api.interactions.Interaction;
+import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
import net.dv8tion.jda.api.utils.TimeUtil;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
@@ -27,7 +27,8 @@ enum FreeUtil {
* @param interaction The event or hook that this message is responding to
* @param message The text to be display for the user to read.
*/
- public static void sendErrorMessage(@NotNull Interaction interaction, @NotNull String message) {
+ public static void sendErrorMessage(@NotNull IReplyCallback interaction,
+ @NotNull String message) {
interaction.reply(message).setEphemeral(true).queue();
}
@@ -64,9 +65,7 @@ public static void sendErrorMessage(@NotNull Interaction interaction, @NotNull S
* @return the id of the latest message or empty if it could not be retrieved.
*/
public static @NotNull OptionalLong getLastMessageId(@NotNull TextChannel channel) {
- if (channel.hasLatestMessage()) {
- return OptionalLong.of(channel.getLatestMessageIdLong());
- }
+
// black magic to convert Optional into OptionalLong because Optional does not have
// .mapToLong
return getChannelHistory(channel, 1).stream()
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/mathcommands/TeXCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/mathcommands/TeXCommand.java
index 468fe7fda2..6ca3a797b8 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/mathcommands/TeXCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/mathcommands/TeXCommand.java
@@ -1,10 +1,10 @@
package org.togetherjava.tjbot.commands.mathcommands;
-import net.dv8tion.jda.api.events.interaction.ButtonClickEvent;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.OptionType;
-import net.dv8tion.jda.api.interactions.components.Button;
-import net.dv8tion.jda.api.interactions.components.ButtonStyle;
+import net.dv8tion.jda.api.interactions.components.buttons.Button;
+import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
import org.jetbrains.annotations.NotNull;
import org.scilab.forge.jlatexmath.ParseException;
import org.scilab.forge.jlatexmath.TeXConstants;
@@ -52,7 +52,7 @@ public TeXCommand() {
}
@Override
- public void onSlashCommand(@NotNull final SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull final SlashCommandInteractionEvent event) {
String latex = Objects.requireNonNull(event.getOption(LATEX_OPTION)).getAsString();
String userID = (Objects.requireNonNull(event.getMember()).getId());
TeXFormula formula;
@@ -93,7 +93,7 @@ public void onSlashCommand(@NotNull final SlashCommandEvent event) {
}
@Override
- public void onButtonClick(@NotNull final ButtonClickEvent event,
+ public void onButtonClick(@NotNull final ButtonInteractionEvent event,
@NotNull final List args) {
if (!args.get(0).equals(Objects.requireNonNull(event.getMember()).getId())) {
event.reply("You are not the person who executed the command, you cannot do that")
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/AuditCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/AuditCommand.java
index 9a8c67e2d3..edd7c0df43 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/AuditCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/AuditCommand.java
@@ -3,8 +3,8 @@
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.*;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
-import net.dv8tion.jda.api.interactions.Interaction;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+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.requests.RestAction;
@@ -112,7 +112,7 @@ public AuditCommand(@NotNull ModerationActionsStore actionsStore, @NotNull Confi
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
OptionMapping targetOption =
Objects.requireNonNull(event.getOption(TARGET_OPTION), "The target is null");
User target = targetOption.getAsUser();
@@ -130,7 +130,7 @@ public void onSlashCommand(@NotNull SlashCommandEvent event) {
@SuppressWarnings("BooleanMethodNameMustStartWithQuestion")
private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
- @Nullable Member target, @NotNull Guild guild, @NotNull Interaction event) {
+ @Nullable Member target, @NotNull Guild guild, @NotNull IReplyCallback event) {
// Member doesn't exist if attempting to audit a user who is not part of the guild.
if (target != null && !ModerationUtils.handleCanInteractWithTarget(ACTION_VERB, bot, author,
target, event)) {
@@ -140,7 +140,7 @@ private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
}
private void auditUser(@NotNull User user, @NotNull ISnowflake guild,
- @NotNull Interaction event) {
+ @NotNull IReplyCallback event) {
List actions =
actionsStore.getActionsByTargetAscending(guild.getIdLong(), user.getIdLong());
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/BanCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/BanCommand.java
index d4a700d02b..109b1275bb 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/BanCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/BanCommand.java
@@ -3,10 +3,10 @@
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.events.GenericEvent;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.exceptions.ErrorResponseException;
-import net.dv8tion.jda.api.interactions.Interaction;
import net.dv8tion.jda.api.interactions.InteractionHook;
+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.commands.build.OptionData;
@@ -77,7 +77,7 @@ public BanCommand(@NotNull ModerationActionsStore actionsStore, @NotNull Config
}
private static RestAction handleAlreadyBanned(@NotNull Guild.Ban ban,
- @NotNull Interaction event) {
+ @NotNull IReplyCallback event) {
String reason = ban.getReason();
String reasonText =
reason == null || reason.isBlank() ? "" : " (reason: %s)".formatted(reason);
@@ -121,7 +121,7 @@ private static RestAction sendDm(@NotNull ISnowflake target,
}
private static Optional> handleNotAlreadyBannedResponse(
- @NotNull Throwable alreadyBannedFailure, @NotNull Interaction event,
+ @NotNull Throwable alreadyBannedFailure, @NotNull IReplyCallback event,
@NotNull Guild guild, @NotNull User target) {
if (alreadyBannedFailure instanceof ErrorResponseException errorResponseException) {
if (errorResponseException.getErrorResponse() == ErrorResponse.UNKNOWN_BAN) {
@@ -146,7 +146,8 @@ private static Optional> handleNotAlreadyBannedRespo
@SuppressWarnings("MethodWithTooManyParameters")
private RestAction banUserFlow(@NotNull User target, @NotNull Member author,
@Nullable ModerationUtils.TemporaryData temporaryData, @NotNull String reason,
- int deleteHistoryDays, @NotNull Guild guild, @NotNull SlashCommandEvent event) {
+ int deleteHistoryDays, @NotNull Guild guild,
+ @NotNull SlashCommandInteractionEvent event) {
return sendDm(target, temporaryData, reason, guild, event)
.flatMap(hasSentDm -> banUser(target, author, temporaryData, reason, deleteHistoryDays,
guild).map(banResult -> hasSentDm))
@@ -175,7 +176,7 @@ private AuditableRestAction banUser(@NotNull User target, @NotNull Member
@SuppressWarnings({"BooleanMethodNameMustStartWithQuestion", "MethodWithTooManyParameters"})
private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
@Nullable Member target, @NotNull CharSequence reason, @NotNull Guild guild,
- @NotNull Interaction event) {
+ @NotNull IReplyCallback event) {
// Member doesn't exist if attempting to ban a user who is not part of the guild.
if (target != null && !ModerationUtils.handleCanInteractWithTarget(ACTION_VERB, bot, author,
target, event)) {
@@ -196,7 +197,7 @@ private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
OptionMapping targetOption =
Objects.requireNonNull(event.getOption(TARGET_OPTION), "The target is null");
User target = targetOption.getAsUser();
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/KickCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/KickCommand.java
index b943b1e27d..17bd9cf460 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/KickCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/KickCommand.java
@@ -1,10 +1,13 @@
package org.togetherjava.tjbot.commands.moderation;
import net.dv8tion.jda.api.Permission;
-import net.dv8tion.jda.api.entities.*;
+import net.dv8tion.jda.api.entities.Guild;
+import net.dv8tion.jda.api.entities.ISnowflake;
+import net.dv8tion.jda.api.entities.Member;
+import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.events.GenericEvent;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
-import net.dv8tion.jda.api.interactions.Interaction;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.requests.RestAction;
import net.dv8tion.jda.api.requests.restaction.AuditableRestAction;
@@ -54,14 +57,15 @@ public KickCommand(@NotNull ModerationActionsStore actionsStore, @NotNull Config
this.actionsStore = Objects.requireNonNull(actionsStore);
}
- private static void handleAbsentTarget(@NotNull Interaction event) {
+ private static void handleAbsentTarget(@NotNull IReplyCallback event) {
event.reply("I can not kick the given user since they are not part of the guild anymore.")
.setEphemeral(true)
.queue();
}
private void kickUserFlow(@NotNull Member target, @NotNull Member author,
- @NotNull String reason, @NotNull Guild guild, @NotNull SlashCommandEvent event) {
+ @NotNull String reason, @NotNull Guild guild,
+ @NotNull SlashCommandInteractionEvent event) {
sendDm(target, reason, guild, event)
.flatMap(hasSentDm -> kickUser(target, author, reason, guild)
.map(kickResult -> hasSentDm))
@@ -110,7 +114,7 @@ private AuditableRestAction kickUser(@NotNull Member target, @NotNull Memb
@SuppressWarnings({"BooleanMethodNameMustStartWithQuestion", "MethodWithTooManyParameters"})
private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
@Nullable Member target, @NotNull CharSequence reason, @NotNull Guild guild,
- @NotNull Interaction event) {
+ @NotNull IReplyCallback event) {
// Member doesn't exist if attempting to kick a user who is not part of the guild anymore.
if (target == null) {
handleAbsentTarget(event);
@@ -134,7 +138,7 @@ private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
Member target = Objects.requireNonNull(event.getOption(TARGET_OPTION), "The target is null")
.getAsMember();
Member author = Objects.requireNonNull(event.getMember(), "The author is null");
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/ModerationUtils.java b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/ModerationUtils.java
index 44f4be3de6..48119596d4 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/ModerationUtils.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/ModerationUtils.java
@@ -3,7 +3,7 @@
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.*;
-import net.dv8tion.jda.api.interactions.Interaction;
+import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
@@ -50,7 +50,7 @@ public enum ModerationUtils {
* @return whether the reason is valid
*/
@SuppressWarnings("BooleanMethodNameMustStartWithQuestion")
- static boolean handleReason(@NotNull CharSequence reason, @NotNull Interaction event) {
+ static boolean handleReason(@NotNull CharSequence reason, @NotNull IReplyCallback event) {
if (reason.length() <= REASON_MAX_LENGTH) {
return true;
}
@@ -78,7 +78,7 @@ static boolean handleReason(@NotNull CharSequence reason, @NotNull Interaction e
*/
@SuppressWarnings("BooleanMethodNameMustStartWithQuestion")
static boolean handleCanInteractWithTarget(@NotNull String actionVerb, @NotNull Member bot,
- @NotNull Member author, @NotNull Member target, @NotNull Interaction event) {
+ @NotNull Member author, @NotNull Member target, @NotNull IReplyCallback event) {
String targetTag = target.getUser().getAsTag();
if (!author.canInteract(target)) {
event
@@ -113,7 +113,7 @@ static boolean handleCanInteractWithTarget(@NotNull String actionVerb, @NotNull
*/
@SuppressWarnings("BooleanMethodNameMustStartWithQuestion")
static boolean handleCanInteractWithRole(@NotNull Member bot, @NotNull Member author,
- @NotNull Role role, @NotNull Interaction event) {
+ @NotNull Role role, @NotNull IReplyCallback event) {
if (!author.canInteract(role)) {
event
.reply("The role %s is too powerful for you to interact with."
@@ -149,7 +149,7 @@ static boolean handleCanInteractWithRole(@NotNull Member bot, @NotNull Member au
@SuppressWarnings("BooleanMethodNameMustStartWithQuestion")
static boolean handleHasBotPermissions(@NotNull String actionVerb,
@NotNull Permission permission, @NotNull IPermissionHolder bot, @NotNull Guild guild,
- @NotNull Interaction event) {
+ @NotNull IReplyCallback event) {
if (!bot.hasPermission(permission)) {
event
.reply("I can not %s users in this guild since I do not have the %s permission."
@@ -164,7 +164,8 @@ static boolean handleHasBotPermissions(@NotNull String actionVerb,
return true;
}
- private static void handleAbsentTarget(@NotNull String actionVerb, @NotNull Interaction event) {
+ private static void handleAbsentTarget(@NotNull String actionVerb,
+ @NotNull IReplyCallback event) {
event
.reply("I can not %s the given user since they are not part of the guild anymore."
.formatted(actionVerb))
@@ -206,7 +207,7 @@ private static void handleAbsentTarget(@NotNull String actionVerb, @NotNull Inte
static boolean handleRoleChangeChecks(@Nullable Role role, @NotNull String actionVerb,
@Nullable Member target, @NotNull Member bot, @NotNull Member author,
@NotNull Guild guild, @NotNull Predicate super String> hasRequiredRole,
- @NotNull CharSequence reason, @NotNull Interaction event) {
+ @NotNull CharSequence reason, @NotNull IReplyCallback event) {
if (role == null) {
event
.reply("Can not %s the user, unable to find the corresponding role on this server"
@@ -254,7 +255,7 @@ static boolean handleRoleChangeChecks(@Nullable Role role, @NotNull String actio
@SuppressWarnings("BooleanMethodNameMustStartWithQuestion")
static boolean handleHasAuthorPermissions(@NotNull String actionVerb,
@NotNull Permission permission, @NotNull IPermissionHolder author, @NotNull Guild guild,
- @NotNull Interaction event) {
+ @NotNull IReplyCallback event) {
if (!author.hasPermission(permission)) {
event
.reply("You can not %s users in this guild since you do not have the %s permission."
@@ -281,7 +282,7 @@ static boolean handleHasAuthorPermissions(@NotNull String actionVerb,
@SuppressWarnings("BooleanMethodNameMustStartWithQuestion")
static boolean handleHasAuthorRole(@NotNull String actionVerb,
@NotNull Predicate super String> hasRequiredRole, @NotNull Member author,
- @NotNull Interaction event) {
+ @NotNull IReplyCallback event) {
if (author.getRoles().stream().map(Role::getName).anyMatch(hasRequiredRole)) {
return true;
}
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/MuteCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/MuteCommand.java
index bde61f0c59..7b4f244ef1 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/MuteCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/MuteCommand.java
@@ -2,8 +2,8 @@
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.events.GenericEvent;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
-import net.dv8tion.jda.api.interactions.Interaction;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
import net.dv8tion.jda.api.requests.RestAction;
@@ -68,7 +68,7 @@ public MuteCommand(@NotNull ModerationActionsStore actionsStore, @NotNull Config
this.actionsStore = Objects.requireNonNull(actionsStore);
}
- private static void handleAlreadyMutedTarget(@NotNull Interaction event) {
+ private static void handleAlreadyMutedTarget(@NotNull IReplyCallback event) {
event.reply("The user is already muted.").setEphemeral(true).queue();
}
@@ -126,7 +126,7 @@ private AuditableRestAction muteUser(@NotNull Member target, @NotNull Memb
@SuppressWarnings("MethodWithTooManyParameters")
private void muteUserFlow(@NotNull Member target, @NotNull Member author,
@Nullable ModerationUtils.TemporaryData temporaryData, @NotNull String reason,
- @NotNull Guild guild, @NotNull SlashCommandEvent event) {
+ @NotNull Guild guild, @NotNull SlashCommandInteractionEvent event) {
sendDm(target, temporaryData, reason, guild, event)
.flatMap(hasSentDm -> muteUser(target, author, temporaryData, reason, guild)
.map(result -> hasSentDm))
@@ -138,7 +138,7 @@ private void muteUserFlow(@NotNull Member target, @NotNull Member author,
@SuppressWarnings({"BooleanMethodNameMustStartWithQuestion", "MethodWithTooManyParameters"})
private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
@Nullable Member target, @NotNull CharSequence reason, @NotNull Guild guild,
- @NotNull Interaction event) {
+ @NotNull IReplyCallback event) {
if (!ModerationUtils.handleRoleChangeChecks(
ModerationUtils.getMutedRole(guild, config).orElse(null), ACTION_VERB, target, bot,
author, guild, hasRequiredRole, reason, event)) {
@@ -156,7 +156,7 @@ private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
Member target = Objects.requireNonNull(event.getOption(TARGET_OPTION), "The target is null")
.getAsMember();
Member author = Objects.requireNonNull(event.getMember(), "The author is null");
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/NoteCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/NoteCommand.java
index bc027947b8..285e4973ca 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/NoteCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/NoteCommand.java
@@ -1,8 +1,8 @@
package org.togetherjava.tjbot.commands.moderation;
import net.dv8tion.jda.api.entities.*;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
-import net.dv8tion.jda.api.interactions.Interaction;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+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 org.jetbrains.annotations.NotNull;
@@ -54,7 +54,7 @@ public NoteCommand(@NotNull ModerationActionsStore actionsStore, @NotNull Config
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
OptionMapping targetOption = event.getOption(USER_OPTION);
Member author = event.getMember();
Guild guild = event.getGuild();
@@ -70,7 +70,7 @@ public void onSlashCommand(@NotNull SlashCommandEvent event) {
@SuppressWarnings("BooleanMethodNameMustStartWithQuestion")
private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
- @Nullable Member target, CharSequence content, @NotNull Interaction event) {
+ @Nullable Member target, CharSequence content, @NotNull IReplyCallback event) {
if (target != null && !ModerationUtils.handleCanInteractWithTarget(ACTION_VERB, bot, author,
target, event)) {
return false;
@@ -84,7 +84,7 @@ private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
}
private void sendNote(@NotNull User target, @NotNull Member author, @NotNull String content,
- @NotNull ISnowflake guild, @NotNull Interaction event) {
+ @NotNull ISnowflake guild, @NotNull IReplyCallback event) {
storeNote(target, author, content, guild);
sendFeedback(target, author, content, event);
}
@@ -100,7 +100,7 @@ private void storeNote(@NotNull User target, @NotNull Member author, @NotNull St
}
private static void sendFeedback(@NotNull User target, @NotNull Member author,
- @NotNull String noteContent, @NotNull Interaction event) {
+ @NotNull String noteContent, @NotNull IReplyCallback event) {
MessageEmbed feedback = ModerationUtils.createActionResponse(author.getUser(),
ModerationAction.NOTE, target, null, noteContent);
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/QuarantineCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/QuarantineCommand.java
index 9d655b0440..cc3453dff5 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/QuarantineCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/QuarantineCommand.java
@@ -2,8 +2,8 @@
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.events.GenericEvent;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
-import net.dv8tion.jda.api.interactions.Interaction;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.requests.RestAction;
import net.dv8tion.jda.api.requests.restaction.AuditableRestAction;
@@ -59,7 +59,7 @@ public QuarantineCommand(@NotNull ModerationActionsStore actionsStore, @NotNull
this.actionsStore = Objects.requireNonNull(actionsStore);
}
- private static void handleAlreadyQuarantinedTarget(@NotNull Interaction event) {
+ private static void handleAlreadyQuarantinedTarget(@NotNull IReplyCallback event) {
event.reply("The user is already quarantined.").setEphemeral(true).queue();
}
@@ -107,7 +107,8 @@ private AuditableRestAction quarantineUser(@NotNull Member target, @NotNul
}
private void quarantineUserFlow(@NotNull Member target, @NotNull Member author,
- @NotNull String reason, @NotNull Guild guild, @NotNull SlashCommandEvent event) {
+ @NotNull String reason, @NotNull Guild guild,
+ @NotNull SlashCommandInteractionEvent event) {
sendDm(target, reason, guild, event)
.flatMap(hasSentDm -> quarantineUser(target, author, reason, guild)
.map(result -> hasSentDm))
@@ -119,7 +120,7 @@ private void quarantineUserFlow(@NotNull Member target, @NotNull Member author,
@SuppressWarnings({"BooleanMethodNameMustStartWithQuestion", "MethodWithTooManyParameters"})
private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
@Nullable Member target, @NotNull CharSequence reason, @NotNull Guild guild,
- @NotNull Interaction event) {
+ @NotNull IReplyCallback event) {
if (!ModerationUtils.handleRoleChangeChecks(
ModerationUtils.getQuarantinedRole(guild, config).orElse(null), ACTION_VERB, target,
bot, author, guild, hasRequiredRole, reason, event)) {
@@ -139,7 +140,7 @@ private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
Member target = event.getOption(TARGET_OPTION).getAsMember();
Member author = event.getMember();
String reason = event.getOption(REASON_OPTION).getAsString();
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/UnbanCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/UnbanCommand.java
index b7c72b6948..c26670f831 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/UnbanCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/UnbanCommand.java
@@ -2,9 +2,9 @@
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.*;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.exceptions.ErrorResponseException;
-import net.dv8tion.jda.api.interactions.Interaction;
+import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.requests.ErrorResponse;
import org.jetbrains.annotations.NotNull;
@@ -51,7 +51,7 @@ public UnbanCommand(@NotNull ModerationActionsStore actionsStore, @NotNull Confi
}
private void unban(@NotNull User target, @NotNull Member author, @NotNull String reason,
- @NotNull Guild guild, @NotNull Interaction event) {
+ @NotNull Guild guild, @NotNull IReplyCallback event) {
guild.unban(target).reason(reason).queue(result -> {
MessageEmbed message = ModerationUtils.createActionResponse(author.getUser(),
ModerationAction.UNBAN, target, null, reason);
@@ -67,7 +67,7 @@ private void unban(@NotNull User target, @NotNull Member author, @NotNull String
}
private static void handleFailure(@NotNull Throwable unbanFailure, @NotNull User target,
- @NotNull Interaction event) {
+ @NotNull IReplyCallback event) {
String targetTag = target.getAsTag();
if (unbanFailure instanceof ErrorResponseException errorResponseException) {
if (errorResponseException.getErrorResponse() == ErrorResponse.UNKNOWN_USER) {
@@ -91,7 +91,7 @@ private static void handleFailure(@NotNull Throwable unbanFailure, @NotNull User
@SuppressWarnings({"BooleanMethodNameMustStartWithQuestion"})
private boolean handleChecks(@NotNull IPermissionHolder bot, @NotNull Member author,
- @NotNull CharSequence reason, @NotNull Guild guild, @NotNull Interaction event) {
+ @NotNull CharSequence reason, @NotNull Guild guild, @NotNull IReplyCallback event) {
if (!ModerationUtils.handleHasAuthorRole(ACTION_VERB, hasRequiredRole, author, event)) {
return false;
}
@@ -108,7 +108,7 @@ private boolean handleChecks(@NotNull IPermissionHolder bot, @NotNull Member aut
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
User target = Objects.requireNonNull(event.getOption(TARGET_OPTION), "The target is null")
.getAsUser();
Member author = Objects.requireNonNull(event.getMember(), "The author is null");
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/UnmuteCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/UnmuteCommand.java
index dde79efa3a..bd2e79bdd7 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/UnmuteCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/UnmuteCommand.java
@@ -2,8 +2,8 @@
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.events.GenericEvent;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
-import net.dv8tion.jda.api.interactions.Interaction;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.requests.RestAction;
import net.dv8tion.jda.api.requests.restaction.AuditableRestAction;
@@ -56,7 +56,7 @@ public UnmuteCommand(@NotNull ModerationActionsStore actionsStore, @NotNull Conf
this.actionsStore = Objects.requireNonNull(actionsStore);
}
- private static void handleNotMutedTarget(@NotNull Interaction event) {
+ private static void handleNotMutedTarget(@NotNull IReplyCallback event) {
event.reply("The user is not muted.").setEphemeral(true).queue();
}
@@ -99,7 +99,8 @@ private AuditableRestAction unmuteUser(@NotNull Member target, @NotNull Me
}
private void unmuteUserFlow(@NotNull Member target, @NotNull Member author,
- @NotNull String reason, @NotNull Guild guild, @NotNull SlashCommandEvent event) {
+ @NotNull String reason, @NotNull Guild guild,
+ @NotNull SlashCommandInteractionEvent event) {
sendDm(target, reason, guild, event)
.flatMap(
hasSentDm -> unmuteUser(target, author, reason, guild).map(result -> hasSentDm))
@@ -111,7 +112,7 @@ private void unmuteUserFlow(@NotNull Member target, @NotNull Member author,
@SuppressWarnings({"BooleanMethodNameMustStartWithQuestion", "MethodWithTooManyParameters"})
private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
@Nullable Member target, @NotNull CharSequence reason, @NotNull Guild guild,
- @NotNull Interaction event) {
+ @NotNull IReplyCallback event) {
if (!ModerationUtils.handleRoleChangeChecks(
ModerationUtils.getMutedRole(guild, config).orElse(null), ACTION_VERB, target, bot,
author, guild, hasRequiredRole, reason, event)) {
@@ -129,7 +130,7 @@ private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
Member target = Objects.requireNonNull(event.getOption(TARGET_OPTION), "The target is null")
.getAsMember();
Member author = Objects.requireNonNull(event.getMember(), "The author is null");
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/UnquarantineCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/UnquarantineCommand.java
index 0da00e5527..9e33c4841f 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/UnquarantineCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/UnquarantineCommand.java
@@ -2,8 +2,8 @@
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.events.GenericEvent;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
-import net.dv8tion.jda.api.interactions.Interaction;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.requests.RestAction;
import net.dv8tion.jda.api.requests.restaction.AuditableRestAction;
@@ -61,7 +61,7 @@ public UnquarantineCommand(@NotNull ModerationActionsStore actionsStore,
this.actionsStore = Objects.requireNonNull(actionsStore);
}
- private static void handleNotQuarantinedTarget(@NotNull Interaction event) {
+ private static void handleNotQuarantinedTarget(@NotNull IReplyCallback event) {
event.reply("The user is not quarantined.").setEphemeral(true).queue();
}
@@ -106,7 +106,8 @@ private AuditableRestAction unquarantineUser(@NotNull Member target,
}
private void unquarantineUserFlow(@NotNull Member target, @NotNull Member author,
- @NotNull String reason, @NotNull Guild guild, @NotNull SlashCommandEvent event) {
+ @NotNull String reason, @NotNull Guild guild,
+ @NotNull SlashCommandInteractionEvent event) {
sendDm(target, reason, guild, event)
.flatMap(hasSentDm -> unquarantineUser(target, author, reason, guild)
.map(result -> hasSentDm))
@@ -118,7 +119,7 @@ private void unquarantineUserFlow(@NotNull Member target, @NotNull Member author
@SuppressWarnings({"BooleanMethodNameMustStartWithQuestion", "MethodWithTooManyParameters"})
private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
@Nullable Member target, @NotNull CharSequence reason, @NotNull Guild guild,
- @NotNull Interaction event) {
+ @NotNull IReplyCallback event) {
if (!ModerationUtils.handleRoleChangeChecks(
ModerationUtils.getQuarantinedRole(guild, config).orElse(null), ACTION_VERB, target,
bot, author, guild, hasRequiredRole, reason, event)) {
@@ -138,7 +139,7 @@ private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
Member target = event.getOption(TARGET_OPTION).getAsMember();
Member author = event.getMember();
String reason = event.getOption(REASON_OPTION).getAsString();
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/WarnCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/WarnCommand.java
index f82ffb00b9..32c84a400d 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/moderation/WarnCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/WarnCommand.java
@@ -1,7 +1,7 @@
package org.togetherjava.tjbot.commands.moderation;
import net.dv8tion.jda.api.entities.*;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.InteractionHook;
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
import net.dv8tion.jda.api.interactions.commands.OptionType;
@@ -54,7 +54,7 @@ public WarnCommand(@NotNull ModerationActionsStore actionsStore, @NotNull Config
private @NotNull RestAction warnUserFlow(@NotNull User target,
@NotNull Member author, @NotNull String reason, @NotNull Guild guild,
- @NotNull SlashCommandEvent event) {
+ @NotNull SlashCommandInteractionEvent event) {
return dmUser(target, reason, guild, event).map(hasSentDm -> {
warnUser(target, author, reason, guild);
return hasSentDm;
@@ -64,7 +64,8 @@ public WarnCommand(@NotNull ModerationActionsStore actionsStore, @NotNull Config
}
private static @NotNull RestAction dmUser(@NotNull ISnowflake target,
- @NotNull String reason, @NotNull Guild guild, @NotNull SlashCommandEvent event) {
+ @NotNull String reason, @NotNull Guild guild,
+ @NotNull SlashCommandInteractionEvent event) {
return event.getJDA()
.openPrivateChannelById(target.getId())
.flatMap(channel -> channel.sendMessage(
@@ -99,7 +100,7 @@ private void warnUser(@NotNull User target, @NotNull Member author, @NotNull Str
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
OptionMapping targetOption =
Objects.requireNonNull(event.getOption(USER_OPTION), "The target is null");
Member author = Objects.requireNonNull(event.getMember(), "The author is null");
@@ -117,7 +118,7 @@ public void onSlashCommand(@NotNull SlashCommandEvent event) {
@SuppressWarnings("BooleanMethodNameMustStartWithQuestion")
private boolean handleChecks(@NotNull Member bot, @NotNull Member author,
- @Nullable Member target, String reason, @NotNull SlashCommandEvent event) {
+ @Nullable Member target, String reason, @NotNull SlashCommandInteractionEvent event) {
if (target != null && !ModerationUtils.handleCanInteractWithTarget(ACTION_VERB, bot, author,
target, event)) {
return false;
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/reminder/RemindCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/reminder/RemindCommand.java
index 72396dfd37..664bd69306 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/reminder/RemindCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/reminder/RemindCommand.java
@@ -2,8 +2,8 @@
import net.dv8tion.jda.api.entities.ISnowflake;
import net.dv8tion.jda.api.entities.User;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
-import net.dv8tion.jda.api.interactions.Interaction;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
import org.jetbrains.annotations.NotNull;
@@ -71,7 +71,7 @@ public RemindCommand(@NotNull Database database) {
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
int timeAmount = Math.toIntExact(event.getOption(TIME_AMOUNT_OPTION).getAsLong());
String timeUnit = event.getOption(TIME_UNIT_OPTION).getAsString();
String content = event.getOption(CONTENT_OPTION).getAsString();
@@ -116,7 +116,7 @@ public void onSlashCommand(@NotNull SlashCommandEvent event) {
}
private static boolean handleIsRemindAtWithinLimits(@NotNull Instant remindAt,
- @NotNull Interaction event) {
+ @NotNull IReplyCallback event) {
ZonedDateTime maxWhen = ZonedDateTime.now(ZoneOffset.UTC).plus(MAX_TIME_PERIOD);
if (remindAt.atZone(ZoneOffset.UTC).isBefore(maxWhen)) {
@@ -133,7 +133,7 @@ private static boolean handleIsRemindAtWithinLimits(@NotNull Instant remindAt,
}
private boolean handleIsUserBelowMaxPendingReminders(@NotNull ISnowflake author,
- @NotNull Interaction event) {
+ @NotNull IReplyCallback event) {
int pendingReminders = database.read(context -> context.fetchCount(PENDING_REMINDERS,
PENDING_REMINDERS.AUTHOR_ID.equal(author.getIdLong())));
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/system/BotCore.java b/application/src/main/java/org/togetherjava/tjbot/commands/system/BotCore.java
index 57dce916b2..55d3dc160b 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/system/BotCore.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/system/BotCore.java
@@ -2,15 +2,15 @@
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.Permission;
-import net.dv8tion.jda.api.entities.AbstractChannel;
+import net.dv8tion.jda.api.entities.Channel;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.events.ReadyEvent;
-import net.dv8tion.jda.api.events.interaction.ButtonClickEvent;
-import net.dv8tion.jda.api.events.interaction.SelectionMenuEvent;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
-import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
-import net.dv8tion.jda.api.events.message.guild.GuildMessageUpdateEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
+import net.dv8tion.jda.api.events.interaction.component.SelectMenuInteractionEvent;
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import net.dv8tion.jda.api.events.message.MessageUpdateEvent;
import net.dv8tion.jda.api.exceptions.ErrorHandler;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.interactions.commands.Command;
@@ -155,19 +155,23 @@ public void onReady(@NotNull ReadyEvent event) {
}
@Override
- public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) {
- getMessageReceiversSubscribedTo(event.getChannel())
- .forEach(messageReceiver -> messageReceiver.onMessageReceived(event));
+ public void onMessageReceived(@NotNull final MessageReceivedEvent event) {
+ if (event.isFromGuild()) {
+ getMessageReceiversSubscribedTo(event.getChannel())
+ .forEach(messageReceiver -> messageReceiver.onMessageReceived(event));
+ }
}
@Override
- public void onGuildMessageUpdate(@NotNull GuildMessageUpdateEvent event) {
- getMessageReceiversSubscribedTo(event.getChannel())
- .forEach(messageReceiver -> messageReceiver.onMessageUpdated(event));
+ public void onMessageUpdate(@NotNull final MessageUpdateEvent event) {
+ if (event.isFromGuild()) {
+ getMessageReceiversSubscribedTo(event.getChannel())
+ .forEach(messageReceiver -> messageReceiver.onMessageUpdated(event));
+ }
}
private @NotNull Stream getMessageReceiversSubscribedTo(
- @NotNull AbstractChannel channel) {
+ @NotNull Channel channel) {
String channelName = channel.getName();
return channelNameToMessageReceiver.entrySet()
.stream()
@@ -178,21 +182,21 @@ public void onGuildMessageUpdate(@NotNull GuildMessageUpdateEvent event) {
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommandInteraction(@NotNull SlashCommandInteractionEvent event) {
logger.debug("Received slash command '{}' (#{}) on guild '{}'", event.getName(),
event.getId(), event.getGuild());
COMMAND_SERVICE.execute(() -> requireSlashCommand(event.getName()).onSlashCommand(event));
}
@Override
- public void onButtonClick(@NotNull ButtonClickEvent event) {
+ public void onButtonInteraction(@NotNull ButtonInteractionEvent event) {
logger.debug("Received button click '{}' (#{}) on guild '{}'", event.getComponentId(),
event.getId(), event.getGuild());
COMMAND_SERVICE.execute(() -> forwardComponentCommand(event, SlashCommand::onButtonClick));
}
@Override
- public void onSelectionMenu(@NotNull SelectionMenuEvent event) {
+ public void onSelectMenuInteraction(@NotNull SelectMenuInteractionEvent event) {
logger.debug("Received selection menu event '{}' (#{}) on guild '{}'",
event.getComponentId(), event.getId(), event.getGuild());
COMMAND_SERVICE
@@ -282,7 +286,7 @@ private void handleRegisterErrors(Throwable ex, Guild guild) {
Optional channelToReportTo = guild.getTextChannelCache()
.stream()
.filter(channel -> guild.getPublicRole()
- .hasPermission(channel, Permission.MESSAGE_WRITE))
+ .hasPermission(channel, Permission.MESSAGE_SEND))
.findAny();
// Report the problem to the guild
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/system/ReloadCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/system/ReloadCommand.java
index 33613c797a..cd2c83a223 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/system/ReloadCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/system/ReloadCommand.java
@@ -4,10 +4,10 @@
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
-import net.dv8tion.jda.api.events.interaction.ButtonClickEvent;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
-import net.dv8tion.jda.api.interactions.components.Button;
-import net.dv8tion.jda.api.interactions.components.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.components.buttons.Button;
+import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
import net.dv8tion.jda.api.requests.RestAction;
import net.dv8tion.jda.api.requests.restaction.CommandListUpdateAction;
import org.jetbrains.annotations.NotNull;
@@ -54,7 +54,7 @@ public ReloadCommand(@NotNull SlashCommandProvider commandProvider) {
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
Member member = Objects.requireNonNull(event.getMember());
if (!member.hasPermission(Permission.MANAGE_SERVER)) {
@@ -76,7 +76,7 @@ public void onSlashCommand(@NotNull SlashCommandEvent event) {
}
@Override
- public void onButtonClick(@NotNull ButtonClickEvent event, @NotNull List args) {
+ public void onButtonClick(@NotNull ButtonInteractionEvent event, @NotNull List args) {
// Ignore if another user clicked the button
String userId = args.get(0);
if (!userId.equals(Objects.requireNonNull(event.getMember()).getId())) {
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/tags/TagCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/tags/TagCommand.java
index 73308fd317..de59fae319 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/tags/TagCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/tags/TagCommand.java
@@ -1,10 +1,10 @@
package org.togetherjava.tjbot.commands.tags;
import net.dv8tion.jda.api.EmbedBuilder;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
import net.dv8tion.jda.api.interactions.commands.OptionType;
-import net.dv8tion.jda.api.requests.restaction.interactions.ReplyAction;
+import net.dv8tion.jda.api.requests.restaction.interactions.ReplyCallbackAction;
import org.jetbrains.annotations.NotNull;
import org.togetherjava.tjbot.commands.SlashCommandAdapter;
import org.togetherjava.tjbot.commands.SlashCommandVisibility;
@@ -43,7 +43,7 @@ public TagCommand(TagSystem tagSystem) {
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
String id = Objects.requireNonNull(event.getOption(ID_OPTION)).getAsString();
OptionMapping replyToUserOption = event.getOption(REPLY_TO_USER_OPTION);
@@ -51,7 +51,7 @@ public void onSlashCommand(@NotNull SlashCommandEvent event) {
return;
}
- ReplyAction message = event
+ ReplyCallbackAction message = event
.replyEmbeds(new EmbedBuilder().setDescription(tagSystem.getTag(id).orElseThrow())
.setFooter(event.getUser().getName() + " • used " + event.getCommandString())
.setTimestamp(Instant.now())
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/tags/TagManageCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/tags/TagManageCommand.java
index e2bae097b8..3eb996a7cb 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/tags/TagManageCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/tags/TagManageCommand.java
@@ -5,9 +5,9 @@
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.entities.User;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.exceptions.ErrorResponseException;
-import net.dv8tion.jda.api.interactions.Interaction;
+import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
import net.dv8tion.jda.api.interactions.commands.CommandInteraction;
import net.dv8tion.jda.api.interactions.commands.OptionType;
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
@@ -112,7 +112,7 @@ public TagManageCommand(@NotNull TagSystem tagSystem, @NotNull Config config,
.addOption(OptionType.STRING, ID_OPTION, ID_DESCRIPTION, true));
}
- private static void sendSuccessMessage(@NotNull Interaction event, @NotNull String id,
+ private static void sendSuccessMessage(@NotNull IReplyCallback event, @NotNull String id,
@NotNull String actionVerb) {
logger.info("User '{}' {} the tag with id '{}'.", event.getUser().getId(), actionVerb, id);
@@ -137,7 +137,7 @@ private static void sendSuccessMessage(@NotNull Interaction event, @NotNull Stri
* @return the parsed message id, if successful
*/
private static OptionalLong parseMessageIdAndHandle(@NotNull String messageId,
- @NotNull Interaction event) {
+ @NotNull IReplyCallback event) {
try {
return OptionalLong.of(Long.parseLong(messageId));
} catch (NumberFormatException e) {
@@ -151,7 +151,7 @@ private static OptionalLong parseMessageIdAndHandle(@NotNull String messageId,
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
if (!hasTagManageRole(Objects.requireNonNull(event.getMember()))) {
event.reply("Tags can only be managed by users with a corresponding role.")
.setEphemeral(true)
@@ -171,7 +171,7 @@ public void onSlashCommand(@NotNull SlashCommandEvent event) {
}
}
- private void rawTag(@NotNull SlashCommandEvent event) {
+ private void rawTag(@NotNull SlashCommandInteractionEvent event) {
String id = Objects.requireNonNull(event.getOption(ID_OPTION)).getAsString();
if (tagSystem.handleIsUnknownTag(id, event)) {
return;
@@ -338,7 +338,7 @@ private void handleActionWithMessage(@NotNull TagStatus requiredTagStatus,
* @return whether the status of the given tag is not equal to the required status
*/
private boolean isWrongTagStatusAndHandle(@NotNull TagStatus requiredTagStatus,
- @NotNull String id, @NotNull Interaction event) {
+ @NotNull String id, @NotNull IReplyCallback event) {
if (requiredTagStatus == TagStatus.EXISTS) {
return tagSystem.handleIsUnknownTag(id, event);
} else if (requiredTagStatus == TagStatus.NOT_EXISTS) {
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/tags/TagSystem.java b/application/src/main/java/org/togetherjava/tjbot/commands/tags/TagSystem.java
index a708ef5d5a..0a9090d0d5 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/tags/TagSystem.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/tags/TagSystem.java
@@ -1,9 +1,9 @@
package org.togetherjava.tjbot.commands.tags;
import net.dv8tion.jda.api.entities.Emoji;
-import net.dv8tion.jda.api.interactions.Interaction;
-import net.dv8tion.jda.api.interactions.components.Button;
-import net.dv8tion.jda.api.interactions.components.ButtonStyle;
+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.jetbrains.annotations.NotNull;
import org.togetherjava.tjbot.commands.utils.StringDistances;
import org.togetherjava.tjbot.db.Database;
@@ -59,7 +59,7 @@ static Button createDeleteButton(String componentId) {
* @return whether the given tag is unknown to the system
*/
@SuppressWarnings("BooleanMethodNameMustStartWithQuestion")
- boolean handleIsUnknownTag(@NotNull String id, @NotNull Interaction event) {
+ boolean handleIsUnknownTag(@NotNull String id, @NotNull IReplyCallback event) {
if (hasTag(id)) {
return false;
}
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/tags/TagsCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/tags/TagsCommand.java
index e17b8c2160..8606c7f933 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/tags/TagsCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/tags/TagsCommand.java
@@ -2,8 +2,8 @@
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.Permission;
-import net.dv8tion.jda.api.events.interaction.ButtonClickEvent;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -49,7 +49,7 @@ public TagsCommand(TagSystem tagSystem) {
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
Collection tagIds = tagSystem.getAllIds();
if (tagIds.size() > MAX_TAGS_THRESHOLD_WARNING) {
// TODO Implement the edge case
@@ -73,7 +73,7 @@ public void onSlashCommand(@NotNull SlashCommandEvent event) {
}
@Override
- public void onButtonClick(@NotNull ButtonClickEvent event, @NotNull List args) {
+ public void onButtonClick(@NotNull ButtonInteractionEvent event, @NotNull List args) {
String userId = args.get(0);
if (!event.getUser().getId().equals(userId) && !Objects.requireNonNull(event.getMember())
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/tophelper/TopHelpersCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/tophelper/TopHelpersCommand.java
index 9e46748efd..7b0b77958f 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/tophelper/TopHelpersCommand.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/tophelper/TopHelpersCommand.java
@@ -6,8 +6,9 @@
import com.github.freva.asciitable.HorizontalAlign;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Role;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
-import net.dv8tion.jda.api.interactions.Interaction;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.interactions.callbacks.IDeferrableCallback;
+import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jooq.Records;
@@ -65,7 +66,7 @@ public TopHelpersCommand(@NotNull Database database, @NotNull Config config) {
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
if (!handleHasAuthorRole(event.getMember(), event)) {
return;
}
@@ -91,7 +92,7 @@ public void onSlashCommand(@NotNull SlashCommandEvent event) {
}
@SuppressWarnings("BooleanMethodNameMustStartWithQuestion")
- private boolean handleHasAuthorRole(@NotNull Member author, @NotNull Interaction event) {
+ private boolean handleHasAuthorRole(@NotNull Member author, @NotNull IReplyCallback event) {
if (author.getRoles().stream().map(Role::getName).anyMatch(hasRequiredRole)) {
return true;
}
@@ -125,14 +126,14 @@ private boolean handleHasAuthorRole(@NotNull Member author, @NotNull Interaction
.fetch(Records.mapping(TopHelperResult::new)));
}
- private static void handleError(@NotNull Throwable error, @NotNull Interaction event) {
+ private static void handleError(@NotNull Throwable error, @NotNull IDeferrableCallback event) {
logger.warn("Failed to compute top-helpers", error);
event.getHook().editOriginal("Sorry, something went wrong.").queue();
}
private static void handleTopHelpers(@NotNull Collection topHelpers,
@NotNull Collection extends Member> members, @NotNull TimeRange timeRange,
- @NotNull Interaction event) {
+ @NotNull IDeferrableCallback event) {
Map userIdToMember =
members.stream().collect(Collectors.toMap(Member::getIdLong, Function.identity()));
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/tophelper/TopHelpersMessageListener.java b/application/src/main/java/org/togetherjava/tjbot/commands/tophelper/TopHelpersMessageListener.java
index 26c314e8f0..b7643df083 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/tophelper/TopHelpersMessageListener.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/tophelper/TopHelpersMessageListener.java
@@ -1,6 +1,6 @@
package org.togetherjava.tjbot.commands.tophelper;
-import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.jetbrains.annotations.NotNull;
import org.togetherjava.tjbot.commands.MessageReceiverAdapter;
import org.togetherjava.tjbot.config.Config;
@@ -29,7 +29,7 @@ public TopHelpersMessageListener(@NotNull Database database, @NotNull Config con
}
@Override
- public void onMessageReceived(@NotNull GuildMessageReceivedEvent event) {
+ public void onMessageReceived(@NotNull MessageReceivedEvent event) {
if (event.getAuthor().isBot() || event.isWebhookMessage()) {
return;
}
@@ -37,7 +37,7 @@ public void onMessageReceived(@NotNull GuildMessageReceivedEvent event) {
addMessageRecord(event);
}
- private void addMessageRecord(@NotNull GuildMessageReceivedEvent event) {
+ private void addMessageRecord(@NotNull MessageReceivedEvent event) {
database.write(context -> context.newRecord(HELP_CHANNEL_MESSAGES)
.setMessageId(event.getMessage().getIdLong())
.setGuildId(event.getGuild().getIdLong())
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/utils/DiscordClientAction.java b/application/src/main/java/org/togetherjava/tjbot/commands/utils/DiscordClientAction.java
index 4effea23c3..bf3b947e44 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/utils/DiscordClientAction.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/utils/DiscordClientAction.java
@@ -1,7 +1,7 @@
package org.togetherjava.tjbot.commands.utils;
-import net.dv8tion.jda.api.interactions.components.Button;
-import net.dv8tion.jda.api.interactions.components.ButtonStyle;
+import net.dv8tion.jda.api.interactions.components.buttons.Button;
+import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
diff --git a/application/src/main/java/org/togetherjava/tjbot/commands/utils/MessageUtils.java b/application/src/main/java/org/togetherjava/tjbot/commands/utils/MessageUtils.java
index 70895df89a..9ef485e9f2 100644
--- a/application/src/main/java/org/togetherjava/tjbot/commands/utils/MessageUtils.java
+++ b/application/src/main/java/org/togetherjava/tjbot/commands/utils/MessageUtils.java
@@ -2,7 +2,7 @@
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.interactions.components.ActionRow;
-import net.dv8tion.jda.api.interactions.components.Button;
+import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.utils.MarkdownSanitizer;
import org.jetbrains.annotations.NotNull;
diff --git a/application/src/test/java/org/togetherjava/tjbot/commands/SlashCommandAdapterTest.java b/application/src/test/java/org/togetherjava/tjbot/commands/SlashCommandAdapterTest.java
index 410796c88c..a665fceb56 100644
--- a/application/src/test/java/org/togetherjava/tjbot/commands/SlashCommandAdapterTest.java
+++ b/application/src/test/java/org/togetherjava/tjbot/commands/SlashCommandAdapterTest.java
@@ -1,7 +1,7 @@
package org.togetherjava.tjbot.commands;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
-import net.dv8tion.jda.api.interactions.commands.build.CommandData;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.Test;
import org.togetherjava.tjbot.commands.componentids.Lifespan;
@@ -19,7 +19,7 @@ static SlashCommandAdapter createAdapter() {
// noinspection AnonymousInnerClass
return new SlashCommandAdapter(NAME, DESCRIPTION, VISIBILITY) {
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
// No implementation needed for the test
}
};
@@ -43,7 +43,7 @@ void getVisibility() {
@Test
void getData() {
SlashCommandAdapter adapter = createAdapter();
- CommandData data = adapter.getData();
+ SlashCommandData data = adapter.getData();
assertEquals(NAME, data.getName(),
"adapters name is inconsistent with the base data object");
assertEquals(DESCRIPTION, data.getDescription(),
@@ -53,7 +53,7 @@ void getData() {
String otherName = NAME + "-bar";
String otherDescription = DESCRIPTION + "-bar";
data.setName(otherName).setDescription(otherDescription);
- CommandData otherData = adapter.getData();
+ SlashCommandData otherData = adapter.getData();
assertSame(data, otherData, "adapter changed the data object");
assertEquals(otherName, otherData.getName(), "name changes did not carry over");
diff --git a/application/src/test/java/org/togetherjava/tjbot/commands/basic/PingCommandTest.java b/application/src/test/java/org/togetherjava/tjbot/commands/basic/PingCommandTest.java
index d363ae2dd2..f92d05d0f6 100644
--- a/application/src/test/java/org/togetherjava/tjbot/commands/basic/PingCommandTest.java
+++ b/application/src/test/java/org/togetherjava/tjbot/commands/basic/PingCommandTest.java
@@ -1,6 +1,6 @@
package org.togetherjava.tjbot.commands.basic;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
@@ -14,8 +14,9 @@ final class PingCommandTest {
private JdaTester jdaTester;
private SlashCommand command;
- private @NotNull SlashCommandEvent triggerSlashCommand() {
- SlashCommandEvent event = jdaTester.createSlashCommandEvent(command).build();
+ private @NotNull SlashCommandInteractionEvent triggerSlashCommand() {
+ SlashCommandInteractionEvent event =
+ jdaTester.createSlashCommandInteractionEvent(command).build();
command.onSlashCommand(event);
return event;
}
@@ -31,7 +32,7 @@ void setUp() {
void pingRespondsWithPong() {
// GIVEN
// WHEN using '/ping'
- SlashCommandEvent event = triggerSlashCommand();
+ SlashCommandInteractionEvent event = triggerSlashCommand();
// THEN the bot replies with pong
verify(event).reply("Pong!");
diff --git a/application/src/test/java/org/togetherjava/tjbot/commands/tags/TagCommandTest.java b/application/src/test/java/org/togetherjava/tjbot/commands/tags/TagCommandTest.java
index eb4311e2cf..9c59de5ff5 100644
--- a/application/src/test/java/org/togetherjava/tjbot/commands/tags/TagCommandTest.java
+++ b/application/src/test/java/org/togetherjava/tjbot/commands/tags/TagCommandTest.java
@@ -2,7 +2,7 @@
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.MessageEmbed;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.junit.jupiter.api.BeforeEach;
@@ -12,7 +12,7 @@
import org.togetherjava.tjbot.db.Database;
import org.togetherjava.tjbot.db.generated.tables.Tags;
import org.togetherjava.tjbot.jda.JdaTester;
-import org.togetherjava.tjbot.jda.SlashCommandEventBuilder;
+import org.togetherjava.tjbot.jda.SlashCommandInteractionEventBuilder;
import static org.mockito.Mockito.*;
@@ -29,15 +29,16 @@ void setUp() {
command = new TagCommand(system);
}
- private @NotNull SlashCommandEvent triggerSlashCommand(@NotNull String id,
+ private @NotNull SlashCommandInteractionEvent triggerSlashCommand(@NotNull String id,
@Nullable Member userToReplyTo) {
- SlashCommandEventBuilder builder =
- jdaTester.createSlashCommandEvent(command).setOption(TagCommand.ID_OPTION, id);
+ SlashCommandInteractionEventBuilder builder =
+ jdaTester.createSlashCommandInteractionEvent(command)
+ .setOption(TagCommand.ID_OPTION, id);
if (userToReplyTo != null) {
builder.setOption(TagCommand.REPLY_TO_USER_OPTION, userToReplyTo);
}
- SlashCommandEvent event = builder.build();
+ SlashCommandInteractionEvent event = builder.build();
command.onSlashCommand(event);
return event;
}
@@ -47,7 +48,7 @@ void setUp() {
void canNotFindTagInEmptySystem() {
// GIVEN a system without any tags registered
// WHEN triggering the slash command '/tag id:first'
- SlashCommandEvent event = triggerSlashCommand("first", null);
+ SlashCommandInteractionEvent event = triggerSlashCommand("first", null);
// THEN responds that the tag could not be found
verify(event).reply("Could not find any tag with id 'first'.");
@@ -60,7 +61,7 @@ void canNotFindTagSuggestDifferentTag() {
system.putTag("first", "foo");
// WHEN triggering the slash command '/tag id:second'
- SlashCommandEvent event = triggerSlashCommand("second", null);
+ SlashCommandInteractionEvent event = triggerSlashCommand("second", null);
// THEN responds that the tag could not be found and instead suggests using the other tag
verify(event)
@@ -74,7 +75,7 @@ void canFindTheTagAndRespondWithContent() {
system.putTag("first", "foo");
// WHEN triggering the slash command '/tag id:first'
- SlashCommandEvent event = triggerSlashCommand("first", null);
+ SlashCommandInteractionEvent event = triggerSlashCommand("first", null);
// THEN finds the tag and responds with its content
verify(event).replyEmbeds(any(MessageEmbed.class));
@@ -88,7 +89,7 @@ void canFindTagsAndRepliesToUser() {
Member userToReplyTo = jdaTester.createMemberSpy(1);
// WHEN triggering the slash command '/tag id:first reply-to:...' with that user
- SlashCommandEvent event = triggerSlashCommand("first", userToReplyTo);
+ SlashCommandInteractionEvent event = triggerSlashCommand("first", userToReplyTo);
// THEN responds with the tags content and replies to the user
verify(event).replyEmbeds(any(MessageEmbed.class));
diff --git a/application/src/test/java/org/togetherjava/tjbot/commands/tags/TagManageCommandTest.java b/application/src/test/java/org/togetherjava/tjbot/commands/tags/TagManageCommandTest.java
index 70ba13ed88..3bec6f8ac3 100644
--- a/application/src/test/java/org/togetherjava/tjbot/commands/tags/TagManageCommandTest.java
+++ b/application/src/test/java/org/togetherjava/tjbot/commands/tags/TagManageCommandTest.java
@@ -6,7 +6,7 @@
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.entities.Role;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.requests.ErrorResponse;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.BeforeEach;
@@ -36,7 +36,7 @@ final class TagManageCommandTest {
private Member moderator;
private ModAuditLogWriter modAuditLogWriter;
- private static @NotNull MessageEmbed getResponse(@NotNull SlashCommandEvent event) {
+ private static @NotNull MessageEmbed getResponse(@NotNull SlashCommandInteractionEvent event) {
ArgumentCaptor responseCaptor = ArgumentCaptor.forClass(MessageEmbed.class);
verify(event).replyEmbeds(responseCaptor.capture());
return responseCaptor.getValue();
@@ -61,13 +61,13 @@ void setUp() {
when(moderatorRole.getName()).thenReturn(moderatorRoleName);
}
- private @NotNull SlashCommandEvent triggerRawCommand(@NotNull String tagId) {
+ private @NotNull SlashCommandInteractionEvent triggerRawCommand(@NotNull String tagId) {
return triggerRawCommandWithUser(tagId, moderator);
}
- private @NotNull SlashCommandEvent triggerRawCommandWithUser(@NotNull String tagId,
+ private @NotNull SlashCommandInteractionEvent triggerRawCommandWithUser(@NotNull String tagId,
@NotNull Member user) {
- SlashCommandEvent event = jdaTester.createSlashCommandEvent(command)
+ SlashCommandInteractionEvent event = jdaTester.createSlashCommandInteractionEvent(command)
.setSubcommand(TagManageCommand.Subcommand.RAW.getName())
.setOption(TagManageCommand.ID_OPTION, tagId)
.setUserWhoTriggered(user)
@@ -77,20 +77,20 @@ void setUp() {
return event;
}
- private @NotNull SlashCommandEvent triggerCreateCommand(@NotNull String tagId,
+ private @NotNull SlashCommandInteractionEvent triggerCreateCommand(@NotNull String tagId,
@NotNull String content) {
return triggerTagContentCommand(TagManageCommand.Subcommand.CREATE, tagId, content);
}
- private @NotNull SlashCommandEvent triggerEditCommand(@NotNull String tagId,
+ private @NotNull SlashCommandInteractionEvent triggerEditCommand(@NotNull String tagId,
@NotNull String content) {
return triggerTagContentCommand(TagManageCommand.Subcommand.EDIT, tagId, content);
}
- private @NotNull SlashCommandEvent triggerTagContentCommand(
+ private @NotNull SlashCommandInteractionEvent triggerTagContentCommand(
@NotNull TagManageCommand.Subcommand subcommand, @NotNull String tagId,
@NotNull String content) {
- SlashCommandEvent event = jdaTester.createSlashCommandEvent(command)
+ SlashCommandInteractionEvent event = jdaTester.createSlashCommandInteractionEvent(command)
.setSubcommand(subcommand.getName())
.setOption(TagManageCommand.ID_OPTION, tagId)
.setOption(TagManageCommand.CONTENT_OPTION, content)
@@ -101,22 +101,22 @@ void setUp() {
return event;
}
- private @NotNull SlashCommandEvent triggerCreateWithMessageCommand(@NotNull String tagId,
- @NotNull String messageId) {
+ private @NotNull SlashCommandInteractionEvent triggerCreateWithMessageCommand(
+ @NotNull String tagId, @NotNull String messageId) {
return triggerTagMessageCommand(TagManageCommand.Subcommand.CREATE_WITH_MESSAGE, tagId,
messageId);
}
- private @NotNull SlashCommandEvent triggerEditWithMessageCommand(@NotNull String tagId,
- @NotNull String messageId) {
+ private @NotNull SlashCommandInteractionEvent triggerEditWithMessageCommand(
+ @NotNull String tagId, @NotNull String messageId) {
return triggerTagMessageCommand(TagManageCommand.Subcommand.EDIT_WITH_MESSAGE, tagId,
messageId);
}
- private @NotNull SlashCommandEvent triggerTagMessageCommand(
+ private @NotNull SlashCommandInteractionEvent triggerTagMessageCommand(
@NotNull TagManageCommand.Subcommand subcommand, @NotNull String tagId,
@NotNull String messageId) {
- SlashCommandEvent event = jdaTester.createSlashCommandEvent(command)
+ SlashCommandInteractionEvent event = jdaTester.createSlashCommandInteractionEvent(command)
.setSubcommand(subcommand.getName())
.setOption(TagManageCommand.ID_OPTION, tagId)
.setOption(TagManageCommand.MESSAGE_ID_OPTION, messageId)
@@ -127,8 +127,8 @@ void setUp() {
return event;
}
- private @NotNull SlashCommandEvent triggerDeleteCommand(@NotNull String tagId) {
- SlashCommandEvent event = jdaTester.createSlashCommandEvent(command)
+ private @NotNull SlashCommandInteractionEvent triggerDeleteCommand(@NotNull String tagId) {
+ SlashCommandInteractionEvent event = jdaTester.createSlashCommandInteractionEvent(command)
.setSubcommand(TagManageCommand.Subcommand.DELETE.getName())
.setOption(TagManageCommand.ID_OPTION, tagId)
.setUserWhoTriggered(moderator)
@@ -156,7 +156,7 @@ void commandCanNotBeUsedWithoutRoles() {
Member regularUser = jdaTester.createMemberSpy(1);
// WHEN the regular user triggers any '/tag-manage' command
- SlashCommandEvent event = triggerRawCommandWithUser("foo", regularUser);
+ SlashCommandInteractionEvent event = triggerRawCommandWithUser("foo", regularUser);
// THEN the command can not be used since the user lacks roles
verify(event).reply("Tags can only be managed by users with a corresponding role.");
@@ -168,7 +168,7 @@ void commandCanNotBeUsedWithoutRoles() {
void rawTagCanNotFindUnknownTag() {
// GIVEN a tag system without any tags
// WHEN using '/tag-manage raw id:unknown'
- SlashCommandEvent event = triggerRawCommand("unknown");
+ SlashCommandInteractionEvent event = triggerRawCommand("unknown");
// THEN the command can not find the tag and responds accordingly
verify(event).reply(startsWith("Could not find any tag"));
@@ -197,7 +197,7 @@ void createTagThatAlreadyExistsFails() {
system.putTag("foo", "old");
// WHEN using '/tag-manage create id:foo content:new'
- SlashCommandEvent event = triggerCreateCommand("foo", "new");
+ SlashCommandInteractionEvent event = triggerCreateCommand("foo", "new");
// THEN the command fails and responds accordingly, the tag is still there and unchanged
verify(event).reply("The tag with id 'foo' already exists.");
@@ -211,7 +211,7 @@ void createTagThatAlreadyExistsFails() {
void createNewTagWorks() {
// GIVEN a tag system without any tags
// WHEN using '/tag-manage create id:foo content:bar'
- SlashCommandEvent event = triggerCreateCommand("foo", "bar");
+ SlashCommandInteractionEvent event = triggerCreateCommand("foo", "bar");
// THEN the command succeeds and the system contains the tag
assertEquals("Success", getResponse(event).getTitle());
@@ -227,7 +227,7 @@ void createNewTagWorks() {
void editUnknownTagFails() {
// GIVEN a tag system without any tags
// WHEN using '/tag-manage edit id:foo content:new'
- SlashCommandEvent event = triggerEditCommand("foo", "new");
+ SlashCommandInteractionEvent event = triggerEditCommand("foo", "new");
// THEN the command fails and responds accordingly, the tag was not created
verify(event).reply(startsWith("Could not find any tag with id"));
@@ -242,7 +242,7 @@ void editExistingTagWorks() {
system.putTag("foo", "old");
// WHEN using '/tag-manage edit id:foo content:new'
- SlashCommandEvent event = triggerEditCommand("foo", "new");
+ SlashCommandInteractionEvent event = triggerEditCommand("foo", "new");
// THEN the command succeeds and the content of the tag was changed
assertEquals("Success", getResponse(event).getTitle());
@@ -258,7 +258,7 @@ void editExistingTagWorks() {
void deleteUnknownTagFails() {
// GIVEN a tag system without any tags
// WHEN using '/tag-manage delete id:foo'
- SlashCommandEvent event = triggerDeleteCommand("foo");
+ SlashCommandInteractionEvent event = triggerDeleteCommand("foo");
// THEN the command fails and responds accordingly
verify(event).reply(startsWith("Could not find any tag with id"));
@@ -272,7 +272,7 @@ void deleteExistingTagWorks() {
system.putTag("foo", "bar");
// WHEN using '/tag-manage delete id:foo'
- SlashCommandEvent event = triggerDeleteCommand("foo");
+ SlashCommandInteractionEvent event = triggerDeleteCommand("foo");
// THEN the command succeeds and the tag was deleted
assertEquals("Success", getResponse(event).getTitle());
@@ -287,7 +287,7 @@ void deleteExistingTagWorks() {
void createWithMessageFailsForInvalidMessageId() {
// GIVEN a tag system without any tags
// WHEN using '/tag-manage create-with-message id:foo message-id:bar'
- SlashCommandEvent event = triggerCreateWithMessageCommand("foo", "bar");
+ SlashCommandInteractionEvent event = triggerCreateWithMessageCommand("foo", "bar");
// THEN the command fails and responds accordingly, the tag was not created
verify(event).reply("The given message id 'bar' is invalid, expected a number.");
@@ -303,7 +303,7 @@ void createWithMessageTagThatAlreadyExistsFails() {
postMessage("new", "1");
// WHEN using '/tag-manage create-with-message id:foo message-id:1'
- SlashCommandEvent event = triggerCreateWithMessageCommand("foo", "1");
+ SlashCommandInteractionEvent event = triggerCreateWithMessageCommand("foo", "1");
// THEN the command fails and responds accordingly, the tag is still there and unchanged
verify(event).reply("The tag with id 'foo' already exists.");
@@ -319,7 +319,7 @@ void createWithMessageNewTagWorks() {
postMessage("bar", "1");
// WHEN using '/tag-manage create-with-message id:foo message-id:1'
- SlashCommandEvent event = triggerCreateWithMessageCommand("foo", "1");
+ SlashCommandInteractionEvent event = triggerCreateWithMessageCommand("foo", "1");
// THEN the command succeeds and the system contains the tag
assertEquals("Success", getResponse(event).getTitle());
@@ -338,7 +338,7 @@ void createWithMessageUnknownMessageFails() {
jdaTester.createErrorResponseException(ErrorResponse.UNKNOWN_MESSAGE));
// WHEN using '/tag-manage create-with-message id:foo message-id:1'
- SlashCommandEvent event = triggerCreateWithMessageCommand("foo", "1");
+ SlashCommandInteractionEvent event = triggerCreateWithMessageCommand("foo", "1");
// THEN the command fails and responds accordingly, the tag was not created
verify(event).reply("The message with id '1' does not exist.");
@@ -353,7 +353,7 @@ void createWithMessageGenericErrorFails() {
failOnRetrieveMessage("1", new IOException("Generic network failure"));
// WHEN using '/tag-manage create-with-message id:foo message-id:1'
- SlashCommandEvent event = triggerCreateWithMessageCommand("foo", "1");
+ SlashCommandInteractionEvent event = triggerCreateWithMessageCommand("foo", "1");
// THEN the command fails and responds accordingly, the tag was not created
verify(event).reply(startsWith("Something unexpected went wrong"));
@@ -368,7 +368,7 @@ void editWithMessageFailsForInvalidMessageId() {
system.putTag("foo", "old");
// WHEN using '/tag-manage edit-with-message id:foo message-id:new'
- SlashCommandEvent event = triggerEditWithMessageCommand("foo", "bar");
+ SlashCommandInteractionEvent event = triggerEditWithMessageCommand("foo", "bar");
// THEN the command fails and responds accordingly, the tags content was not changed
verify(event).reply("The given message id 'bar' is invalid, expected a number.");
@@ -383,7 +383,7 @@ void editWithMessageUnknownTagFails() {
postMessage("bar", "1");
// WHEN using '/tag-manage edit-with-message id:foo message-id:new'
- SlashCommandEvent event = triggerEditWithMessageCommand("foo", "1");
+ SlashCommandInteractionEvent event = triggerEditWithMessageCommand("foo", "1");
// THEN the command fails and responds accordingly, the tag was not created
verify(event).reply(startsWith("Could not find any tag with id"));
@@ -399,7 +399,7 @@ void editWithMessageExistingTagWorks() {
postMessage("new", "1");
// WHEN using '/tag-manage edit-with-message id:foo message-id:1'
- SlashCommandEvent event = triggerEditWithMessageCommand("foo", "1");
+ SlashCommandInteractionEvent event = triggerEditWithMessageCommand("foo", "1");
// THEN the command succeeds and the content of the tag was changed
assertEquals("Success", getResponse(event).getTitle());
@@ -419,7 +419,7 @@ void editWithMessageUnknownMessageFails() {
jdaTester.createErrorResponseException(ErrorResponse.UNKNOWN_MESSAGE));
// WHEN using '/tag-manage edit-with-message id:foo message-id:1'
- SlashCommandEvent event = triggerEditWithMessageCommand("foo", "1");
+ SlashCommandInteractionEvent event = triggerEditWithMessageCommand("foo", "1");
// THEN the command fails and responds accordingly, the tag has not changed
verify(event).reply("The message with id '1' does not exist.");
@@ -436,7 +436,7 @@ void editWithMessageGenericErrorFails() {
failOnRetrieveMessage("1", new IOException("Generic network failure"));
// WHEN using '/tag-manage edit-with-message id:foo message-id:1'
- SlashCommandEvent event = triggerEditWithMessageCommand("foo", "1");
+ SlashCommandInteractionEvent event = triggerEditWithMessageCommand("foo", "1");
// THEN the command fails and responds accordingly, the tag has not changed
verify(event).reply(startsWith("Something unexpected went wrong"));
diff --git a/application/src/test/java/org/togetherjava/tjbot/commands/tags/TagSystemTest.java b/application/src/test/java/org/togetherjava/tjbot/commands/tags/TagSystemTest.java
index 440650a31b..9c441b023d 100644
--- a/application/src/test/java/org/togetherjava/tjbot/commands/tags/TagSystemTest.java
+++ b/application/src/test/java/org/togetherjava/tjbot/commands/tags/TagSystemTest.java
@@ -1,6 +1,6 @@
package org.togetherjava.tjbot.commands.tags;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.togetherjava.tjbot.db.Database;
@@ -49,7 +49,8 @@ void createDeleteButton() {
@Test
void handleIsUnknownTag() {
insertTagRaw("known", "foo");
- SlashCommandEvent event = jdaTester.createSlashCommandEvent(new TagCommand(system)).build();
+ SlashCommandInteractionEvent event =
+ jdaTester.createSlashCommandInteractionEvent(new TagCommand(system)).build();
assertFalse(system.handleIsUnknownTag("known", event));
verify(event, never()).reply(anyString());
diff --git a/application/src/test/java/org/togetherjava/tjbot/commands/tags/TagsCommandTest.java b/application/src/test/java/org/togetherjava/tjbot/commands/tags/TagsCommandTest.java
index 4773035e8b..d2481a00b3 100644
--- a/application/src/test/java/org/togetherjava/tjbot/commands/tags/TagsCommandTest.java
+++ b/application/src/test/java/org/togetherjava/tjbot/commands/tags/TagsCommandTest.java
@@ -3,8 +3,8 @@
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.MessageEmbed;
-import net.dv8tion.jda.api.events.interaction.ButtonClickEvent;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.interactions.components.ActionRow;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -28,21 +28,23 @@ final class TagsCommandTest {
private JdaTester jdaTester;
private SlashCommand command;
- private static @Nullable String getResponseDescription(@NotNull SlashCommandEvent event) {
+ private static @Nullable String getResponseDescription(
+ @NotNull SlashCommandInteractionEvent event) {
ArgumentCaptor responseCaptor = ArgumentCaptor.forClass(MessageEmbed.class);
verify(event).replyEmbeds(responseCaptor.capture());
return responseCaptor.getValue().getDescription();
}
- private @NotNull SlashCommandEvent triggerSlashCommand() {
- SlashCommandEvent event = jdaTester.createSlashCommandEvent(command).build();
+ private @NotNull SlashCommandInteractionEvent triggerSlashCommand() {
+ SlashCommandInteractionEvent event =
+ jdaTester.createSlashCommandInteractionEvent(command).build();
command.onSlashCommand(event);
return event;
}
- private @NotNull ButtonClickEvent triggerButtonClick(@NotNull Member userWhoClicked,
+ private @NotNull ButtonInteractionEvent triggerButtonClick(@NotNull Member userWhoClicked,
long idOfAuthor) {
- ButtonClickEvent event = jdaTester.createButtonClickEvent()
+ ButtonInteractionEvent event = jdaTester.createButtonInteractionEvent()
.setUserWhoClicked(userWhoClicked)
.setActionRows(ActionRow.of(TagSystem.createDeleteButton("foo")))
.buildWithSingleButton();
@@ -62,7 +64,7 @@ void setUp() {
void noResponseForEmptySystem() {
// GIVEN a tag system without any tags
// WHEN using '/tags'
- SlashCommandEvent event = triggerSlashCommand();
+ SlashCommandInteractionEvent event = triggerSlashCommand();
// THEN the response has no description
assertNull(getResponseDescription(event));
@@ -75,7 +77,7 @@ void singleElementListForOneTag() {
system.putTag("first", "foo");
// WHEN using '/tags'
- SlashCommandEvent event = triggerSlashCommand();
+ SlashCommandInteractionEvent event = triggerSlashCommand();
// THEN the response consists of the single element
assertEquals("• first", getResponseDescription(event));
@@ -90,7 +92,7 @@ void multipleElementListForMultipleTag() {
system.putTag("third", "baz");
// WHEN using '/tags'
- SlashCommandEvent event = triggerSlashCommand();
+ SlashCommandInteractionEvent event = triggerSlashCommand();
// THEN the response contains all tags
String expectedDescription = """
@@ -108,7 +110,7 @@ void authorCanDeleteList() {
Member messageAuthor = jdaTester.createMemberSpy(idOfAuthor);
// WHEN the original author clicks the delete button
- ButtonClickEvent event = triggerButtonClick(messageAuthor, idOfAuthor);
+ ButtonInteractionEvent event = triggerButtonClick(messageAuthor, idOfAuthor);
// THEN the '/tags' message is deleted
verify(event.getMessage()).delete();
@@ -123,7 +125,7 @@ void moderatorCanDeleteList() {
doReturn(true).when(moderator).hasPermission(any(Permission.class));
// WHEN the moderator clicks the delete button
- ButtonClickEvent event = triggerButtonClick(moderator, idOfAuthor);
+ ButtonInteractionEvent event = triggerButtonClick(moderator, idOfAuthor);
// THEN the '/tags' message is deleted
verify(event.getMessage()).delete();
@@ -138,7 +140,7 @@ void othersCanNotDeleteList() {
doReturn(false).when(otherUser).hasPermission(any(Permission.class));
// WHEN the other clicks the delete button
- ButtonClickEvent event = triggerButtonClick(otherUser, idOfAuthor);
+ ButtonInteractionEvent event = triggerButtonClick(otherUser, idOfAuthor);
// THEN the '/tags' message is not deleted
verify(event.getMessage(), never()).delete();
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 dbb4178e27..6b9192566b 100644
--- a/application/src/test/java/org/togetherjava/tjbot/jda/ButtonClickEventBuilder.java
+++ b/application/src/test/java/org/togetherjava/tjbot/jda/ButtonClickEventBuilder.java
@@ -6,9 +6,9 @@
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.ButtonClickEvent;
+import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.interactions.components.ActionRow;
-import net.dv8tion.jda.api.interactions.components.Button;
+import net.dv8tion.jda.api.interactions.components.buttons.Button;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.togetherjava.tjbot.commands.SlashCommand;
@@ -23,9 +23,9 @@
/**
* Builder to create button click events that can be used for example with
- * {@link SlashCommand#onButtonClick(ButtonClickEvent, List)}.
+ * {@link SlashCommand#onButtonClick(ButtonInteractionEvent, List)}.
*
- * Create instances of this class by using {@link JdaTester#createButtonClickEvent()}.
+ * Create instances of this class by using {@link JdaTester#createButtonInteractionEvent()}.
*
* Among other Discord related things, the builder optionally accepts a message
* ({@link #setMessage(Message)}) and the user who clicked on the button
@@ -69,12 +69,12 @@
*/
public final class ButtonClickEventBuilder {
private static final ObjectMapper JSON = new ObjectMapper();
- private final @NotNull Supplier extends ButtonClickEvent> mockEventSupplier;
+ private final @NotNull Supplier extends ButtonInteractionEvent> mockEventSupplier;
private final UnaryOperator mockMessageOperator;
private MessageBuilder messageBuilder;
private Member userWhoClicked;
- ButtonClickEventBuilder(@NotNull Supplier extends ButtonClickEvent> mockEventSupplier,
+ ButtonClickEventBuilder(@NotNull Supplier extends ButtonInteractionEvent> mockEventSupplier,
@NotNull UnaryOperator mockMessageOperator) {
this.mockEventSupplier = mockEventSupplier;
this.mockMessageOperator = mockMessageOperator;
@@ -158,7 +158,7 @@ public ButtonClickEventBuilder setUserWhoClicked(@NotNull Member userWhoClicked)
*
* @return the created slash command instance
*/
- public @NotNull ButtonClickEvent buildWithSingleButton() {
+ public @NotNull ButtonInteractionEvent buildWithSingleButton() {
return createEvent(null);
}
@@ -173,11 +173,11 @@ public ButtonClickEventBuilder setUserWhoClicked(@NotNull Member userWhoClicked)
* contained in the message.
* @return the created slash command instance
*/
- public @NotNull ButtonClickEvent build(@NotNull Button clickedButton) {
+ public @NotNull ButtonInteractionEvent build(@NotNull Button clickedButton) {
return createEvent(clickedButton);
}
- private @NotNull ButtonClickEvent createEvent(@Nullable Button maybeClickedButton) {
+ private @NotNull ButtonInteractionEvent createEvent(@Nullable Button maybeClickedButton) {
Message message = mockMessageOperator.apply(messageBuilder.build());
Button clickedButton = determineClickedButton(maybeClickedButton, message);
@@ -226,9 +226,9 @@ public ButtonClickEventBuilder setUserWhoClicked(@NotNull Member userWhoClicked)
return message.getActionRows().stream().map(ActionRow::getButtons).flatMap(List::stream);
}
- private @NotNull ButtonClickEvent mockButtonClickEvent(@NotNull Message message,
+ private @NotNull ButtonInteractionEvent mockButtonClickEvent(@NotNull Message message,
@NotNull Button clickedButton) {
- ButtonClickEvent event = mockEventSupplier.get();
+ ButtonInteractionEvent event = mockEventSupplier.get();
when(event.getMessage()).thenReturn(message);
when(event.getButton()).thenReturn(clickedButton);
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 a9d9500e73..4c96a216ae 100644
--- a/application/src/test/java/org/togetherjava/tjbot/jda/JdaTester.java
+++ b/application/src/test/java/org/togetherjava/tjbot/jda/JdaTester.java
@@ -3,15 +3,15 @@
import net.dv8tion.jda.api.AccountType;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.*;
-import net.dv8tion.jda.api.events.interaction.ButtonClickEvent;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.exceptions.ErrorResponseException;
-import net.dv8tion.jda.api.interactions.Interaction;
-import net.dv8tion.jda.api.interactions.components.Component;
+import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
+import net.dv8tion.jda.api.interactions.components.ItemComponent;
import net.dv8tion.jda.api.requests.ErrorResponse;
import net.dv8tion.jda.api.requests.Response;
import net.dv8tion.jda.api.requests.RestAction;
-import net.dv8tion.jda.api.requests.restaction.interactions.ReplyAction;
+import net.dv8tion.jda.api.requests.restaction.interactions.ReplyCallbackAction;
import net.dv8tion.jda.api.utils.AttachmentOption;
import net.dv8tion.jda.api.utils.ConcurrentSessionController;
import net.dv8tion.jda.api.utils.cache.CacheFlag;
@@ -20,7 +20,7 @@
import net.dv8tion.jda.internal.requests.Requester;
import net.dv8tion.jda.internal.requests.restaction.AuditableRestActionImpl;
import net.dv8tion.jda.internal.requests.restaction.MessageActionImpl;
-import net.dv8tion.jda.internal.requests.restaction.interactions.ReplyActionImpl;
+import net.dv8tion.jda.internal.requests.restaction.interactions.ReplyCallbackActionImpl;
import net.dv8tion.jda.internal.utils.config.AuthorizationConfig;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -46,8 +46,8 @@
* Utility class for testing {@link SlashCommand}s.
*
* Mocks JDA and can create events that can be used to test {@link SlashCommand}s, e.g.
- * {@link #createSlashCommandEvent(SlashCommand)}. The created events are Mockito mocks, which can
- * be exploited for testing.
+ * {@link #createSlashCommandInteractionEvent(SlashCommand)}. The created events are Mockito mocks,
+ * which can be exploited for testing.
*
* An example test using this class might look like:
*
@@ -57,7 +57,8 @@
* SlashCommand command = new PingCommand();
* JdaTester jdaTester = new JdaTester();
*
- * SlashCommandEvent event = jdaTester.createSlashCommandEvent(command).build();
+ * SlashCommandInteractionEvent event =
+ * jdaTester.createSlashCommandInteractionEvent(command).build();
* command.onSlashCommand(event);
*
* verify(event).reply("Pong!");
@@ -79,7 +80,7 @@ public final class JdaTester {
private final JDAImpl jda;
private final MemberImpl member;
private final GuildImpl guild;
- private final ReplyActionImpl replyAction;
+ private final ReplyCallbackActionImpl replyAction;
private final AuditableRestActionImpl auditableRestAction;
private final MessageActionImpl messageAction;
private final TextChannelImpl textChannel;
@@ -105,7 +106,7 @@ public JdaTester() {
Member selfMember = spy(new MemberImpl(guild, selfUser));
member = spy(new MemberImpl(guild, user));
textChannel = spy(new TextChannelImpl(TEXT_CHANNEL_ID, guild));
- privateChannel = spy(new PrivateChannelImpl(PRIVATE_CHANNEL_ID, user));
+ privateChannel = spy(new PrivateChannelImpl(jda, PRIVATE_CHANNEL_ID, user));
messageAction = mock(MessageActionImpl.class);
EntityBuilder entityBuilder = mock(EntityBuilder.class);
Role everyoneRole = new RoleImpl(GUILD_ID, guild);
@@ -134,10 +135,11 @@ public JdaTester() {
doReturn(messageAction).when(privateChannel).sendMessage(anyString());
- replyAction = mock(ReplyActionImpl.class);
+ replyAction = mock(ReplyCallbackActionImpl.class);
when(replyAction.setEphemeral(anyBoolean())).thenReturn(replyAction);
when(replyAction.addActionRow(anyCollection())).thenReturn(replyAction);
- when(replyAction.addActionRow(ArgumentMatchers.any())).thenReturn(replyAction);
+ when(replyAction.addActionRow(ArgumentMatchers.any()))
+ .thenReturn(replyAction);
when(replyAction.setContent(anyString())).thenReturn(replyAction);
when(replyAction.addFile(any(byte[].class), any(String.class), any(AttachmentOption.class)))
.thenReturn(replyAction);
@@ -157,7 +159,7 @@ public JdaTester() {
/**
* Creates a Mockito mocked slash command event, which can be used for
- * {@link SlashCommand#onSlashCommand(SlashCommandEvent)}.
+ * {@link SlashCommand#onSlashCommand(SlashCommandInteractionEvent)}.
*
* The method creates a builder that can be used to further adjust the event before creation,
* e.g. provide options.
@@ -165,15 +167,15 @@ public JdaTester() {
* @param command the command to create an event for
* @return a builder used to create a Mockito mocked slash command event
*/
- public @NotNull SlashCommandEventBuilder createSlashCommandEvent(
+ public @NotNull SlashCommandInteractionEventBuilder createSlashCommandInteractionEvent(
@NotNull SlashCommand command) {
- UnaryOperator mockOperator = event -> {
- SlashCommandEvent slashCommandEvent = spy(event);
- mockInteraction(slashCommandEvent);
- return slashCommandEvent;
+ UnaryOperator mockOperator = event -> {
+ SlashCommandInteractionEvent SlashCommandInteractionEvent = spy(event);
+ mockInteraction(SlashCommandInteractionEvent);
+ return SlashCommandInteractionEvent;
};
- return new SlashCommandEventBuilder(jda, mockOperator).setCommand(command)
+ return new SlashCommandInteractionEventBuilder(jda, mockOperator).setCommand(command)
.setToken(TEST_TOKEN)
.setChannelId(String.valueOf(TEXT_CHANNEL_ID))
.setApplicationId(String.valueOf(APPLICATION_ID))
@@ -184,16 +186,16 @@ public JdaTester() {
/**
* Creates a Mockito mocked button click event, which can be used for
- * {@link SlashCommand#onButtonClick(ButtonClickEvent, List)}.
+ * {@link SlashCommand#onButtonClick(ButtonInteractionEvent, List)}.
*
* The method creates a builder that can be used to further adjust the event before creation,
* e.g. provide options.
*
* @return a builder used to create a Mockito mocked slash command event
*/
- public @NotNull ButtonClickEventBuilder createButtonClickEvent() {
- Supplier mockEventSupplier = () -> {
- ButtonClickEvent event = mock(ButtonClickEvent.class);
+ public @NotNull ButtonClickEventBuilder createButtonInteractionEvent() {
+ Supplier mockEventSupplier = () -> {
+ ButtonInteractionEvent event = mock(ButtonInteractionEvent.class);
mockButtonClickEvent(event);
return event;
};
@@ -240,12 +242,12 @@ public JdaTester() {
* Gets the Mockito mock used as universal reply action by all mocks created by this tester
* instance.
*
- * For example the events created by {@link #createSlashCommandEvent(SlashCommand)} will return
- * this mock on several of their methods.
+ * For example the events created by {@link #createSlashCommandInteractionEvent(SlashCommand)}
+ * will return this mock on several of their methods.
*
* @return the reply action mock used by this tester
*/
- public @NotNull ReplyAction getReplyActionMock() {
+ public @NotNull ReplyCallbackAction getReplyActionMock() {
return replyAction;
}
@@ -253,8 +255,8 @@ public JdaTester() {
* Gets the text channel spy used as universal text channel by all mocks created by this tester
* instance.
*
- * For example the events created by {@link #createSlashCommandEvent(SlashCommand)} will return
- * this spy on several of their methods.
+ * For example the events created by {@link #createSlashCommandInteractionEvent(SlashCommand)}
+ * will return this spy on several of their methods.
*
* @return the text channel spy used by this tester
*/
@@ -267,7 +269,7 @@ public JdaTester() {
*
* Such an action is useful for testing things involving calls like
* {@link TextChannel#retrieveMessageById(long)} or similar, example:
- *
+ *
*
* {
* @code
@@ -279,7 +281,7 @@ public JdaTester() {
* doReturn(action).when(jdaTester.getTextChannelSpy()).retrieveMessageById("1");
* }
*
- *
+ *
* @param t the object to consume on success
* @param the type of the object to consume
* @return the mocked action
@@ -307,7 +309,7 @@ public JdaTester() {
*
* Such an action is useful for testing things involving calls like
* {@link TextChannel#retrieveMessageById(long)} or similar, example:
- *
+ *
*
* {
* @code
@@ -319,7 +321,7 @@ public JdaTester() {
* doReturn(action).when(jdaTester.getTextChannelSpy()).retrieveMessageById("1");
* }
*
- *
+ *
* @param failureReason the reason to consume on failure
* @param the type of the object the action would contain if it would succeed
* @return the mocked action
@@ -347,7 +349,7 @@ public JdaTester() {
*
* The exception merely wraps around the given reason and has no valid error code or message
* set.
- *
+ *
* @param reason the reason of the error
* @return the created exception
*/
@@ -356,7 +358,7 @@ public JdaTester() {
return ErrorResponseException.create(reason, new Response(null, -1, "", -1, Set.of()));
}
- private void mockInteraction(@NotNull Interaction interaction) {
+ private void mockInteraction(@NotNull IReplyCallback interaction) {
doReturn(replyAction).when(interaction).reply(anyString());
doReturn(replyAction).when(interaction).replyEmbeds(ArgumentMatchers.any());
doReturn(replyAction).when(interaction).replyEmbeds(anyCollection());
@@ -371,7 +373,7 @@ private void mockInteraction(@NotNull Interaction interaction) {
doReturn(privateChannel).when(interaction).getPrivateChannel();
}
- private void mockButtonClickEvent(@NotNull ButtonClickEvent event) {
+ private void mockButtonClickEvent(@NotNull ButtonInteractionEvent event) {
mockInteraction(event);
doReturn(replyAction).when(event).editButton(any());
diff --git a/application/src/test/java/org/togetherjava/tjbot/jda/SlashCommandEventBuilder.java b/application/src/test/java/org/togetherjava/tjbot/jda/SlashCommandInteractionEventBuilder.java
similarity index 85%
rename from application/src/test/java/org/togetherjava/tjbot/jda/SlashCommandEventBuilder.java
rename to application/src/test/java/org/togetherjava/tjbot/jda/SlashCommandInteractionEventBuilder.java
index af1f4a34a1..ec414445dd 100644
--- a/application/src/test/java/org/togetherjava/tjbot/jda/SlashCommandEventBuilder.java
+++ b/application/src/test/java/org/togetherjava/tjbot/jda/SlashCommandInteractionEventBuilder.java
@@ -2,15 +2,15 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.User;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
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.utils.data.DataObject;
import net.dv8tion.jda.internal.JDAImpl;
-import net.dv8tion.jda.internal.interactions.CommandInteractionImpl;
+import net.dv8tion.jda.internal.interactions.command.SlashCommandInteractionImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.togetherjava.tjbot.commands.SlashCommand;
@@ -30,9 +30,10 @@
/**
* Builder to create slash command events that can be used for example with
- * {@link SlashCommand#onSlashCommand(SlashCommandEvent)}.
+ * {@link SlashCommand#onSlashCommand(SlashCommandInteractionEvent)}.
*
- * Create instances of this class by using {@link JdaTester#createSlashCommandEvent(SlashCommand)}.
+ * Create instances of this class by using
+ * {@link JdaTester#createSlashCommandInteractionEvent(SlashCommand)}.
*
* Among other Discord related things, the builder optionally accepts a subcommand
* ({@link #setSubcommand(String)}) and options ({@link #setOption(String, String)}). An already set
@@ -44,16 +45,16 @@
*
* {@code
* // /ping
- * jdaTester.createSlashCommandEvent(command).build();
+ * jdaTester.createSlashCommandInteractionEvent(command).build();
*
* // /days start:10.01.2021 end:13.01.2021
- * jdaTester.createSlashCommandEvent(command)
+ * jdaTester.createSlashCommandInteractionEvent(command)
* .setOption("start", "10.01.2021")
* .setOption("end", "13.01.2021")
* .build();
*
* // /db put key:foo value:bar
- * jdaTester.createSlashCommandEvent(command)
+ * jdaTester.createSlashCommandInteractionEvent(command)
* .setSubcommand("put")
* .setOption("key", "foo")
* .setOption("value", "bar")
@@ -62,10 +63,10 @@
*
*/
@SuppressWarnings("ClassWithTooManyFields")
-public final class SlashCommandEventBuilder {
+public final class SlashCommandInteractionEventBuilder {
private static final ObjectMapper JSON = new ObjectMapper();
private final JDAImpl jda;
- private final UnaryOperator mockOperator;
+ private final UnaryOperator mockOperator;
private String token;
private String channelId;
private String applicationId;
@@ -76,7 +77,8 @@ public final class SlashCommandEventBuilder {
private String subcommand;
private Member userWhoTriggered;
- SlashCommandEventBuilder(@NotNull JDAImpl jda, UnaryOperator mockOperator) {
+ SlashCommandInteractionEventBuilder(@NotNull JDAImpl jda,
+ UnaryOperator mockOperator) {
this.jda = jda;
this.mockOperator = mockOperator;
}
@@ -95,7 +97,7 @@ public final class SlashCommandEventBuilder {
* @throws IllegalArgumentException if the option does not exist in the corresponding command,
* as specified by its {@link SlashCommand#getData()}
*/
- public @NotNull SlashCommandEventBuilder setOption(@NotNull String name,
+ public @NotNull SlashCommandInteractionEventBuilder setOption(@NotNull String name,
@NotNull String value) {
putOptionRaw(name, value, OptionType.STRING);
return this;
@@ -115,7 +117,8 @@ public final class SlashCommandEventBuilder {
* @throws IllegalArgumentException if the option does not exist in the corresponding command,
* as specified by its {@link SlashCommand#getData()}
*/
- public @NotNull SlashCommandEventBuilder setOption(@NotNull String name, @NotNull User value) {
+ public @NotNull SlashCommandInteractionEventBuilder setOption(@NotNull String name,
+ @NotNull User value) {
putOptionRaw(name, value, OptionType.USER);
return this;
}
@@ -134,7 +137,7 @@ public final class SlashCommandEventBuilder {
* @throws IllegalArgumentException if the option does not exist in the corresponding command,
* as specified by its {@link SlashCommand#getData()}
*/
- public @NotNull SlashCommandEventBuilder setOption(@NotNull String name,
+ public @NotNull SlashCommandInteractionEventBuilder setOption(@NotNull String name,
@NotNull Member value) {
putOptionRaw(name, value, OptionType.USER);
return this;
@@ -145,7 +148,7 @@ public final class SlashCommandEventBuilder {
*
* @return this builder instance for chaining
*/
- public @NotNull SlashCommandEventBuilder clearOptions() {
+ public @NotNull SlashCommandInteractionEventBuilder clearOptions() {
nameToOption.clear();
return this;
}
@@ -161,7 +164,7 @@ public final class SlashCommandEventBuilder {
* @throws IllegalArgumentException if the subcommand does not exist in the corresponding
* command, as specified by its {@link SlashCommand#getData()}
*/
- public @NotNull SlashCommandEventBuilder setSubcommand(@Nullable String subcommand) {
+ public @NotNull SlashCommandInteractionEventBuilder setSubcommand(@Nullable String subcommand) {
if (subcommand != null) {
requireSubcommand(subcommand);
}
@@ -177,43 +180,44 @@ public final class SlashCommandEventBuilder {
* @return this builder instance for chaining
*/
@NotNull
- public SlashCommandEventBuilder setUserWhoTriggered(@NotNull Member userWhoTriggered) {
+ public SlashCommandInteractionEventBuilder setUserWhoTriggered(
+ @NotNull Member userWhoTriggered) {
this.userWhoTriggered = userWhoTriggered;
return this;
}
@NotNull
- SlashCommandEventBuilder setCommand(@NotNull SlashCommand command) {
+ SlashCommandInteractionEventBuilder setCommand(@NotNull SlashCommand command) {
this.command = command;
return this;
}
@NotNull
- SlashCommandEventBuilder setChannelId(@NotNull String channelId) {
+ SlashCommandInteractionEventBuilder setChannelId(@NotNull String channelId) {
this.channelId = channelId;
return this;
}
@NotNull
- SlashCommandEventBuilder setToken(@NotNull String token) {
+ SlashCommandInteractionEventBuilder setToken(@NotNull String token) {
this.token = token;
return this;
}
@NotNull
- SlashCommandEventBuilder setApplicationId(@NotNull String applicationId) {
+ SlashCommandInteractionEventBuilder setApplicationId(@NotNull String applicationId) {
this.applicationId = applicationId;
return this;
}
@NotNull
- SlashCommandEventBuilder setGuildId(@NotNull String guildId) {
+ SlashCommandInteractionEventBuilder setGuildId(@NotNull String guildId) {
this.guildId = guildId;
return this;
}
@NotNull
- SlashCommandEventBuilder setUserId(@NotNull String userId) {
+ SlashCommandInteractionEventBuilder setUserId(@NotNull String userId) {
this.userId = userId;
return this;
}
@@ -224,7 +228,7 @@ SlashCommandEventBuilder setUserId(@NotNull String userId) {
*
* @return the created slash command instance
*/
- public @NotNull SlashCommandEvent build() {
+ public @NotNull SlashCommandInteractionEvent build() {
PayloadSlashCommand event = createEvent();
String json;
@@ -237,9 +241,9 @@ SlashCommandEventBuilder setUserId(@NotNull String userId) {
return spySlashCommandEvent(json);
}
- private SlashCommandEvent spySlashCommandEvent(String jsonData) {
- SlashCommandEvent event = spy(new SlashCommandEvent(jda, 0,
- new CommandInteractionImpl(jda, DataObject.fromJson(jsonData))));
+ private SlashCommandInteractionEvent spySlashCommandEvent(String jsonData) {
+ SlashCommandInteractionEvent event = spy(new SlashCommandInteractionEvent(jda, 0,
+ new SlashCommandInteractionImpl(jda, DataObject.fromJson(jsonData))));
event = mockOperator.apply(event);
when(event.getMember()).thenReturn(userWhoTriggered);