@@ -157,19 +157,15 @@ public void acceptComponentIdGenerator(ComponentIdGenerator generator) {
157
157
@ Override
158
158
public void onButtonClick (ButtonInteractionEvent event , List <String > args ) {
159
159
// This method handles chatgpt's automatic response "dismiss" button
160
+ event .deferEdit ().queue ();
161
+
160
162
ThreadChannel channel = event .getChannel ().asThreadChannel ();
161
163
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
- }
167
164
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
+
173
169
}
174
170
175
171
@ Override
@@ -182,4 +178,40 @@ public void onModalSubmitted(ModalInteractionEvent event, List<String> args) {
182
178
throw new UnsupportedOperationException ("Not used" );
183
179
}
184
180
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
+ }
185
217
}
0 commit comments