Skip to content

Commit 837e913

Browse files
authored
Bug/ allows OP of embed from transfer-feature to dismiss GPT's response (#951)
* refactor dismiss gpt ans button to allow embed author use it * refactor if conditions into seperate method for better readability * refactor to replace complete with queue * refactor dismiss button flow * improve message UX
1 parent 79a659f commit 837e913

File tree

1 file changed

+42
-10
lines changed

1 file changed

+42
-10
lines changed

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

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -157,19 +157,15 @@ public void acceptComponentIdGenerator(ComponentIdGenerator generator) {
157157
@Override
158158
public void onButtonClick(ButtonInteractionEvent event, List<String> args) {
159159
// This method handles chatgpt's automatic response "dismiss" button
160+
event.deferEdit().queue();
161+
160162
ThreadChannel channel = event.getChannel().asThreadChannel();
161163
Member interactionUser = Objects.requireNonNull(event.getMember());
162-
if (channel.getOwnerIdLong() != interactionUser.getIdLong()
163-
&& !helper.hasTagManageRole(interactionUser)) {
164-
event.reply("You do not have permission for this action.").setEphemeral(true).queue();
165-
return;
166-
}
167164

168-
RestAction<Void> deleteMessages = event.getMessage().delete();
169-
for (String id : args) {
170-
deleteMessages = deleteMessages.and(channel.deleteMessageById(id));
171-
}
172-
deleteMessages.queue();
165+
channel.retrieveMessageById(channel.getId())
166+
.queue(forumPostMessage -> handleDismiss(interactionUser, channel, forumPostMessage,
167+
event, args));
168+
173169
}
174170

175171
@Override
@@ -182,4 +178,40 @@ public void onModalSubmitted(ModalInteractionEvent event, List<String> args) {
182178
throw new UnsupportedOperationException("Not used");
183179
}
184180

181+
private boolean isPostAuthor(Member interactionUser, Message message) {
182+
if (message.getEmbeds().isEmpty())
183+
return false;
184+
185+
String embedAuthor = Objects
186+
.requireNonNull(message.getEmbeds().get(0).getAuthor(),
187+
"embed author for forum post is null")
188+
.getName();
189+
190+
return embedAuthor.equals(interactionUser.getUser().getName());
191+
}
192+
193+
private boolean isAuthorized(Member interactionUser, ThreadChannel channel,
194+
Message forumPostMessage) {
195+
return (channel.getOwnerIdLong() == interactionUser.getIdLong())
196+
|| helper.hasTagManageRole(interactionUser)
197+
|| isPostAuthor(interactionUser, forumPostMessage);
198+
}
199+
200+
private void handleDismiss(Member interactionUser, ThreadChannel channel,
201+
Message forumPostMessage, ButtonInteractionEvent event, List<String> args) {
202+
boolean isAuthorized = isAuthorized(interactionUser, channel, forumPostMessage);
203+
if (!isAuthorized) {
204+
event.getHook()
205+
.sendMessage("You do not have permission for this action.")
206+
.setEphemeral(true)
207+
.queue();
208+
return;
209+
}
210+
211+
RestAction<Void> deleteMessages = event.getMessage().delete();
212+
for (String id : args) {
213+
deleteMessages = deleteMessages.and(channel.deleteMessageById(id));
214+
}
215+
deleteMessages.queue();
216+
}
185217
}

0 commit comments

Comments
 (0)