From b9c242d626ec3e1759057b4a4b9b591970db0acc Mon Sep 17 00:00:00 2001 From: Dynxsty Date: Sun, 24 Jul 2022 01:34:58 +0200 Subject: [PATCH 1/4] First pass on implementing Webhook Message Links --- .../javabot/listener/MessageLinkListener.java | 24 ++++++------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/src/main/java/net/javadiscord/javabot/listener/MessageLinkListener.java b/src/main/java/net/javadiscord/javabot/listener/MessageLinkListener.java index 891b9f068..82fe6716b 100644 --- a/src/main/java/net/javadiscord/javabot/listener/MessageLinkListener.java +++ b/src/main/java/net/javadiscord/javabot/listener/MessageLinkListener.java @@ -7,8 +7,10 @@ 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.ExceptionLogger; import net.javadiscord.javabot.util.InteractionUtils; import net.javadiscord.javabot.util.Responses; +import net.javadiscord.javabot.util.WebhookUtil; import org.jetbrains.annotations.NotNull; import java.util.Arrays; @@ -28,27 +30,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() + "\n\n" + m.getJumpUrl(), 0) + ), 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 +46,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); From f307da914f19ef813e1ddbed1265549483d1bf8f Mon Sep 17 00:00:00 2001 From: Dynxsty Date: Sun, 24 Jul 2022 02:12:59 +0200 Subject: [PATCH 2/4] Added Webhook button (doesnt work atm) --- build.gradle.kts | 2 +- .../javabot/listener/MessageLinkListener.java | 19 ++++++++++++++----- .../javadiscord/javabot/util/WebhookUtil.java | 8 ++++++-- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 93ee99849..50deb53bd 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:682d3dee98") // 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 82fe6716b..a6d507286 100644 --- a/src/main/java/net/javadiscord/javabot/listener/MessageLinkListener.java +++ b/src/main/java/net/javadiscord/javabot/listener/MessageLinkListener.java @@ -1,18 +1,19 @@ 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.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.ExceptionLogger; -import net.javadiscord.javabot.util.InteractionUtils; -import net.javadiscord.javabot.util.Responses; import net.javadiscord.javabot.util.WebhookUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import java.net.MalformedURLException; +import java.net.URL; import java.util.Arrays; import java.util.Optional; import java.util.regex.Matcher; @@ -33,12 +34,20 @@ public void onMessageReceived(@NotNull MessageReceivedEvent event) { Optional> optional = parseMessageUrl(matcher.group(), event.getJDA()); optional.ifPresent(action -> action.queue( m -> WebhookUtil.ensureWebhookExists(event.getChannel().asTextChannel(), - wh -> WebhookUtil.mirrorMessageToWebhook(wh, m, m.getContentRaw() + "\n\n" + m.getJumpUrl(), 0) + wh -> WebhookUtil.mirrorMessageToWebhook(wh, m, m.getContentRaw(), 0, ActionRow.of(Button.link(toURL(m.getJumpUrl()), "Jump to Message"))) ), ExceptionLogger::capture )); } } + private @Nullable URL toURL(String url) { + try { + return new URL(url); + } catch (MalformedURLException e) { + return null; + } + } + /** * Tries to parse a Discord Message Link to the corresponding Message object. * 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()]; From 2107a0113f9437a360c1bc65dad8b1d3ce32ff5a Mon Sep 17 00:00:00 2001 From: Dynxsty Date: Sun, 24 Jul 2022 02:53:01 +0200 Subject: [PATCH 3/4] bumped `DynxstyGIT/discord-webhooks` --- build.gradle.kts | 2 +- .../javabot/listener/MessageLinkListener.java | 10 +--------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 50deb53bd..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("com.github.DynxstyGIT:discord-webhooks:682d3dee98") + 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 a6d507286..333e31e49 100644 --- a/src/main/java/net/javadiscord/javabot/listener/MessageLinkListener.java +++ b/src/main/java/net/javadiscord/javabot/listener/MessageLinkListener.java @@ -34,20 +34,12 @@ public void onMessageReceived(@NotNull MessageReceivedEvent event) { Optional> optional = parseMessageUrl(matcher.group(), event.getJDA()); optional.ifPresent(action -> action.queue( m -> WebhookUtil.ensureWebhookExists(event.getChannel().asTextChannel(), - wh -> WebhookUtil.mirrorMessageToWebhook(wh, m, m.getContentRaw(), 0, ActionRow.of(Button.link(toURL(m.getJumpUrl()), "Jump to Message"))) + wh -> WebhookUtil.mirrorMessageToWebhook(wh, m, m.getContentRaw(), 0, ActionRow.of(Button.link(m.getJumpUrl(), "Jump to Message"))) ), ExceptionLogger::capture )); } } - private @Nullable URL toURL(String url) { - try { - return new URL(url); - } catch (MalformedURLException e) { - return null; - } - } - /** * Tries to parse a Discord Message Link to the corresponding Message object. * From 2e525d61153bdd36cfd65590c6436ab943f650f9 Mon Sep 17 00:00:00 2001 From: Dynxsty Date: Sun, 24 Jul 2022 02:54:44 +0200 Subject: [PATCH 4/4] optimize imports --- .../javadiscord/javabot/listener/MessageLinkListener.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/javadiscord/javabot/listener/MessageLinkListener.java b/src/main/java/net/javadiscord/javabot/listener/MessageLinkListener.java index 333e31e49..d77a2e77e 100644 --- a/src/main/java/net/javadiscord/javabot/listener/MessageLinkListener.java +++ b/src/main/java/net/javadiscord/javabot/listener/MessageLinkListener.java @@ -3,17 +3,17 @@ 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.requests.RestAction; import net.javadiscord.javabot.util.ExceptionLogger; import net.javadiscord.javabot.util.WebhookUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import java.net.MalformedURLException; -import java.net.URL; import java.util.Arrays; import java.util.Optional; import java.util.regex.Matcher;