Skip to content

Commit f60a518

Browse files
committed
refactor HelpThreadCreatedListener
* move write to db in a method * use messageRecieved instead of onChannelCreate * rename createMessages to generateAutomatedResponse * chain generateAutomatedResponse and pinOriginal to retreiveMessage rest action
1 parent 5544ffb commit f60a518

File tree

1 file changed

+31
-32
lines changed

1 file changed

+31
-32
lines changed

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

Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@
99
import net.dv8tion.jda.api.entities.User;
1010
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
1111
import 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;
1313
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
14+
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
1415
import net.dv8tion.jda.api.hooks.ListenerAdapter;
1516
import net.dv8tion.jda.api.requests.RestAction;
17+
import org.jetbrains.annotations.NotNull;
1618

1719
import org.togetherjava.tjbot.features.EventReceiver;
1820
import 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

Comments
 (0)