33import com .github .benmanes .caffeine .cache .Cache ;
44import com .github .benmanes .caffeine .cache .Caffeine ;
55import net .dv8tion .jda .api .EmbedBuilder ;
6- import net .dv8tion .jda .api .entities .*;
6+ import net .dv8tion .jda .api .entities .Guild ;
7+ import net .dv8tion .jda .api .entities .Message ;
8+ import net .dv8tion .jda .api .entities .MessageEmbed ;
9+ import net .dv8tion .jda .api .entities .Role ;
10+ import net .dv8tion .jda .api .entities .User ;
711import net .dv8tion .jda .api .entities .channel .concrete .TextChannel ;
812import net .dv8tion .jda .api .events .interaction .ModalInteractionEvent ;
913import net .dv8tion .jda .api .events .interaction .command .MessageContextInteractionEvent ;
2832import org .togetherjava .tjbot .features .utils .AmbientColors ;
2933import org .togetherjava .tjbot .features .utils .MessageUtils ;
3034
31- import java .awt .*;
3235import java .time .Instant ;
3336import java .time .temporal .ChronoUnit ;
34- import java .util .*;
37+ import java .util .ArrayList ;
38+ import java .util .Collections ;
3539import java .util .List ;
40+ import java .util .Objects ;
41+ import java .util .Optional ;
3642import java .util .concurrent .TimeUnit ;
3743import java .util .function .Predicate ;
3844import java .util .regex .Pattern ;
@@ -186,8 +192,11 @@ private MessageCreateAction createModMessage(String reportReason,
186192 .setColor (AmbientColors .MODMAIL )
187193 .build ();
188194
189- String historyButtonId =
190- generateComponentId (Lifespan .REGULAR , reportedMessage .authorId , "0" );
195+ long reportedUserId = Long .parseLong (reportedMessage .authorId );
196+ int startingPage = getStartingPageForUser (guild .getIdLong (), reportedUserId );
197+
198+ String historyButtonId = generateComponentId (Lifespan .REGULAR , reportedMessage .authorId ,
199+ String .valueOf (startingPage ));
191200
192201 MessageCreateAction message =
193202 modMailAuditLog .sendMessageEmbeds (reportedMessageEmbed , reportReasonEmbed )
@@ -247,7 +256,11 @@ static ReportedMessage ofArgs(List<String> args) {
247256
248257 @ Override
249258 public void onButtonClick (ButtonInteractionEvent event , List <String > args ) {
250- event .deferReply (true ).queue ();
259+ if (event .getMessage ().isEphemeral ()) {
260+ event .deferEdit ().queue ();
261+ } else {
262+ event .deferReply (true ).queue ();
263+ }
251264
252265 Guild guild =
253266 Objects .requireNonNull (event .getGuild (), "Guild cannot be null for this command." );
@@ -265,7 +278,7 @@ public void onButtonClick(ButtonInteractionEvent event, List<String> args) {
265278 .retrieveUserById (reportedUserId )
266279 .flatMap (user -> prepareAuditEmbedTasks (event , user , actions , pages , targetPage ))
267280 .onErrorFlatMap (_ -> event .getHook ()
268- .sendMessage ("Could not load audit data for this user." )
281+ .editOriginal ("Could not load audit data for this user." )
269282 .map (_ -> null ))
270283 .queue ();
271284 }
@@ -277,7 +290,7 @@ private RestAction<List<MessageEmbed.Field>> prepareAuditEmbedTasks(
277290 EmbedBuilder auditEmbed =
278291 new EmbedBuilder ().setTitle ("Audit log of **%s**" .formatted (user .getName ()))
279292 .setAuthor (user .getName (), null , user .getEffectiveAvatarUrl ())
280- .setColor (Color . BLACK )
293+ .setColor (AmbientColors . MODMAIL )
281294 .setDescription (ModerationUtils .createSummaryMessageDescription (actions ));
282295
283296 if (pages .isEmpty ()) {
@@ -308,8 +321,7 @@ private void finalizeAndSendEmbed(ButtonInteractionEvent event, EmbedBuilder aud
308321 auditEmbed .clearFields ();
309322 embedFields .forEach (auditEmbed ::addField );
310323
311- auditEmbed .setFooter (
312- "Page %d/%d (Most recent first)" .formatted (currentPageIndex + 1 , totalPages ));
324+ auditEmbed .setFooter ("Page %d/%d" .formatted (currentPageIndex + 1 , totalPages ));
313325
314326 String prevButtonId = generateComponentId (Lifespan .REGULAR , String .valueOf (reportedUserId ),
315327 String .valueOf (currentPageIndex - 1 ));
@@ -327,4 +339,14 @@ private void finalizeAndSendEmbed(ButtonInteractionEvent event, EmbedBuilder aud
327339 .queue ();
328340 }
329341
342+ private int getStartingPageForUser (long guildId , long userId ) {
343+ List <ActionRecord > actions = new ArrayList <>(
344+ moderationActionsStore .getActionsByTargetAscending (guildId , userId ));
345+
346+ Collections .reverse (actions );
347+ List <List <ActionRecord >> pages = ModerationUtils .groupActionsByPages (actions );
348+
349+ return Math .max (0 , pages .size () - 1 );
350+ }
351+
330352}
0 commit comments