Skip to content

Commit 996431f

Browse files
authored
fix: AI message dismiss button (#1403)
* fix: AI message dismiss button when message that created thread was deleted, retrieveStartMessage() threw an error UNKNOWN_MESSAGE leading to non-functional dismiss button. this adds a handler, specifically for parent message deleted error by using getIterableHistoryInstead. * refactor: HelpThreadCreatedListener * move AI dismiss fallback consumer to a seperate function for clarity * move variable FIRST_MESSAGE_ONLY to function scope as noOfMessage for clarity * improve error log message for clarity
1 parent db01f72 commit 996431f

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

application/src/main/java/org/togetherjava/tjbot/features/help/HelpThreadCreatedListener.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,12 @@
1212
import net.dv8tion.jda.api.entities.channel.forums.ForumTag;
1313
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
1414
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
15+
import net.dv8tion.jda.api.exceptions.ErrorResponseException;
1516
import net.dv8tion.jda.api.hooks.ListenerAdapter;
17+
import net.dv8tion.jda.api.requests.ErrorResponse;
1618
import net.dv8tion.jda.api.requests.RestAction;
19+
import org.slf4j.Logger;
20+
import org.slf4j.LoggerFactory;
1721

1822
import org.togetherjava.tjbot.features.EventReceiver;
1923
import org.togetherjava.tjbot.features.UserInteractionType;
@@ -28,8 +32,10 @@
2832
import java.util.List;
2933
import java.util.Objects;
3034
import java.util.concurrent.TimeUnit;
35+
import java.util.function.Consumer;
3136
import java.util.stream.Collectors;
3237

38+
3339
/**
3440
* Listens for new help threads being created. That is, a user posted a question in the help forum.
3541
* <p>
@@ -38,6 +44,7 @@
3844
*/
3945
public final class HelpThreadCreatedListener extends ListenerAdapter
4046
implements EventReceiver, UserInteractor {
47+
private static final Logger log = LoggerFactory.getLogger(HelpThreadCreatedListener.class);
4148
private final HelpSystemHelper helper;
4249

4350
private final Cache<Long, Instant> threadIdToCreatedAtCache = Caffeine.newBuilder()
@@ -159,6 +166,25 @@ public void acceptComponentIdGenerator(ComponentIdGenerator generator) {
159166
componentIdInteractor.acceptComponentIdGenerator(generator);
160167
}
161168

169+
private Consumer<Throwable> handleParentMessageDeleted(Member user, ThreadChannel channel,
170+
ButtonInteractionEvent event, List<String> args) {
171+
int noOfMessages = 1; // we only care about first message from channel history
172+
return error -> {
173+
if (error instanceof ErrorResponseException ere
174+
&& ere.getErrorResponse() == ErrorResponse.UNKNOWN_MESSAGE) {
175+
channel.getIterableHistory().reverse().limit(noOfMessages).queue(messages -> {
176+
if (!messages.isEmpty()) {
177+
handleDismiss(user, channel, messages.getFirst(), event, args);
178+
}
179+
});
180+
} else {
181+
log.error(
182+
"Trying to dismiss AI help message for thread: {}, unable to find original message.",
183+
channel.getId(), error);
184+
}
185+
};
186+
}
187+
162188
@Override
163189
public void onButtonClick(ButtonInteractionEvent event, List<String> args) {
164190
// This method handles chatgpt's automatic response "dismiss" button
@@ -169,7 +195,8 @@ public void onButtonClick(ButtonInteractionEvent event, List<String> args) {
169195

170196
channel.retrieveStartMessage()
171197
.queue(forumPostMessage -> handleDismiss(interactionUser, channel, forumPostMessage,
172-
event, args));
198+
event, args),
199+
handleParentMessageDeleted(interactionUser, channel, event, args));
173200

174201
}
175202

0 commit comments

Comments
 (0)