Skip to content

Commit 9c71eca

Browse files
committed
Added pages to see throught reported user's history
1 parent ece6dbf commit 9c71eca

1 file changed

Lines changed: 43 additions & 18 deletions

File tree

application/src/main/java/org/togetherjava/tjbot/features/moderation/ReportCommand.java

Lines changed: 43 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.awt.Color;
3333
import java.time.Instant;
3434
import java.time.temporal.ChronoUnit;
35+
import java.util.Collections;
3536
import java.util.List;
3637
import java.util.Objects;
3738
import java.util.Optional;
@@ -189,7 +190,8 @@ private MessageCreateAction createModMessage(String reportReason,
189190
.setColor(AMBIENT_COLOR)
190191
.build();
191192

192-
String historyButtonId = generateComponentId(Lifespan.REGULAR, reportedMessage.authorId);
193+
String historyButtonId =
194+
generateComponentId(Lifespan.REGULAR, reportedMessage.authorId, "0");
193195

194196
MessageCreateAction message =
195197
modMailAuditLog.sendMessageEmbeds(reportedMessageEmbed, reportReasonEmbed)
@@ -249,13 +251,20 @@ static ReportedMessage ofArgs(List<String> args) {
249251

250252
@Override
251253
public void onButtonClick(ButtonInteractionEvent event, List<String> args) {
252-
event.deferReply().setEphemeral(true).queue();
254+
event.deferEdit().queue();
255+
256+
Guild guild =
257+
Objects.requireNonNull(event.getGuild(), "Guild cannot be null for this command.");
258+
long guildId = guild.getIdLong();
259+
260+
long reportedUserId = Long.parseLong(args.get(0));
261+
int targetPage = Integer.parseInt(args.get(1));
253262

254-
long guildId = event.getGuild().getIdLong();
255-
long reportedUserId = Long.parseLong(args.getFirst());
263+
List<ActionRecord> actions = new java.util.ArrayList<>(
264+
moderationActionsStore.getActionsByTargetAscending(guildId, reportedUserId));
256265

257-
List<ActionRecord> actions =
258-
moderationActionsStore.getActionsByTargetAscending(guildId, reportedUserId);
266+
Collections.reverse(actions);
267+
List<List<ActionRecord>> pages = ModerationUtils.groupActionsByPages(actions);
259268

260269
event.getJDA().retrieveUserById(reportedUserId).queue(user -> {
261270
EmbedBuilder auditEmbed =
@@ -264,33 +273,49 @@ public void onButtonClick(ButtonInteractionEvent event, List<String> args) {
264273
.setColor(Color.BLACK)
265274
.setDescription(ModerationUtils.createSummaryMessageDescription(actions));
266275

267-
List<List<ActionRecord>> pages = ModerationUtils.groupActionsByPages(actions);
268-
269276
if (pages.isEmpty()) {
270-
event.getHook().sendMessageEmbeds(auditEmbed.build()).queue();
277+
event.getHook()
278+
.editOriginalEmbeds(auditEmbed.build())
279+
.setComponents(Collections.emptyList())
280+
.queue();
271281
return;
272282
}
273283

284+
int currentPageIndex = Math.clamp(targetPage, 0, pages.size() - 1);
285+
274286
List<net.dv8tion.jda.api.requests.RestAction<MessageEmbed.Field>> fieldTasks =
275-
pages.getLast()
287+
pages.get(currentPageIndex)
276288
.stream()
277289
.map(action -> ModerationUtils.actionToField(action, event.getJDA()))
278290
.toList();
279291

280292
net.dv8tion.jda.api.requests.RestAction.allOf(fieldTasks).queue(fields -> {
293+
auditEmbed.clearFields();
281294
fields.forEach(auditEmbed::addField);
282295

283-
if (pages.size() > 1) {
284-
auditEmbed.setFooter(
285-
"Showing page %d/%d (Most recent actions). Use /audit to view full history."
286-
.formatted(pages.size(), pages.size()));
287-
}
296+
auditEmbed.setFooter("Page %d/%d (Most recent first)"
297+
.formatted(currentPageIndex + 1, pages.size()));
298+
299+
String prevButtonId = generateComponentId(Lifespan.REGULAR,
300+
String.valueOf(reportedUserId), String.valueOf(currentPageIndex - 1));
301+
String nextButtonId = generateComponentId(Lifespan.REGULAR,
302+
String.valueOf(reportedUserId), String.valueOf(currentPageIndex + 1));
303+
304+
Button prevButton = Button.primary(prevButtonId, "◀ Previous")
305+
.withDisabled(currentPageIndex == 0);
306+
307+
Button nextButton = Button.primary(nextButtonId, "Next ▶")
308+
.withDisabled(currentPageIndex == pages.size() - 1);
309+
310+
event.getHook()
311+
.editOriginalEmbeds(auditEmbed.build())
312+
.setActionRow(prevButton, nextButton)
313+
.queue();
288314

289-
event.getHook().sendMessageEmbeds(auditEmbed.build()).queue();
290-
}, throwable -> event.getHook()
315+
}, _ -> event.getHook()
291316
.sendMessage("Could not load moderation history fields.")
292317
.queue());
293-
}, throwable -> event.getHook()
318+
}, _ -> event.getHook()
294319
.sendMessage("Could not retrieve audit data for this user.")
295320
.queue());
296321
}

0 commit comments

Comments
 (0)