From 0461c8e4ec2ad8d45c0ce4d9b0707e98211a2dd1 Mon Sep 17 00:00:00 2001 From: Sheldan <5037282+Sheldan@users.noreply.github.com> Date: Sat, 10 Dec 2022 12:59:47 +0100 Subject: [PATCH] [AB-77] deferring the reply for report with context interactions do not defer the interaction all the time for modal interactions --- .../ReportContextModalListener.java | 47 +++++++++++-------- .../service/ReactionReportServiceBean.java | 1 + .../ModalInteractionListenerBean.java | 2 - 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/listener/interaction/ReportContextModalListener.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/listener/interaction/ReportContextModalListener.java index 1ae93b598..ffde88883 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/listener/interaction/ReportContextModalListener.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/listener/interaction/ReportContextModalListener.java @@ -17,6 +17,7 @@ import net.dv8tion.jda.api.interactions.modals.ModalMapping; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import static dev.sheldan.abstracto.moderation.service.ReactionReportServiceBean.REACTION_REPORT_FAILURE_RESPONSE_TEMPLATE; import static dev.sheldan.abstracto.moderation.service.ReactionReportServiceBean.REACTION_REPORT_RESPONSE_TEMPLATE; @Component @@ -46,27 +47,35 @@ public class ReportContextModalListener implements ModalInteractionListener { .map(ModalMapping::getAsString) .findFirst() .orElse(null); - messageCache.getMessageFromCache(payload.getServerId(), payload.getChannelId(), payload.getMessageId()).thenAccept(cachedMessage -> { - ServerUser userReporting = ServerUser - .builder() - .serverId(model.getServerId()) - .userId(cachedMessage.getAuthor().getAuthorId()) - .isBot(cachedMessage.getAuthor().getIsBot()) - .build(); - reactionReportService.createReactionReport(cachedMessage, userReporting, context) - .thenAccept(unused -> { - interactionService.replyEmbed(REACTION_REPORT_RESPONSE_TEMPLATE, new Object(), model.getEvent()); - log.info("Handled modal for message report with id {} in guild {} in channel {} on message {}", - model.getEvent().getModalId(), payload.getServerId(), payload.getChannelId(), payload.getMessageId()); - componentPayloadManagementService.deletePayload(payload.getModalId()); - }).exceptionally(throwable -> { - log.error("Failed to create reaction report in server {} on message {} in channel {} with interaction.", - model.getServerId(), cachedMessage.getMessageId(), model.getEvent().getChannel().getIdLong(), throwable); + model.getEvent().deferReply(true).queue(interactionHook -> { + messageCache.getMessageFromCache(payload.getServerId(), payload.getChannelId(), payload.getMessageId()).thenAccept(cachedMessage -> { + ServerUser userReporting = ServerUser + .builder() + .serverId(model.getServerId()) + .userId(cachedMessage.getAuthor().getAuthorId()) + .isBot(cachedMessage.getAuthor().getIsBot()) + .build(); + reactionReportService.createReactionReport(cachedMessage, userReporting, context) + .thenAccept(unused -> { + interactionService.sendMessageToInteraction(REACTION_REPORT_RESPONSE_TEMPLATE, new Object(), interactionHook); + log.info("Handled modal for message report with id {} in guild {} in channel {} on message {}", + model.getEvent().getModalId(), payload.getServerId(), payload.getChannelId(), payload.getMessageId()); + componentPayloadManagementService.deletePayload(payload.getModalId()); + }).exceptionally(throwable -> { + interactionService.sendMessageToInteraction(REACTION_REPORT_FAILURE_RESPONSE_TEMPLATE, new Object(), interactionHook); + log.error("Failed to create reaction report in server {} on message {} in channel {} with interaction.", + model.getServerId(), cachedMessage.getMessageId(), model.getEvent().getChannel().getIdLong(), throwable); + return null; + }); + }).exceptionally(throwable -> { + interactionService.sendMessageToInteraction(REACTION_REPORT_FAILURE_RESPONSE_TEMPLATE, new Object(), interactionHook); + log.error("Failed to load reported message for reporting message {} in channel {} with context.", + model.getEvent().getMessage().getIdLong(), model.getEvent().getChannel().getIdLong(), throwable); return null; }); - }).exceptionally(throwable -> { - log.error("Failed to load reported message.", throwable); - return null; + }, throwable -> { + log.error("Failed to acknowledge modal interaction for report context modal listener in guild {} on message {}.", model.getServerId(), + model.getEvent().getMessage() != null ? model.getEvent().getMessage().getIdLong() : 0, throwable); }); return ModalInteractionListenerResult.ACKNOWLEDGED; diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/service/ReactionReportServiceBean.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/service/ReactionReportServiceBean.java index 3875049f8..7d92436fa 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/service/ReactionReportServiceBean.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/service/ReactionReportServiceBean.java @@ -71,6 +71,7 @@ public class ReactionReportServiceBean implements ReactionReportService { private static final String REACTION_REPORT_TEMPLATE_KEY = "reactionReport_notification"; public static final String REACTION_REPORT_MODAL_ORIGIN = "reportMessageModal"; public static final String REACTION_REPORT_RESPONSE_TEMPLATE = "reactionReport_response"; + public static final String REACTION_REPORT_FAILURE_RESPONSE_TEMPLATE = "reactionReport_failure_response"; public static final String REACTION_REPORT_COOLDOWN_RESPONSE_TEMPLATE = "reactionReport_cooldown_response"; public static final String REACTION_REPORT_OWN_MESSAGE_RESPONSE_TEMPLATE = "reactionReport_own_message_response"; diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/interaction/modal/listener/ModalInteractionListenerBean.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/interaction/modal/listener/ModalInteractionListenerBean.java index cdb7e0d70..c30bceb8d 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/interaction/modal/listener/ModalInteractionListenerBean.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/interaction/modal/listener/ModalInteractionListenerBean.java @@ -62,8 +62,6 @@ public class ModalInteractionListenerBean extends ListenerAdapter { @Override public void onModalInteraction(@Nonnull ModalInteractionEvent event) { if(listenerList == null) return; - // TODO remove this and make this configurable - event.deferEdit().queue(); CompletableFuture.runAsync(() -> self.executeListenerLogic(event), modalInteractionExecutor).exceptionally(throwable -> { log.error("Failed to execute listener logic in modal interaction event.", throwable); return null;