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 7383bebb8d..f821d18c31 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..d41d8d7b3f 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,7 +107,7 @@ 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
+ * {@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.
*
@@ -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,9 @@ 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,14 +170,14 @@ 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
+ * 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..cd2c2f4770 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,11 +17,11 @@
/**
* 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
+ * 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
+ * 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.
*
*
@@ -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,19 @@ 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 +140,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 c7931e86ef..2939b662dd 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,17 +4,18 @@
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.commands.build.SubcommandData;
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;
@@ -89,7 +90,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")
@@ -105,8 +106,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()));
boolean isEphemeral = false;
if (CHOOSE_OPTION.equals(event.getSubcommandName())) {
@@ -139,13 +140,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");
@@ -188,7 +189,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");
@@ -211,13 +212,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());
@@ -261,8 +262,8 @@ 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()))
+ SelectMenu.Builder menu =
+ SelectMenu.create(generateComponentId(event.getUser().getId()))
.setPlaceholder("Select your roles")
.setMaxValues(selectedRoles.size())
.setMinValues(0);
@@ -297,7 +298,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/VcActivityCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/basic/VcActivityCommand.java
index 6c575e43af..18bb428fa3 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,8 @@ 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 +202,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..5c6ae80486 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,13 +1,12 @@
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
+ * {@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
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..ad68b84c53 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,7 +11,7 @@
* 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
+ * 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
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..7830dd3a24 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,7 +12,7 @@
* 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
+ * 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
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..2378600f4f 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,7 +26,7 @@
/**
* 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
+ * {@link org.togetherjava.tjbot.commands.SlashCommand#onSlashCommand(SlashCommandInteractionEvent)} for
* details.
*
* Use {@link #putOrThrow(UUID, ComponentId, Lifespan)} to put and persist a component ID; and
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 ee289c0402..5e5cb5e5cf 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;
@@ -124,7 +124,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)) {
@@ -154,7 +154,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.",
@@ -240,7 +240,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(
@@ -289,26 +289,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..5274a41b68 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,7 @@ 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 +64,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 a9391a5871..c4bf8cfb6c 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,9 @@
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.events.interaction.command.SlashCommandInteractionEvent;
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.requests.RestAction;
@@ -110,7 +111,7 @@ public AuditCommand(@NotNull ModerationActionsStore actionsStore) {
}
@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();
@@ -128,7 +129,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)) {
@@ -138,7 +139,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 f11d15772c..0586518516 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,11 @@
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;
@@ -76,7 +77,7 @@ public BanCommand(@NotNull ModerationActionsStore actionsStore) {
}
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);
@@ -120,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) {
@@ -145,7 +146,7 @@ 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))
@@ -174,7 +175,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)) {
@@ -195,7 +196,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 8c9fcf5dfe..62b5bef951 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,14 @@
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.events.interaction.command.SlashCommandInteractionEvent;
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.RestAction;
import net.dv8tion.jda.api.requests.restaction.AuditableRestAction;
@@ -54,14 +58,14 @@ public KickCommand(@NotNull ModerationActionsStore actionsStore) {
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 fcb916be95..47447069f9 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
@@ -4,6 +4,7 @@
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;
@@ -56,7 +57,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;
}
@@ -84,7 +85,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
@@ -119,7 +120,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."
@@ -155,7 +156,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."
@@ -170,7 +171,7 @@ 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))
@@ -212,7 +213,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"
@@ -260,7 +261,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."
@@ -287,7 +288,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 f10606c8a4..354f635f88 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,9 @@
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.interactions.Interaction;
+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;
@@ -66,7 +67,7 @@ public MuteCommand(@NotNull ModerationActionsStore actionsStore) {
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();
}
@@ -123,7 +124,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(banResult -> hasSentDm))
@@ -135,7 +136,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).orElse(null), ACTION_VERB, target, bot, author,
guild, hasRequiredRole, reason, event)) {
@@ -153,7 +154,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/UnbanCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/UnbanCommand.java
index 516ee88183..2ecb591336 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,10 @@
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;
@@ -50,7 +51,7 @@ public UnbanCommand(@NotNull ModerationActionsStore actionsStore) {
}
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);
@@ -66,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) {
@@ -90,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;
}
@@ -107,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 fcd0f66a31..8328170632 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,9 @@
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.interactions.Interaction;
+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,7 +55,7 @@ public UnmuteCommand(@NotNull ModerationActionsStore actionsStore) {
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();
}
@@ -96,7 +97,7 @@ 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(banResult -> hasSentDm))
@@ -108,7 +109,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).orElse(null), ACTION_VERB, target, bot, author,
guild, hasRequiredRole, reason, event)) {
@@ -126,7 +127,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/WarnCommand.java b/application/src/main/java/org/togetherjava/tjbot/commands/moderation/WarnCommand.java
index 2b2c8265c2..87c2099b54 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;
@@ -53,7 +53,7 @@ public WarnCommand(@NotNull ModerationActionsStore actionsStore) {
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;
@@ -63,7 +63,7 @@ public WarnCommand(@NotNull ModerationActionsStore actionsStore) {
}
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(
@@ -98,7 +98,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");
@@ -116,7 +116,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/system/BotCore.java b/application/src/main/java/org/togetherjava/tjbot/commands/system/BotCore.java
index ce68ecde5f..09a728f67f 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;
@@ -152,19 +152,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()
@@ -175,21 +179,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
@@ -279,7 +283,7 @@ private static 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 ac15f24a51..73ba5a16da 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 e257db4c53..1ebd8d900e 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
@@ -3,9 +3,9 @@
import net.dv8tion.jda.api.EmbedBuilder;
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.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;
@@ -89,8 +89,8 @@ public TagManageCommand(TagSystem tagSystem) {
.addOption(OptionType.STRING, ID_OPTION, ID_DESCRIPTION, true));
}
- private static void sendSuccessMessage(@NotNull Interaction event, @NotNull String id,
- @NotNull String actionVerb) {
+ 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);
event
@@ -114,7 +114,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) {
@@ -128,7 +128,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)
@@ -148,7 +148,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;
@@ -269,7 +269,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 761faaebe1..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,14 +2,15 @@
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;
import org.togetherjava.tjbot.commands.SlashCommandAdapter;
import org.togetherjava.tjbot.commands.SlashCommandVisibility;
+
import java.time.Instant;
-import org.slf4j.Logger;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
@@ -48,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
@@ -72,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 876ce3dcb2..789c9cb03a 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,10 @@
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.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.Interaction;
+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 +67,7 @@ public TopHelpersCommand(@NotNull Database database) {
}
@Override
- public void onSlashCommand(@NotNull SlashCommandEvent event) {
+ public void onSlashCommand(@NotNull SlashCommandInteractionEvent event) {
if (!handleHasAuthorRole(event.getMember(), event)) {
return;
}
@@ -91,7 +93,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 +127,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 fadb5b50ff..ff7ce406e8 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;
@@ -28,7 +28,7 @@ public TopHelpersMessageListener(@NotNull Database database) {
}
@Override
- public void onMessageReceived(@NotNull GuildMessageReceivedEvent event) {
+ public void onMessageReceived(@NotNull MessageReceivedEvent event) {
if (event.getAuthor().isBot() || event.isWebhookMessage()) {
return;
}
@@ -36,7 +36,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/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 457b7e3bec..cbe926353a 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.junit.jupiter.api.Test;
import org.togetherjava.tjbot.commands.SlashCommand;
import org.togetherjava.tjbot.jda.JdaTester;
@@ -14,7 +14,7 @@ void pingCommand() {
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, times(1)).reply("Pong!");
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 5c6ed68067..ccdbe2591a 100644
--- a/application/src/test/java/org/togetherjava/tjbot/jda/JdaTester.java
+++ b/application/src/test/java/org/togetherjava/tjbot/jda/JdaTester.java
@@ -2,7 +2,7 @@
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.SelfUser;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.requests.restaction.MessageAction;
import net.dv8tion.jda.api.utils.ConcurrentSessionController;
import net.dv8tion.jda.api.utils.cache.CacheFlag;
@@ -10,7 +10,7 @@
import net.dv8tion.jda.internal.entities.*;
import net.dv8tion.jda.internal.requests.Requester;
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.mockito.ArgumentMatchers;
@@ -27,7 +27,7 @@
* 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
+ * {@link #createSlashCommandInteractionEvent(SlashCommand)}. The created events are Mockito mocks, which can
* be exploited for testing.
*
* An example test using this class might look like:
@@ -38,7 +38,7 @@
* 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, times(1)).reply("Pong!");
@@ -77,7 +77,7 @@ public JdaTester() {
GuildImpl guild = spy(new GuildImpl(jda, GUILD_ID));
member = spy(new MemberImpl(guild, user));
TextChannelImpl textChannel = spy(new TextChannelImpl(TEXT_CHANNEL_ID, guild));
- PrivateChannelImpl privateChannel = spy(new PrivateChannelImpl(PRIVATE_CHANNEL_ID, user));
+ PrivateChannelImpl privateChannel = spy(new PrivateChannelImpl(jda, PRIVATE_CHANNEL_ID, user));
MessageAction messageAction = mock(MessageActionImpl.class);
EntityBuilder entityBuilder = mock(EntityBuilder.class);
@@ -105,7 +105,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.
@@ -113,20 +113,20 @@ 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);
- ReplyActionImpl replyAction = mock(ReplyActionImpl.class);
+ UnaryOperator mockOperator = event -> {
+ SlashCommandInteractionEvent SlashCommandInteractionEvent = spy(event);
+ ReplyCallbackActionImpl replyAction = mock(ReplyCallbackActionImpl.class);
- doReturn(replyAction).when(slashCommandEvent).reply(anyString());
+ doReturn(replyAction).when(SlashCommandInteractionEvent).reply(anyString());
when(replyAction.setEphemeral(anyBoolean())).thenReturn(replyAction);
- doReturn(member).when(slashCommandEvent).getMember();
+ doReturn(member).when(SlashCommandInteractionEvent).getMember();
- return slashCommandEvent;
+ return SlashCommandInteractionEvent;
};
- return new SlashCommandEventBuilder(jda, mockOperator).command(command)
+ return new SlashCommandInteractionEventBuilder(jda, mockOperator).command(command)
.token(TEST_TOKEN)
.channelId(String.valueOf(TEXT_CHANNEL_ID))
.applicationId(String.valueOf(APPLICATION_ID))
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 82%
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 6cca185720..ceb3c0f0a1 100644
--- a/application/src/test/java/org/togetherjava/tjbot/jda/SlashCommandEventBuilder.java
+++ b/application/src/test/java/org/togetherjava/tjbot/jda/SlashCommandInteractionEventBuilder.java
@@ -2,13 +2,13 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
-import net.dv8tion.jda.api.events.interaction.SlashCommandEvent;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
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;
@@ -21,9 +21,9 @@
/**
* 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 #subcommand(String)}) and options ({@link #option(String, String)}). An already set
@@ -35,16 +35,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)
* .option("start", "10.01.2021")
* .option("end", "13.01.2021")
* .build();
*
* // /db put key:foo value:bar
- * jdaTester.createSlashCommandEvent(command)
+ * jdaTester.createSlashCommandInteractionEvent(command)
* .subcommand("put")
* .option("key", "foo")
* .option("value", "bar")
@@ -53,10 +53,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;
@@ -66,7 +66,7 @@ public final class SlashCommandEventBuilder {
private final Map nameToOption = new HashMap<>();
private String subcommand;
- SlashCommandEventBuilder(@NotNull JDAImpl jda, UnaryOperator mockOperator) {
+ SlashCommandInteractionEventBuilder(@NotNull JDAImpl jda, UnaryOperator mockOperator) {
this.jda = jda;
this.mockOperator = mockOperator;
}
@@ -85,7 +85,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 option(@NotNull String name, @NotNull String value) {
+ public @NotNull SlashCommandInteractionEventBuilder option(@NotNull String name, @NotNull String value) {
// TODO Also add overloads for other types
requireOption(name, OptionType.STRING);
nameToOption.put(name, new Option(name, value, OptionType.STRING));
@@ -97,7 +97,7 @@ public final class SlashCommandEventBuilder {
*
* @return this builder instance for chaining
*/
- public @NotNull SlashCommandEventBuilder clearOptions() {
+ public @NotNull SlashCommandInteractionEventBuilder clearOptions() {
nameToOption.clear();
return this;
}
@@ -113,7 +113,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 subcommand(@Nullable String subcommand) {
+ public @NotNull SlashCommandInteractionEventBuilder subcommand(@Nullable String subcommand) {
if (subcommand != null) {
requireSubcommand(subcommand);
}
@@ -123,37 +123,37 @@ public final class SlashCommandEventBuilder {
}
@NotNull
- SlashCommandEventBuilder command(@NotNull SlashCommand command) {
+ SlashCommandInteractionEventBuilder command(@NotNull SlashCommand command) {
this.command = command;
return this;
}
@NotNull
- SlashCommandEventBuilder channelId(@NotNull String channelId) {
+ SlashCommandInteractionEventBuilder channelId(@NotNull String channelId) {
this.channelId = channelId;
return this;
}
@NotNull
- SlashCommandEventBuilder token(@NotNull String token) {
+ SlashCommandInteractionEventBuilder token(@NotNull String token) {
this.token = token;
return this;
}
@NotNull
- SlashCommandEventBuilder applicationId(@NotNull String applicationId) {
+ SlashCommandInteractionEventBuilder applicationId(@NotNull String applicationId) {
this.applicationId = applicationId;
return this;
}
@NotNull
- SlashCommandEventBuilder guildId(@NotNull String guildId) {
+ SlashCommandInteractionEventBuilder guildId(@NotNull String guildId) {
this.guildId = guildId;
return this;
}
@NotNull
- SlashCommandEventBuilder userId(@NotNull String userId) {
+ SlashCommandInteractionEventBuilder userId(@NotNull String userId) {
this.userId = userId;
return this;
}
@@ -164,7 +164,7 @@ SlashCommandEventBuilder userId(@NotNull String userId) {
*
* @return the created slash command instance
*/
- public @NotNull SlashCommandEvent build() {
+ public @NotNull SlashCommandInteractionEvent build() {
PayloadSlashCommand event = createEvent();
String json;
@@ -174,8 +174,8 @@ SlashCommandEventBuilder userId(@NotNull String userId) {
throw new IllegalStateException(e);
}
- return mockOperator.apply(new SlashCommandEvent(jda, 0,
- new CommandInteractionImpl(jda, DataObject.fromJson(json))));
+ return mockOperator.apply(new SlashCommandInteractionEvent(jda, 0,
+ new SlashCommandInteractionImpl(jda, DataObject.fromJson(json))));
}
private @NotNull PayloadSlashCommand createEvent() {