99import net .dv8tion .jda .api .entities .User ;
1010import net .dv8tion .jda .api .entities .channel .concrete .ThreadChannel ;
1111import net .dv8tion .jda .api .entities .channel .forums .ForumTag ;
12- import net .dv8tion .jda .api .events .channel .ChannelCreateEvent ;
12+ import net .dv8tion .jda .api .entities .channel .unions . IThreadContainerUnion ;
1313import net .dv8tion .jda .api .events .interaction .component .ButtonInteractionEvent ;
14+ import net .dv8tion .jda .api .events .message .MessageReceivedEvent ;
1415import net .dv8tion .jda .api .hooks .ListenerAdapter ;
1516import net .dv8tion .jda .api .requests .RestAction ;
17+ import org .jetbrains .annotations .NotNull ;
1618
1719import org .togetherjava .tjbot .features .EventReceiver ;
1820import org .togetherjava .tjbot .features .UserInteractionType ;
@@ -56,20 +58,19 @@ public HelpThreadCreatedListener(HelpSystemHelper helper) {
5658 }
5759
5860 @ Override
59- public void onChannelCreate ( ChannelCreateEvent createEvent ) {
60- if (! createEvent . getChannelType (). isThread ()) {
61- return ;
62- }
63- ThreadChannel threadChannel = createEvent . getChannel (). asThreadChannel ();
64-
65- if ( wasThreadAlreadyHandled ( threadChannel .getIdLong ())) {
66- return ;
67- }
68-
69- if (! helper . isHelpForumName ( threadChannel . getParentChannel (). getName ())) {
70- return ;
61+ public void onMessageReceived ( @ NotNull MessageReceivedEvent event ) {
62+ if (event . isFromThread ()) {
63+ IThreadContainerUnion parentChannel =
64+ event . getChannel (). asThreadChannel (). getParentChannel ();
65+ if ( helper . isHelpForumName ( parentChannel . getName ())) {
66+ ThreadChannel threadChannel = event . getChannel (). asThreadChannel ();
67+ int messageCount = threadChannel .getMessageCount ();
68+ if ( messageCount > 1 || wasThreadAlreadyHandled ( threadChannel . getIdLong ())) {
69+ return ;
70+ }
71+ handleHelpThreadCreated ( threadChannel );
72+ }
7173 }
72- handleHelpThreadCreated (threadChannel );
7374 }
7475
7576 private boolean wasThreadAlreadyHandled (long threadChannelId ) {
@@ -82,23 +83,10 @@ private boolean wasThreadAlreadyHandled(long threadChannelId) {
8283 }
8384
8485 private void handleHelpThreadCreated (ThreadChannel threadChannel ) {
85- threadChannel .retrieveMessageById (threadChannel .getIdLong ()).queue (message -> {
86-
87- long authorId = threadChannel .getOwnerIdLong ();
88-
89- if (isPostedBySelfUser (message )) {
90- // When transfer-command is used
91- authorId = getMentionedAuthorByMessage (message ).getIdLong ();
92- }
93-
94- helper .writeHelpThreadToDatabase (authorId , threadChannel );
95- });
96-
97- // The creation is delayed, because otherwise it could be too fast and be executed
98- // after Discord created the thread, but before Discord send OPs initial message.
99- // Sending messages at that moment is not allowed.
100- createMessages (threadChannel ).and (pinOriginalQuestion (threadChannel ))
101- .queueAfter (5 , TimeUnit .SECONDS );
86+ threadChannel .retrieveMessageById (threadChannel .getIdLong ()).flatMap (message -> {
87+ registerThreadDataInDB (message , threadChannel );
88+ return generateAutomatedResponse (threadChannel );
89+ }).flatMap (message -> pinOriginalQuestion (threadChannel )).queue ();
10290 }
10391
10492 private static User getMentionedAuthorByMessage (Message message ) {
@@ -126,7 +114,7 @@ private RestAction<Void> pinOriginalQuestion(ThreadChannel threadChannel) {
126114 return threadChannel .retrieveMessageById (threadChannel .getIdLong ()).flatMap (Message ::pin );
127115 }
128116
129- private RestAction <Message > createMessages (ThreadChannel threadChannel ) {
117+ private RestAction <Message > generateAutomatedResponse (ThreadChannel threadChannel ) {
130118 return sendHelperHeadsUp (threadChannel ).flatMap (any -> createAIResponse (threadChannel ));
131119 }
132120
@@ -228,4 +216,15 @@ private void handleDismiss(Member interactionUser, ThreadChannel channel,
228216 }
229217 deleteMessages .queue ();
230218 }
219+
220+ private void registerThreadDataInDB (Message message , ThreadChannel threadChannel ) {
221+ long authorId = threadChannel .getOwnerIdLong ();
222+
223+ if (isPostedBySelfUser (message )) {
224+ // When transfer-command is used
225+ authorId = getMentionedAuthorByMessage (message ).getIdLong ();
226+ }
227+
228+ helper .writeHelpThreadToDatabase (authorId , threadChannel );
229+ }
231230}
0 commit comments