From 6c9cb39ad6bd2e7f9b59eb57b7955f22aca4ca91 Mon Sep 17 00:00:00 2001 From: Sheldan <5037282+Sheldan@users.noreply.github.com> Date: Mon, 31 Mar 2025 23:29:33 +0200 Subject: [PATCH] [AB-xxx] merging user and guild reminders for handling in reminders and unremind command fixing issue with creating reminder in DMs --- .../abstracto/remind/command/Remind.java | 4 +- .../abstracto/remind/command/Reminders.java | 38 +++++++++++++------ .../abstracto/remind/command/UnRemind.java | 13 ++++++- 3 files changed, 40 insertions(+), 15 deletions(-) diff --git a/abstracto-application/abstracto-modules/remind/remind-impl/src/main/java/dev/sheldan/abstracto/remind/command/Remind.java b/abstracto-application/abstracto-modules/remind/remind-impl/src/main/java/dev/sheldan/abstracto/remind/command/Remind.java index 01521b15f..50137ad7b 100644 --- a/abstracto-application/abstracto-modules/remind/remind-impl/src/main/java/dev/sheldan/abstracto/remind/command/Remind.java +++ b/abstracto-application/abstracto-modules/remind/remind-impl/src/main/java/dev/sheldan/abstracto/remind/command/Remind.java @@ -126,7 +126,6 @@ public class Remind extends AbstractConditionableCommand { String durationString = slashCommandParameterService.getCommandOption(DURATION_PARAMETER, event, Duration.class, String.class); Duration duration = ParseUtils.parseDuration(durationString); String reminderText = null; - Long serverId = event.getGuild().getIdLong(); if(slashCommandParameterService.hasCommandOption(REMIND_TEXT_PARAMETER, event)) { reminderText = slashCommandParameterService.getCommandOption(REMIND_TEXT_PARAMETER, event, String.class, String.class); } @@ -151,6 +150,7 @@ public class Remind extends AbstractConditionableCommand { .build(); if(ContextUtils.isNotUserCommand(event)) { + Long serverId = event.getGuild().getIdLong(); AServer server = serverManagementService.loadServer(serverId); JoinReminderPayload payload = JoinReminderPayload .builder() @@ -161,8 +161,6 @@ public class Remind extends AbstractConditionableCommand { componentPayloadService.createButtonPayload(joinButtonId, payload, REMINDER_JOIN_BUTTON_ORIGIN, server); } - - log.info("Notifying user {} about reminder being scheduled.", event.getUser().getId()); MessageToSend messageToSend = templateService.renderEmbedTemplate(REMINDER_EMBED_KEY, remindModel, ContextUtils.serverIdOrNull(event)); return interactionService.replyMessageToSend(messageToSend, event) diff --git a/abstracto-application/abstracto-modules/remind/remind-impl/src/main/java/dev/sheldan/abstracto/remind/command/Reminders.java b/abstracto-application/abstracto-modules/remind/remind-impl/src/main/java/dev/sheldan/abstracto/remind/command/Reminders.java index d54bb6f9d..24db51adb 100644 --- a/abstracto-application/abstracto-modules/remind/remind-impl/src/main/java/dev/sheldan/abstracto/remind/command/Reminders.java +++ b/abstracto-application/abstracto-modules/remind/remind-impl/src/main/java/dev/sheldan/abstracto/remind/command/Reminders.java @@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; import dev.sheldan.abstracto.core.interaction.InteractionService; +import dev.sheldan.abstracto.core.models.ServerUser; import dev.sheldan.abstracto.core.models.database.AUser; import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.models.template.display.UserDisplay; @@ -25,7 +26,9 @@ import dev.sheldan.abstracto.remind.model.template.commands.ReminderDisplay; import dev.sheldan.abstracto.remind.model.template.commands.RemindersModel; import dev.sheldan.abstracto.remind.service.management.ReminderManagementService; import dev.sheldan.abstracto.remind.service.management.ReminderParticipantManagementService; +import java.util.ArrayList; import lombok.extern.slf4j.Slf4j; +import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; @@ -61,11 +64,22 @@ public class Reminders extends AbstractConditionableCommand { private MessageToSend getServerReminders(Long serverId, Member member) { AUserInAServer aUserInAServer = userInServerManagementService.loadOrCreateUser(member); + List reminders = getRemindersForUserInServer(aUserInAServer); + RemindersModel model = RemindersModel + .builder() + .reminders(reminders) + .userDisplay(UserDisplay.fromUser(member.getUser())) + .build(); + return templateService.renderEmbedTemplate(REMINDERS_RESPONSE_TEMPLATE, model, serverId); + } + + private List getRemindersForUserInServer(AUserInAServer aUserInAServer) { List activeReminders = reminderManagementService.getActiveRemindersForUser(aUserInAServer); + log.info("Showing {} reminders for user {} in server {}.", activeReminders.size(), aUserInAServer.getUserReference().getId(), aUserInAServer.getServerReference().getId()); List joinedReminders = reminderParticipantManagementService.getActiveReminders(aUserInAServer) .stream() .map(ReminderParticipant::getReminder) - .collect(Collectors.toList()); + .toList(); List reminders = activeReminders .stream() .map(ReminderDisplay::fromReminder) @@ -74,23 +88,25 @@ public class Reminders extends AbstractConditionableCommand { .stream() .map(ReminderDisplay::fromReminder) .peek(reminderDisplay -> reminderDisplay.setJoined(true)) - .collect(Collectors.toList())); - RemindersModel model = RemindersModel - .builder() - .reminders(reminders) - .userDisplay(UserDisplay.fromUser(member.getUser())) - .build(); - log.info("Showing {} reminders for user {} in server {}.", activeReminders.size(), aUserInAServer.getUserReference().getId(), serverId); - return templateService.renderEmbedTemplate(REMINDERS_RESPONSE_TEMPLATE, model, serverId); + .toList()); + return reminders; } - private MessageToSend getUserReminders(User user) { + private MessageToSend getUserReminders(User user, Guild guild) { AUser aUser = userManagementService.loadOrCreateUser(user.getIdLong()); + List remindersFromServer; + if(guild != null) { + AUserInAServer aUserInAServer = userInServerManagementService.loadOrCreateUser(ServerUser.fromId(guild.getIdLong(), user.getIdLong())); + remindersFromServer = getRemindersForUserInServer(aUserInAServer); + } else { + remindersFromServer = new ArrayList<>(); + } List activeReminders = reminderManagementService.getActiveUserRemindersForUser(aUser); List reminders = activeReminders .stream() .map(ReminderDisplay::fromReminder) .collect(Collectors.toList()); + reminders.addAll(remindersFromServer); RemindersModel model = RemindersModel .builder() .reminders(reminders) @@ -103,7 +119,7 @@ public class Reminders extends AbstractConditionableCommand { public CompletableFuture executeSlash(SlashCommandInteractionEvent event) { MessageToSend messageToSend; if(ContextUtils.isUserCommand(event)) { - messageToSend = getUserReminders(event.getUser()); + messageToSend = getUserReminders(event.getUser(), event.getGuild()); } else { Member member = event.getMember(); Long serverId = event.getGuild().getIdLong(); diff --git a/abstracto-application/abstracto-modules/remind/remind-impl/src/main/java/dev/sheldan/abstracto/remind/command/UnRemind.java b/abstracto-application/abstracto-modules/remind/remind-impl/src/main/java/dev/sheldan/abstracto/remind/command/UnRemind.java index 8ac9b3761..67bda36cc 100644 --- a/abstracto-application/abstracto-modules/remind/remind-impl/src/main/java/dev/sheldan/abstracto/remind/command/UnRemind.java +++ b/abstracto-application/abstracto-modules/remind/remind-impl/src/main/java/dev/sheldan/abstracto/remind/command/UnRemind.java @@ -8,12 +8,15 @@ import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig; import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService; import dev.sheldan.abstracto.core.config.FeatureDefinition; import dev.sheldan.abstracto.core.interaction.InteractionService; +import dev.sheldan.abstracto.core.models.ServerUser; import dev.sheldan.abstracto.core.service.management.UserInServerManagementService; import dev.sheldan.abstracto.core.service.management.UserManagementService; import dev.sheldan.abstracto.core.utils.ContextUtils; import dev.sheldan.abstracto.remind.config.RemindFeatureDefinition; import dev.sheldan.abstracto.remind.config.RemindSlashCommandNames; +import dev.sheldan.abstracto.remind.model.database.Reminder; import dev.sheldan.abstracto.remind.service.ReminderService; +import dev.sheldan.abstracto.remind.service.management.ReminderManagementService; import lombok.extern.slf4j.Slf4j; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import org.springframework.beans.factory.annotation.Autowired; @@ -46,11 +49,19 @@ public class UnRemind extends AbstractConditionableCommand { @Autowired private InteractionService interactionService; + @Autowired + private ReminderManagementService reminderManagementService; + @Override public CompletableFuture executeSlash(SlashCommandInteractionEvent event) { Long reminderId = slashCommandParameterService.getCommandOption(REMINDER_ID_PARAMETER, event, Long.class, Integer.class).longValue(); if(ContextUtils.isUserCommand(event)) { - reminderService.unRemind(reminderId, userManagementService.loadOrCreateUser(event.getUser().getIdLong())); + Reminder reminderToCancel = reminderManagementService.loadReminder(reminderId); + if(reminderToCancel.getUserCommand()) { + reminderService.unRemind(reminderId, userManagementService.loadOrCreateUser(event.getUser().getIdLong())); + } else { + reminderService.unRemind(reminderId, userInServerManagementService.loadOrCreateUser(ServerUser.fromId(event.getGuild().getIdLong(), event.getUser().getIdLong()))); + } } else { reminderService.unRemind(reminderId, userInServerManagementService.loadOrCreateUser(event.getMember())); }