diff --git a/build.gradle.kts b/build.gradle.kts index 93ee99849..8c0b6f85e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -41,7 +41,7 @@ dependencies { implementation("org.quartz-scheduler:quartz:2.3.2") // Webhooks - implementation("club.minnced:discord-webhooks:0.8.0") + implementation("com.github.DynxstyGIT:discord-webhooks:74301a46a0") // Lombok Annotations compileOnly("org.projectlombok:lombok:1.18.24") diff --git a/src/main/java/net/javadiscord/javabot/listener/MessageLinkListener.java b/src/main/java/net/javadiscord/javabot/listener/MessageLinkListener.java index 891b9f068..d77a2e77e 100644 --- a/src/main/java/net/javadiscord/javabot/listener/MessageLinkListener.java +++ b/src/main/java/net/javadiscord/javabot/listener/MessageLinkListener.java @@ -1,14 +1,17 @@ package net.javadiscord.javabot.listener; -import net.dv8tion.jda.api.EmbedBuilder; +import club.minnced.discord.webhook.send.component.ActionRow; +import club.minnced.discord.webhook.send.component.Button; import net.dv8tion.jda.api.JDA; -import net.dv8tion.jda.api.entities.*; +import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.GuildChannel; +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.MessageChannel; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; -import net.dv8tion.jda.api.interactions.components.buttons.Button; import net.dv8tion.jda.api.requests.RestAction; -import net.javadiscord.javabot.util.InteractionUtils; -import net.javadiscord.javabot.util.Responses; +import net.javadiscord.javabot.util.ExceptionLogger; +import net.javadiscord.javabot.util.WebhookUtil; import org.jetbrains.annotations.NotNull; import java.util.Arrays; @@ -28,27 +31,15 @@ public void onMessageReceived(@NotNull MessageReceivedEvent event) { if (event.getAuthor().isBot() || event.getAuthor().isSystem()) return; Matcher matcher = MESSAGE_URL_PATTERN.matcher(event.getMessage().getContentRaw()); if (matcher.find()) { - Optional> optional = this.parseMessageUrl(matcher.group(), event.getJDA()); + Optional> optional = parseMessageUrl(matcher.group(), event.getJDA()); optional.ifPresent(action -> action.queue( - m -> event.getMessage().replyEmbeds(this.buildUrlEmbed(m)) - .setActionRow(Button.secondary(InteractionUtils.DELETE_ORIGINAL_TEMPLATE, "\uD83D\uDDD1️"), Button.link(m.getJumpUrl(), "View Original")) - .queue(), - e -> {} + m -> WebhookUtil.ensureWebhookExists(event.getChannel().asTextChannel(), + wh -> WebhookUtil.mirrorMessageToWebhook(wh, m, m.getContentRaw(), 0, ActionRow.of(Button.link(m.getJumpUrl(), "Jump to Message"))) + ), ExceptionLogger::capture )); } } - private MessageEmbed buildUrlEmbed(Message m) { - User author = m.getAuthor(); - return new EmbedBuilder() - .setAuthor(author.getAsTag(), m.getJumpUrl(), author.getEffectiveAvatarUrl()) - .setColor(Responses.Type.DEFAULT.getColor()) - .setDescription(m.getContentRaw()) - .setTimestamp(m.getTimeCreated()) - .setFooter("#" + m.getChannel().getName()) - .build(); - } - /** * Tries to parse a Discord Message Link to the corresponding Message object. * @@ -56,7 +47,7 @@ private MessageEmbed buildUrlEmbed(Message m) { * @param jda The {@link JDA} instance. * @return An {@link Optional} containing the {@link RestAction} which retrieves the corresponding Message. */ - private Optional> parseMessageUrl(String url, JDA jda) { + private Optional> parseMessageUrl(@NotNull String url, @NotNull JDA jda) { RestAction optional = null; String[] arr = url.split("/"); String[] segments = Arrays.copyOfRange(arr, 4, arr.length); diff --git a/src/main/java/net/javadiscord/javabot/util/WebhookUtil.java b/src/main/java/net/javadiscord/javabot/util/WebhookUtil.java index b261e1a74..7a8b9f106 100644 --- a/src/main/java/net/javadiscord/javabot/util/WebhookUtil.java +++ b/src/main/java/net/javadiscord/javabot/util/WebhookUtil.java @@ -4,6 +4,8 @@ import club.minnced.discord.webhook.external.JDAWebhookClient; import club.minnced.discord.webhook.send.AllowedMentions; import club.minnced.discord.webhook.send.WebhookMessageBuilder; +import club.minnced.discord.webhook.send.component.Button; +import club.minnced.discord.webhook.send.component.LayoutComponent; import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.Message.Attachment; import net.dv8tion.jda.api.entities.TextChannel; @@ -70,14 +72,16 @@ public static void ensureWebhookExists(@NotNull TextChannel channel, Consumer mirrorMessageToWebhook(@NotNull Webhook webhook, @NotNull Message originalMessage, String newMessageContent, long threadId) { + public static CompletableFuture mirrorMessageToWebhook(@NotNull Webhook webhook, @NotNull Message originalMessage, String newMessageContent, long threadId, LayoutComponent... components) { JDAWebhookClient client = new WebhookClientBuilder(webhook.getIdLong(), webhook.getToken()) .setThreadId(threadId).buildJDA(); WebhookMessageBuilder message = new WebhookMessageBuilder().setContent(newMessageContent) .setAllowedMentions(AllowedMentions.none()) .setAvatarUrl(originalMessage.getMember().getEffectiveAvatarUrl()) .setUsername(originalMessage.getMember().getEffectiveName()); - + if (components.length > 0) { + message.addComponents(components); + } List attachments = originalMessage.getAttachments(); @SuppressWarnings("unchecked") CompletableFuture[] futures = new CompletableFuture[attachments.size()];