mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-01 07:27:35 +00:00
[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:
@@ -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)
|
||||
|
||||
@@ -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<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);
|
||||
log.info("Showing {} reminders for user {} in server {}.", activeReminders.size(), aUserInAServer.getUserReference().getId(), aUserInAServer.getServerReference().getId());
|
||||
List<Reminder> joinedReminders = reminderParticipantManagementService.getActiveReminders(aUserInAServer)
|
||||
.stream()
|
||||
.map(ReminderParticipant::getReminder)
|
||||
.collect(Collectors.toList());
|
||||
.toList();
|
||||
List<ReminderDisplay> 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<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<ReminderDisplay> 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<CommandResult> 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();
|
||||
|
||||
@@ -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<CommandResult> 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()));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user