From f60a5181989443bfa2bcf16fbf17a630ba12a3fe Mon Sep 17 00:00:00 2001 From: alphaBEE <61616007+ankitsmt211@users.noreply.github.com> Date: Tue, 26 Mar 2024 16:25:07 +0530 Subject: [PATCH 1/2] 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 --- .../help/HelpThreadCreatedListener.java | 63 +++++++++---------- 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/application/src/main/java/org/togetherjava/tjbot/features/help/HelpThreadCreatedListener.java b/application/src/main/java/org/togetherjava/tjbot/features/help/HelpThreadCreatedListener.java index f048723d09..f3c299e8ce 100644 --- a/application/src/main/java/org/togetherjava/tjbot/features/help/HelpThreadCreatedListener.java +++ b/application/src/main/java/org/togetherjava/tjbot/features/help/HelpThreadCreatedListener.java @@ -9,10 +9,12 @@ import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel; import net.dv8tion.jda.api.entities.channel.forums.ForumTag; -import net.dv8tion.jda.api.events.channel.ChannelCreateEvent; +import net.dv8tion.jda.api.entities.channel.unions.IThreadContainerUnion; import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import net.dv8tion.jda.api.requests.RestAction; +import org.jetbrains.annotations.NotNull; import org.togetherjava.tjbot.features.EventReceiver; import org.togetherjava.tjbot.features.UserInteractionType; @@ -56,20 +58,19 @@ public HelpThreadCreatedListener(HelpSystemHelper helper) { } @Override - public void onChannelCreate(ChannelCreateEvent createEvent) { - if (!createEvent.getChannelType().isThread()) { - return; - } - ThreadChannel threadChannel = createEvent.getChannel().asThreadChannel(); - - if (wasThreadAlreadyHandled(threadChannel.getIdLong())) { - return; - } - - if (!helper.isHelpForumName(threadChannel.getParentChannel().getName())) { - return; + public void onMessageReceived(@NotNull MessageReceivedEvent event) { + if (event.isFromThread()) { + IThreadContainerUnion parentChannel = + event.getChannel().asThreadChannel().getParentChannel(); + if (helper.isHelpForumName(parentChannel.getName())) { + ThreadChannel threadChannel = event.getChannel().asThreadChannel(); + int messageCount = threadChannel.getMessageCount(); + if (messageCount > 1 || wasThreadAlreadyHandled(threadChannel.getIdLong())) { + return; + } + handleHelpThreadCreated(threadChannel); + } } - handleHelpThreadCreated(threadChannel); } private boolean wasThreadAlreadyHandled(long threadChannelId) { @@ -82,23 +83,10 @@ private boolean wasThreadAlreadyHandled(long threadChannelId) { } private void handleHelpThreadCreated(ThreadChannel threadChannel) { - threadChannel.retrieveMessageById(threadChannel.getIdLong()).queue(message -> { - - long authorId = threadChannel.getOwnerIdLong(); - - if (isPostedBySelfUser(message)) { - // When transfer-command is used - authorId = getMentionedAuthorByMessage(message).getIdLong(); - } - - helper.writeHelpThreadToDatabase(authorId, threadChannel); - }); - - // The creation is delayed, because otherwise it could be too fast and be executed - // after Discord created the thread, but before Discord send OPs initial message. - // Sending messages at that moment is not allowed. - createMessages(threadChannel).and(pinOriginalQuestion(threadChannel)) - .queueAfter(5, TimeUnit.SECONDS); + threadChannel.retrieveMessageById(threadChannel.getIdLong()).flatMap(message -> { + registerThreadDataInDB(message, threadChannel); + return generateAutomatedResponse(threadChannel); + }).flatMap(message -> pinOriginalQuestion(threadChannel)).queue(); } private static User getMentionedAuthorByMessage(Message message) { @@ -126,7 +114,7 @@ private RestAction pinOriginalQuestion(ThreadChannel threadChannel) { return threadChannel.retrieveMessageById(threadChannel.getIdLong()).flatMap(Message::pin); } - private RestAction createMessages(ThreadChannel threadChannel) { + private RestAction generateAutomatedResponse(ThreadChannel threadChannel) { return sendHelperHeadsUp(threadChannel).flatMap(any -> createAIResponse(threadChannel)); } @@ -228,4 +216,15 @@ private void handleDismiss(Member interactionUser, ThreadChannel channel, } deleteMessages.queue(); } + + private void registerThreadDataInDB(Message message, ThreadChannel threadChannel) { + long authorId = threadChannel.getOwnerIdLong(); + + if (isPostedBySelfUser(message)) { + // When transfer-command is used + authorId = getMentionedAuthorByMessage(message).getIdLong(); + } + + helper.writeHelpThreadToDatabase(authorId, threadChannel); + } } From a43938a426ab78d9407de920b6cc76b2a365a7c1 Mon Sep 17 00:00:00 2001 From: alphaBEE <61616007+ankitsmt211@users.noreply.github.com> Date: Sat, 6 Apr 2024 18:08:49 +0530 Subject: [PATCH 2/2] requested changes --- .../tjbot/features/help/HelpThreadCreatedListener.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/application/src/main/java/org/togetherjava/tjbot/features/help/HelpThreadCreatedListener.java b/application/src/main/java/org/togetherjava/tjbot/features/help/HelpThreadCreatedListener.java index f3c299e8ce..3994107a6b 100644 --- a/application/src/main/java/org/togetherjava/tjbot/features/help/HelpThreadCreatedListener.java +++ b/application/src/main/java/org/togetherjava/tjbot/features/help/HelpThreadCreatedListener.java @@ -7,9 +7,9 @@ import net.dv8tion.jda.api.entities.MessageEmbed; import net.dv8tion.jda.api.entities.Role; import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.Channel; import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel; import net.dv8tion.jda.api.entities.channel.forums.ForumTag; -import net.dv8tion.jda.api.entities.channel.unions.IThreadContainerUnion; import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; @@ -60,8 +60,7 @@ public HelpThreadCreatedListener(HelpSystemHelper helper) { @Override public void onMessageReceived(@NotNull MessageReceivedEvent event) { if (event.isFromThread()) { - IThreadContainerUnion parentChannel = - event.getChannel().asThreadChannel().getParentChannel(); + Channel parentChannel = event.getChannel().asThreadChannel().getParentChannel(); if (helper.isHelpForumName(parentChannel.getName())) { ThreadChannel threadChannel = event.getChannel().asThreadChannel(); int messageCount = threadChannel.getMessageCount(); @@ -83,7 +82,7 @@ private boolean wasThreadAlreadyHandled(long threadChannelId) { } private void handleHelpThreadCreated(ThreadChannel threadChannel) { - threadChannel.retrieveMessageById(threadChannel.getIdLong()).flatMap(message -> { + threadChannel.retrieveStartMessage().flatMap(message -> { registerThreadDataInDB(message, threadChannel); return generateAutomatedResponse(threadChannel); }).flatMap(message -> pinOriginalQuestion(threadChannel)).queue();