[AB-xxx] merging user and guild reminders for handling in reminders and unremind command

fixing issue with creating reminder in DMs
This commit is contained in:
Sheldan
2025-03-31 23:29:33 +02:00
parent 899afa82c4
commit 6c9cb39ad6
3 changed files with 40 additions and 15 deletions

View File

@@ -126,7 +126,6 @@ public class Remind extends AbstractConditionableCommand {
String durationString = slashCommandParameterService.getCommandOption(DURATION_PARAMETER, event, Duration.class, String.class); String durationString = slashCommandParameterService.getCommandOption(DURATION_PARAMETER, event, Duration.class, String.class);
Duration duration = ParseUtils.parseDuration(durationString); Duration duration = ParseUtils.parseDuration(durationString);
String reminderText = null; String reminderText = null;
Long serverId = event.getGuild().getIdLong();
if(slashCommandParameterService.hasCommandOption(REMIND_TEXT_PARAMETER, event)) { if(slashCommandParameterService.hasCommandOption(REMIND_TEXT_PARAMETER, event)) {
reminderText = slashCommandParameterService.getCommandOption(REMIND_TEXT_PARAMETER, event, String.class, String.class); reminderText = slashCommandParameterService.getCommandOption(REMIND_TEXT_PARAMETER, event, String.class, String.class);
} }
@@ -151,6 +150,7 @@ public class Remind extends AbstractConditionableCommand {
.build(); .build();
if(ContextUtils.isNotUserCommand(event)) { if(ContextUtils.isNotUserCommand(event)) {
Long serverId = event.getGuild().getIdLong();
AServer server = serverManagementService.loadServer(serverId); AServer server = serverManagementService.loadServer(serverId);
JoinReminderPayload payload = JoinReminderPayload JoinReminderPayload payload = JoinReminderPayload
.builder() .builder()
@@ -161,8 +161,6 @@ public class Remind extends AbstractConditionableCommand {
componentPayloadService.createButtonPayload(joinButtonId, payload, REMINDER_JOIN_BUTTON_ORIGIN, server); componentPayloadService.createButtonPayload(joinButtonId, payload, REMINDER_JOIN_BUTTON_ORIGIN, server);
} }
log.info("Notifying user {} about reminder being scheduled.", event.getUser().getId()); log.info("Notifying user {} about reminder being scheduled.", event.getUser().getId());
MessageToSend messageToSend = templateService.renderEmbedTemplate(REMINDER_EMBED_KEY, remindModel, ContextUtils.serverIdOrNull(event)); MessageToSend messageToSend = templateService.renderEmbedTemplate(REMINDER_EMBED_KEY, remindModel, ContextUtils.serverIdOrNull(event));
return interactionService.replyMessageToSend(messageToSend, event) return interactionService.replyMessageToSend(messageToSend, event)

View File

@@ -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.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition; import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService; 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.AUser;
import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.template.display.UserDisplay; 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.model.template.commands.RemindersModel;
import dev.sheldan.abstracto.remind.service.management.ReminderManagementService; import dev.sheldan.abstracto.remind.service.management.ReminderManagementService;
import dev.sheldan.abstracto.remind.service.management.ReminderParticipantManagementService; import dev.sheldan.abstracto.remind.service.management.ReminderParticipantManagementService;
import java.util.ArrayList;
import lombok.extern.slf4j.Slf4j; 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.Member;
import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; 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) { private MessageToSend getServerReminders(Long serverId, Member member) {
AUserInAServer aUserInAServer = userInServerManagementService.loadOrCreateUser(member); AUserInAServer aUserInAServer = userInServerManagementService.loadOrCreateUser(member);
List<ReminderDisplay> 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<ReminderDisplay> getRemindersForUserInServer(AUserInAServer aUserInAServer) {
List<Reminder> activeReminders = reminderManagementService.getActiveRemindersForUser(aUserInAServer); List<Reminder> activeReminders = reminderManagementService.getActiveRemindersForUser(aUserInAServer);
log.info("Showing {} reminders for user {} in server {}.", activeReminders.size(), aUserInAServer.getUserReference().getId(), aUserInAServer.getServerReference().getId());
List<Reminder> joinedReminders = reminderParticipantManagementService.getActiveReminders(aUserInAServer) List<Reminder> joinedReminders = reminderParticipantManagementService.getActiveReminders(aUserInAServer)
.stream() .stream()
.map(ReminderParticipant::getReminder) .map(ReminderParticipant::getReminder)
.collect(Collectors.toList()); .toList();
List<ReminderDisplay> reminders = activeReminders List<ReminderDisplay> reminders = activeReminders
.stream() .stream()
.map(ReminderDisplay::fromReminder) .map(ReminderDisplay::fromReminder)
@@ -74,23 +88,25 @@ public class Reminders extends AbstractConditionableCommand {
.stream() .stream()
.map(ReminderDisplay::fromReminder) .map(ReminderDisplay::fromReminder)
.peek(reminderDisplay -> reminderDisplay.setJoined(true)) .peek(reminderDisplay -> reminderDisplay.setJoined(true))
.collect(Collectors.toList())); .toList());
RemindersModel model = RemindersModel return reminders;
.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);
} }
private MessageToSend getUserReminders(User user) { private MessageToSend getUserReminders(User user, Guild guild) {
AUser aUser = userManagementService.loadOrCreateUser(user.getIdLong()); AUser aUser = userManagementService.loadOrCreateUser(user.getIdLong());
List<ReminderDisplay> remindersFromServer;
if(guild != null) {
AUserInAServer aUserInAServer = userInServerManagementService.loadOrCreateUser(ServerUser.fromId(guild.getIdLong(), user.getIdLong()));
remindersFromServer = getRemindersForUserInServer(aUserInAServer);
} else {
remindersFromServer = new ArrayList<>();
}
List<Reminder> activeReminders = reminderManagementService.getActiveUserRemindersForUser(aUser); List<Reminder> activeReminders = reminderManagementService.getActiveUserRemindersForUser(aUser);
List<ReminderDisplay> reminders = activeReminders List<ReminderDisplay> reminders = activeReminders
.stream() .stream()
.map(ReminderDisplay::fromReminder) .map(ReminderDisplay::fromReminder)
.collect(Collectors.toList()); .collect(Collectors.toList());
reminders.addAll(remindersFromServer);
RemindersModel model = RemindersModel RemindersModel model = RemindersModel
.builder() .builder()
.reminders(reminders) .reminders(reminders)
@@ -103,7 +119,7 @@ public class Reminders extends AbstractConditionableCommand {
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) { public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
MessageToSend messageToSend; MessageToSend messageToSend;
if(ContextUtils.isUserCommand(event)) { if(ContextUtils.isUserCommand(event)) {
messageToSend = getUserReminders(event.getUser()); messageToSend = getUserReminders(event.getUser(), event.getGuild());
} else { } else {
Member member = event.getMember(); Member member = event.getMember();
Long serverId = event.getGuild().getIdLong(); Long serverId = event.getGuild().getIdLong();

View File

@@ -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.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.config.FeatureDefinition; import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService; 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.UserInServerManagementService;
import dev.sheldan.abstracto.core.service.management.UserManagementService; import dev.sheldan.abstracto.core.service.management.UserManagementService;
import dev.sheldan.abstracto.core.utils.ContextUtils; import dev.sheldan.abstracto.core.utils.ContextUtils;
import dev.sheldan.abstracto.remind.config.RemindFeatureDefinition; import dev.sheldan.abstracto.remind.config.RemindFeatureDefinition;
import dev.sheldan.abstracto.remind.config.RemindSlashCommandNames; 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.ReminderService;
import dev.sheldan.abstracto.remind.service.management.ReminderManagementService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -46,11 +49,19 @@ public class UnRemind extends AbstractConditionableCommand {
@Autowired @Autowired
private InteractionService interactionService; private InteractionService interactionService;
@Autowired
private ReminderManagementService reminderManagementService;
@Override @Override
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) { public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
Long reminderId = slashCommandParameterService.getCommandOption(REMINDER_ID_PARAMETER, event, Long.class, Integer.class).longValue(); Long reminderId = slashCommandParameterService.getCommandOption(REMINDER_ID_PARAMETER, event, Long.class, Integer.class).longValue();
if(ContextUtils.isUserCommand(event)) { 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 { } else {
reminderService.unRemind(reminderId, userInServerManagementService.loadOrCreateUser(event.getMember())); reminderService.unRemind(reminderId, userInServerManagementService.loadOrCreateUser(event.getMember()));
} }