Skip to content

Commit 9e605d4

Browse files
committed
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.
1 parent 59de5ee commit 9e605d4

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

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

Lines changed: 22 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()
@@ -46,6 +53,7 @@ public final class HelpThreadCreatedListener extends ListenerAdapter
4653
.build();
4754
private final ComponentIdInteractor componentIdInteractor =
4855
new ComponentIdInteractor(getInteractionType(), getName());
56+
private static final int FIRST_MESSAGE_ONLY = 1;
4957

5058
/**
5159
* Creates a new instance.
@@ -167,9 +175,22 @@ public void onButtonClick(ButtonInteractionEvent event, List<String> args) {
167175
ThreadChannel channel = event.getChannel().asThreadChannel();
168176
Member interactionUser = Objects.requireNonNull(event.getMember());
169177

178+
Consumer<Throwable> handleParentMessageDeleted = error -> {
179+
if (error instanceof ErrorResponseException ere
180+
&& ere.getErrorResponse() == ErrorResponse.UNKNOWN_MESSAGE) {
181+
channel.getIterableHistory().reverse().limit(FIRST_MESSAGE_ONLY).queue(messages -> {
182+
if (!messages.isEmpty()) {
183+
handleDismiss(interactionUser, channel, messages.getFirst(), event, args);
184+
}
185+
});
186+
} else {
187+
log.error("Failed to retrieve start message: ", error);
188+
}
189+
};
190+
170191
channel.retrieveStartMessage()
171192
.queue(forumPostMessage -> handleDismiss(interactionUser, channel, forumPostMessage,
172-
event, args));
193+
event, args), handleParentMessageDeleted);
173194

174195
}
175196

0 commit comments

Comments
 (0)