From 0a9eb9643199ceed4db96277814c82d427d3366c Mon Sep 17 00:00:00 2001 From: alphaBEE Date: Tue, 14 Nov 2023 10:25:41 +0530 Subject: [PATCH 1/5] refactor dismiss gpt ans button to allow embed author use it --- .../features/help/HelpThreadCreatedListener.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) 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 19516dc347..1bb88dda96 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 @@ -159,8 +159,11 @@ public void onButtonClick(ButtonInteractionEvent event, List args) { // This method handles chatgpt's automatic response "dismiss" button ThreadChannel channel = event.getChannel().asThreadChannel(); Member interactionUser = Objects.requireNonNull(event.getMember()); + Message forumPostMessage = channel.retrieveMessageById(channel.getId()).complete(); + + boolean isEmbedAuthor = isPostAuthor(interactionUser, forumPostMessage); if (channel.getOwnerIdLong() != interactionUser.getIdLong() - && !helper.hasTagManageRole(interactionUser)) { + && !helper.hasTagManageRole(interactionUser) && (!isEmbedAuthor)) { event.reply("You do not have permission for this action.").setEphemeral(true).queue(); return; } @@ -182,4 +185,13 @@ public void onModalSubmitted(ModalInteractionEvent event, List args) { throw new UnsupportedOperationException("Not used"); } + private boolean isPostAuthor(Member user, Message message) { + if (message.getEmbeds().isEmpty()) + return false; + String embedAuthor = Objects + .requireNonNull(message.getEmbeds().get(0).getAuthor(), + "embed author for forum post is null") + .getName(); + return embedAuthor.equals(user.getUser().getName()); + } } From 640d85e38136db0462987bd827371eedd6d3110e Mon Sep 17 00:00:00 2001 From: alphaBEE Date: Tue, 14 Nov 2023 10:39:02 +0530 Subject: [PATCH 2/5] refactor if conditions into seperate method for better readability --- .../help/HelpThreadCreatedListener.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 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 1bb88dda96..81f10618ae 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 @@ -161,9 +161,9 @@ public void onButtonClick(ButtonInteractionEvent event, List args) { Member interactionUser = Objects.requireNonNull(event.getMember()); Message forumPostMessage = channel.retrieveMessageById(channel.getId()).complete(); - boolean isEmbedAuthor = isPostAuthor(interactionUser, forumPostMessage); - if (channel.getOwnerIdLong() != interactionUser.getIdLong() - && !helper.hasTagManageRole(interactionUser) && (!isEmbedAuthor)) { + boolean isAuthorized = isAuthorized(interactionUser, channel, forumPostMessage); + + if (!isAuthorized) { event.reply("You do not have permission for this action.").setEphemeral(true).queue(); return; } @@ -185,13 +185,22 @@ public void onModalSubmitted(ModalInteractionEvent event, List args) { throw new UnsupportedOperationException("Not used"); } - private boolean isPostAuthor(Member user, Message message) { + private boolean isPostAuthor(Member interactionUser, Message message) { if (message.getEmbeds().isEmpty()) return false; + String embedAuthor = Objects .requireNonNull(message.getEmbeds().get(0).getAuthor(), "embed author for forum post is null") .getName(); - return embedAuthor.equals(user.getUser().getName()); + + return embedAuthor.equals(interactionUser.getUser().getName()); + } + + private boolean isAuthorized(Member interactionUser, ThreadChannel channel, + Message forumPostMessage) { + return (channel.getOwnerIdLong() == interactionUser.getIdLong()) + || helper.hasTagManageRole(interactionUser) + || (isPostAuthor(interactionUser, forumPostMessage)); } } From a73d71dd222014b384b5c75ac2e1785c5dc03a6e Mon Sep 17 00:00:00 2001 From: alphaBEE Date: Tue, 14 Nov 2023 23:18:47 +0530 Subject: [PATCH 3/5] refactor to replace complete with queue --- .../help/HelpThreadCreatedListener.java | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 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 81f10618ae..7b924702e4 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 @@ -13,6 +13,7 @@ import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; import net.dv8tion.jda.api.events.interaction.component.SelectMenuInteractionEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; +import net.dv8tion.jda.api.interactions.InteractionHook; import net.dv8tion.jda.api.requests.RestAction; import org.togetherjava.tjbot.features.EventReceiver; @@ -157,16 +158,14 @@ public void acceptComponentIdGenerator(ComponentIdGenerator generator) { @Override public void onButtonClick(ButtonInteractionEvent event, List args) { // This method handles chatgpt's automatic response "dismiss" button + event.deferEdit().queue(); + ThreadChannel channel = event.getChannel().asThreadChannel(); Member interactionUser = Objects.requireNonNull(event.getMember()); - Message forumPostMessage = channel.retrieveMessageById(channel.getId()).complete(); - - boolean isAuthorized = isAuthorized(interactionUser, channel, forumPostMessage); - if (!isAuthorized) { - event.reply("You do not have permission for this action.").setEphemeral(true).queue(); - return; - } + channel.retrieveMessageById(channel.getId()) + .map(forumPostMessage -> handleAuth(interactionUser, channel, forumPostMessage, event)) + .queue(); RestAction deleteMessages = event.getMessage().delete(); for (String id : args) { @@ -201,6 +200,16 @@ private boolean isAuthorized(Member interactionUser, ThreadChannel channel, Message forumPostMessage) { return (channel.getOwnerIdLong() == interactionUser.getIdLong()) || helper.hasTagManageRole(interactionUser) - || (isPostAuthor(interactionUser, forumPostMessage)); + || isPostAuthor(interactionUser, forumPostMessage); + } + + private RestAction handleAuth(Member interactionUser, ThreadChannel channel, + Message forumPostMessage, ButtonInteractionEvent event) { + boolean isAuthorized = isAuthorized(interactionUser, channel, forumPostMessage); + if (!isAuthorized) { + event.getInteraction().deferEdit().queue(); + return event.reply("You do not have permission for this action.").setEphemeral(true); + } + return event.getInteraction().deferEdit(); } } From 34c21182227ab0226ecb17d75369e54e410711f4 Mon Sep 17 00:00:00 2001 From: alphaBEE Date: Wed, 15 Nov 2023 16:46:17 +0530 Subject: [PATCH 4/5] refactor dismiss button flow --- .../help/HelpThreadCreatedListener.java | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 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 7b924702e4..4c1842e661 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 @@ -13,7 +13,6 @@ import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; import net.dv8tion.jda.api.events.interaction.component.SelectMenuInteractionEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; -import net.dv8tion.jda.api.interactions.InteractionHook; import net.dv8tion.jda.api.requests.RestAction; import org.togetherjava.tjbot.features.EventReceiver; @@ -164,14 +163,9 @@ public void onButtonClick(ButtonInteractionEvent event, List args) { Member interactionUser = Objects.requireNonNull(event.getMember()); channel.retrieveMessageById(channel.getId()) - .map(forumPostMessage -> handleAuth(interactionUser, channel, forumPostMessage, event)) - .queue(); + .queue(forumPostMessage -> handleDismiss(interactionUser, channel, forumPostMessage, + event, args)); - RestAction deleteMessages = event.getMessage().delete(); - for (String id : args) { - deleteMessages = deleteMessages.and(channel.deleteMessageById(id)); - } - deleteMessages.queue(); } @Override @@ -203,13 +197,18 @@ private boolean isAuthorized(Member interactionUser, ThreadChannel channel, || isPostAuthor(interactionUser, forumPostMessage); } - private RestAction handleAuth(Member interactionUser, ThreadChannel channel, - Message forumPostMessage, ButtonInteractionEvent event) { + private void handleDismiss(Member interactionUser, ThreadChannel channel, + Message forumPostMessage, ButtonInteractionEvent event, List args) { boolean isAuthorized = isAuthorized(interactionUser, channel, forumPostMessage); if (!isAuthorized) { - event.getInteraction().deferEdit().queue(); - return event.reply("You do not have permission for this action.").setEphemeral(true); + event.getHook().sendMessage("Not allowed").setEphemeral(true).queue(); + return; } - return event.getInteraction().deferEdit(); + + RestAction deleteMessages = event.getMessage().delete(); + for (String id : args) { + deleteMessages = deleteMessages.and(channel.deleteMessageById(id)); + } + deleteMessages.queue(); } } From 79509c1b07b9fa4a18dc5dcd09bba2085e794f08 Mon Sep 17 00:00:00 2001 From: alphaBEE Date: Wed, 15 Nov 2023 20:50:31 +0530 Subject: [PATCH 5/5] improve message UX --- .../tjbot/features/help/HelpThreadCreatedListener.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 4c1842e661..693ade353e 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 @@ -201,7 +201,10 @@ private void handleDismiss(Member interactionUser, ThreadChannel channel, Message forumPostMessage, ButtonInteractionEvent event, List args) { boolean isAuthorized = isAuthorized(interactionUser, channel, forumPostMessage); if (!isAuthorized) { - event.getHook().sendMessage("Not allowed").setEphemeral(true).queue(); + event.getHook() + .sendMessage("You do not have permission for this action.") + .setEphemeral(true) + .queue(); return; }