1212import net .dv8tion .jda .api .entities .channel .forums .ForumTag ;
1313import net .dv8tion .jda .api .events .interaction .component .ButtonInteractionEvent ;
1414import net .dv8tion .jda .api .events .message .MessageReceivedEvent ;
15+ import net .dv8tion .jda .api .exceptions .ErrorResponseException ;
1516import net .dv8tion .jda .api .hooks .ListenerAdapter ;
17+ import net .dv8tion .jda .api .requests .ErrorResponse ;
1618import net .dv8tion .jda .api .requests .RestAction ;
19+ import org .slf4j .Logger ;
20+ import org .slf4j .LoggerFactory ;
1721
1822import org .togetherjava .tjbot .features .EventReceiver ;
1923import org .togetherjava .tjbot .features .UserInteractionType ;
2832import java .util .List ;
2933import java .util .Objects ;
3034import java .util .concurrent .TimeUnit ;
35+ import java .util .function .Consumer ;
3136import 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>
3844 */
3945public 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