diff --git a/application/src/main/java/org/togetherjava/tjbot/features/help/HelpThreadCreatedListener.java b/application/src/main/java/org/togetherjava/tjbot/features/help/HelpThreadCreatedListener.java index cd453eab63..bbf8490a2c 100644 --- a/application/src/main/java/org/togetherjava/tjbot/features/help/HelpThreadCreatedListener.java +++ b/application/src/main/java/org/togetherjava/tjbot/features/help/HelpThreadCreatedListener.java @@ -12,8 +12,12 @@ import net.dv8tion.jda.api.entities.channel.forums.ForumTag; import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import net.dv8tion.jda.api.exceptions.ErrorResponseException; import net.dv8tion.jda.api.hooks.ListenerAdapter; +import net.dv8tion.jda.api.requests.ErrorResponse; import net.dv8tion.jda.api.requests.RestAction; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.togetherjava.tjbot.features.EventReceiver; import org.togetherjava.tjbot.features.UserInteractionType; @@ -28,8 +32,10 @@ import java.util.List; import java.util.Objects; import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; import java.util.stream.Collectors; + /** * Listens for new help threads being created. That is, a user posted a question in the help forum. *

@@ -38,6 +44,7 @@ */ public final class HelpThreadCreatedListener extends ListenerAdapter implements EventReceiver, UserInteractor { + private static final Logger log = LoggerFactory.getLogger(HelpThreadCreatedListener.class); private final HelpSystemHelper helper; private final Cache threadIdToCreatedAtCache = Caffeine.newBuilder() @@ -159,6 +166,25 @@ public void acceptComponentIdGenerator(ComponentIdGenerator generator) { componentIdInteractor.acceptComponentIdGenerator(generator); } + private Consumer handleParentMessageDeleted(Member user, ThreadChannel channel, + ButtonInteractionEvent event, List args) { + int noOfMessages = 1; // we only care about first message from channel history + return error -> { + if (error instanceof ErrorResponseException ere + && ere.getErrorResponse() == ErrorResponse.UNKNOWN_MESSAGE) { + channel.getIterableHistory().reverse().limit(noOfMessages).queue(messages -> { + if (!messages.isEmpty()) { + handleDismiss(user, channel, messages.getFirst(), event, args); + } + }); + } else { + log.error( + "Trying to dismiss AI help message for thread: {}, unable to find original message.", + channel.getId(), error); + } + }; + } + @Override public void onButtonClick(ButtonInteractionEvent event, List args) { // This method handles chatgpt's automatic response "dismiss" button @@ -169,7 +195,8 @@ public void onButtonClick(ButtonInteractionEvent event, List args) { channel.retrieveStartMessage() .queue(forumPostMessage -> handleDismiss(interactionUser, channel, forumPostMessage, - event, args)); + event, args), + handleParentMessageDeleted(interactionUser, channel, event, args)); }