mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-01 15:28: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);
|
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)
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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()));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user