Skip to content

Commit d47e3cf

Browse files
committed
fix embeds for webhooks
1 parent c3ca6ed commit d47e3cf

File tree

1 file changed

+30
-5
lines changed

1 file changed

+30
-5
lines changed

src/main/java/net/javadiscord/javabot/util/WebhookUtil.java

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
import club.minnced.discord.webhook.external.JDAWebhookClient;
55
import club.minnced.discord.webhook.receive.ReadonlyMessage;
66
import club.minnced.discord.webhook.send.AllowedMentions;
7+
import club.minnced.discord.webhook.send.WebhookEmbed.EmbedField;
78
import club.minnced.discord.webhook.send.WebhookEmbedBuilder;
89
import club.minnced.discord.webhook.send.WebhookMessageBuilder;
910
import club.minnced.discord.webhook.send.component.LayoutComponent;
11+
import net.dv8tion.jda.api.entities.Member;
1012
import net.dv8tion.jda.api.entities.Message;
1113
import net.dv8tion.jda.api.entities.Message.Attachment;
1214
import net.dv8tion.jda.api.entities.MessageEmbed;
@@ -19,6 +21,7 @@
1921
import java.util.Optional;
2022
import java.util.concurrent.CompletableFuture;
2123
import java.util.function.Consumer;
24+
import java.util.function.Function;
2225

2326
/**
2427
* Contains utility methods for dealing with Discord Webhooks.
@@ -90,14 +93,16 @@ public static CompletableFuture<ReadonlyMessage> mirrorMessageToWebhook(@NotNull
9093
.setThreadId(threadId).buildJDA();
9194
WebhookMessageBuilder message = new WebhookMessageBuilder().setContent(newMessageContent)
9295
.setAllowedMentions(AllowedMentions.none())
93-
.setAvatarUrl(originalMessage.getMember().getEffectiveAvatarUrl())
94-
.setUsername(originalMessage.getMember().getEffectiveName());
96+
.setAvatarUrl(transformOrNull(originalMessage.getMember(), Member::getEffectiveAvatarUrl))
97+
.setUsername(transformOrNull(originalMessage.getMember(), Member::getEffectiveName));
9598
if (components != null && !components.isEmpty()) {
9699
message.addComponents(components);
97100
}
98-
if (embeds != null && !embeds.isEmpty()) {
99-
message.addEmbeds(embeds.stream().map(e -> WebhookEmbedBuilder.fromJDA(e).build()).toList());
101+
102+
if (embeds == null || embeds.isEmpty()) {
103+
embeds = originalMessage.getEmbeds();
100104
}
105+
message.addEmbeds(embeds.stream().map(e -> WebhookEmbedBuilder.fromJDA(e).build()).toList());
101106
List<Attachment> attachments = originalMessage.getAttachments();
102107
@SuppressWarnings("unchecked")
103108
CompletableFuture<?>[] futures = new CompletableFuture<?>[attachments.size()];
@@ -106,12 +111,32 @@ public static CompletableFuture<ReadonlyMessage> mirrorMessageToWebhook(@NotNull
106111
futures[i] = attachment.getProxy().download().thenAccept(
107112
is -> message.addFile((attachment.isSpoiler() ? "SPOILER_" : "") + attachment.getFileName(), is));
108113
}
109-
return CompletableFuture.allOf(futures).thenCompose(unused -> client.send(message.build()))
114+
return CompletableFuture.allOf(futures).thenCompose(unused -> sendMessage(client, message))
110115
.whenComplete((result, err) -> {
111116
client.close();
112117
if( err != null) {
113118
ExceptionLogger.capture(err, WebhookUtil.class.getSimpleName());
114119
}
115120
});
116121
}
122+
123+
private static <T, R> R transformOrNull(T toTransform, Function<T, R> transformer) {
124+
return toTransform == null ? null : transformer.apply(toTransform);
125+
}
126+
127+
private static List<EmbedField> transformFields(MessageEmbed embed) {
128+
return embed
129+
.getFields()
130+
.stream()
131+
.map(field -> new EmbedField(field.isInline(), field.getName(), field.getValue()))
132+
.toList();
133+
}
134+
135+
private static @NotNull CompletableFuture<ReadonlyMessage> sendMessage(JDAWebhookClient client,
136+
WebhookMessageBuilder message) {
137+
if(message.isEmpty()) {
138+
message.setContent("<empty message>");
139+
}
140+
return client.send(message.build());
141+
}
117142
}

0 commit comments

Comments
 (0)