From 790cca7278ea6cd467586c3e33b26a366d8ab3b6 Mon Sep 17 00:00:00 2001 From: Sheldan <5037282+Sheldan@users.noreply.github.com> Date: Sun, 26 Apr 2026 22:56:50 +0200 Subject: [PATCH] [AB-xxx] changing duration for reminder snooze, so that it doesnt add the duration _after_ the snooze again, the snooze is intended to be the duration at which the reminders start again fixing message embed cleanup job not being able to deal with missing channels --- .../service/MessageEmbedServiceBean.java | 21 ++++++++++++++----- .../listener/ModmailReminderListener.java | 6 +++--- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/abstracto-application/abstracto-modules/link-embed/link-embed-impl/src/main/java/dev/sheldan/abstracto/linkembed/service/MessageEmbedServiceBean.java b/abstracto-application/abstracto-modules/link-embed/link-embed-impl/src/main/java/dev/sheldan/abstracto/linkembed/service/MessageEmbedServiceBean.java index 21c6e4e33..51a385d2c 100644 --- a/abstracto-application/abstracto-modules/link-embed/link-embed-impl/src/main/java/dev/sheldan/abstracto/linkembed/service/MessageEmbedServiceBean.java +++ b/abstracto-application/abstracto-modules/link-embed/link-embed-impl/src/main/java/dev/sheldan/abstracto/linkembed/service/MessageEmbedServiceBean.java @@ -26,9 +26,11 @@ import dev.sheldan.abstracto.linkembed.service.management.MessageEmbedPostManage import lombok.extern.slf4j.Slf4j; import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel; import net.dv8tion.jda.api.interactions.commands.CommandInteraction; import org.apache.commons.lang3.tuple.Pair; +import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -191,11 +193,20 @@ public class MessageEmbedServiceBean implements MessageEmbedService { .builder() .message(embeddedMessage) .build(); - MessageToSend messageToSend = - templateService.renderEmbedTemplate(MESSAGE_EMBED_CLEANUP_REPLACEMENT_TEMPLATE, model, embeddingMessage.getServerId()); - return channelService.editMessageInAChannelFuture(messageToSend, embeddingMessage.getServerId(), embeddingMessage.getChannelId(), - embeddingMessage.getMessageId()); - }).toList(); + Optional existingChannel = + channelService.getGuildChannelFromServerOptional(embeddingMessage.getServerId(), embeddingMessage.getChannelId()); + // if the channel doesnt exist, we dont need to cleanup + if(existingChannel.isPresent()) { + MessageToSend messageToSend = + templateService.renderEmbedTemplate(MESSAGE_EMBED_CLEANUP_REPLACEMENT_TEMPLATE, model, embeddingMessage.getServerId()); + return channelService.editMessageInAChannelFuture(messageToSend, embeddingMessage.getServerId(), embeddingMessage.getChannelId(), + embeddingMessage.getMessageId()); + } else { + return null; + } + }) + .filter(Objects::nonNull) + .toList(); return FutureUtils.toSingleFutureGeneric(editList).whenComplete((unused, throwable) -> { if(throwable != null) { log.warn("Failed to cleanup embedded messages..", throwable); diff --git a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/listener/ModmailReminderListener.java b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/listener/ModmailReminderListener.java index 28ba4f947..b6986a7a0 100644 --- a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/listener/ModmailReminderListener.java +++ b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/listener/ModmailReminderListener.java @@ -75,7 +75,7 @@ public class ModmailReminderListener implements ModmailThreadActionListener { log.debug("Thread {} is closed - ignoring.", model.getThreadId()); return ModmailThreadActionListenerResult.IGNORED; } - Instant timeStampToConsider = getTimestampToUse(thread); + Instant timeStampToConsider = getTimestampToUse(thread, duration); boolean mustBeReminded = timeInPastDuration.isAfter(timeStampToConsider); if (mustBeReminded) { sendReminder(thread) @@ -97,9 +97,9 @@ public class ModmailReminderListener implements ModmailThreadActionListener { } - private static Instant getTimestampToUse(ModMailThread thread) { + private static Instant getTimestampToUse(ModMailThread thread, Duration configuredDuration) { if (thread.getRemindersSnoozedUntil() != null) { - return thread.getRemindersSnoozedUntil(); + return thread.getRemindersSnoozedUntil().minus(configuredDuration); } return getUpdatedOrCrated(thread); }