编辑带有图像附件的嵌入消息在聊天中加倍 - Discord JDA
Posted
技术标签:
【中文标题】编辑带有图像附件的嵌入消息在聊天中加倍 - Discord JDA【英文标题】:Edit an embed message with an attachment for image doubles it in chat - Discord JDA 【发布时间】:2021-03-17 04:38:53 【问题描述】:我正在尝试使用另一个嵌入来编辑消息的嵌入。当我这样做时,图像再次出现在编辑嵌入顶部的聊天中。有没有办法防止这种情况发生?
@Override
public void onGuildReady(@NotNull GuildReadyEvent event)
super.onGuildReady(event);
String fileName = "image.png";
Guild guild = event.getGuild();
InputStream in = getClass().getResourceAsStream("/someResource.png");
EmbedBuilder eb = new EmbedBuilder()
.setTitle("Title :")
.setDescription("Description")
.setImage("attachment://" + fileName)
.setColor(new Color(255, 204, 81));
guild.getTextChannels().get(0).sendMessage(eb.build()).addFile(in, fileName).queue(
message ->
MessageEmbed me = message.getEmbeds().get(0);
message.editMessage(
new EmbedBuilder()
.setTitle(me.getTitle())
.setDescription(me.getDescription())
.setImage(me.getImage().getUrl())
.setColor(me.getColor())
.build()
).queue();
);
结果:
【问题讨论】:
尝试使用TextChannel#sendMessage(File, filename).embed(eb.build()).queue() 我很确定消息是这样的,因为您要发送文件两次,一次在EmbedBuilder#setImage(String)
,一次在addFile(InputStream, String)
。
@Redi 我猜你建议我使用 TextChannel#sendFile,如果是这样,它会产生与以前完全相同的结果。
@MrBorder,问题是图像仅在消息修改后出现两次。此外,我尝试在editMessage()之后调用MessageAction#clearFiles,它没有改变任何东西,文件仍然显示两次。消息编辑后可能无法使用最后一种方法。无论如何,问题仍然很奇怪,也许它与不和谐链接嵌入图像和文件的方式有关,在这种情况下,我将无法做任何事情来阻止它:'(
【参考方案1】:
您的问题是以下行:.setImage(me.getImage().getUrl())
,该行将返回不和谐的 url,如 https://media.discordapp.net/attachments/203572340280262657/877103116036759642/unknown.png
而不是 attachment://image.png
。
嵌入中的图像因此将更改为来自 url 的图像,并且由于 discord 无法编辑或删除附件,您的初始图像将被放置在嵌入之外。
解决此问题的一种方法是使用以下代码:
guild.getTextChannels().get(0).sendFile(in, fileName).embed(eb.build()).queue(
message ->
MessageEmbed me = message.getEmbeds().get(0);
message.editMessage(
new EmbedBuilder(me)
.setTitle("New Title")
.build()
).queue();
);
new EmbedBuilder(me)
将从另一个嵌入开始创建一个嵌入构建器。如果您使用它,您只需要设置嵌入的需要更改的部分,它会保留其他所有内容。
尽管我更喜欢使用 Redi 提到的channel.sendFile(...).embed(..).queue()
,但您发送图像的方式同样正确。
但是,如果您想更改图像,那就另当别论了。正如我之前提到的,discord 不允许更改附件。 clearFiles 方法可能存在混淆,但此方法仅关闭添加到 RestAction 但未发送的文件。发送嵌入后能够更改图像的唯一方法不是使用附件,而是从一开始就使用普通 url。如果您这样做,您可以稍后更改 url,这将导致图像更改,因为它不是附件。
【讨论】:
以上是关于编辑带有图像附件的嵌入消息在聊天中加倍 - Discord JDA的主要内容,如果未能解决你的问题,请参考以下文章
使用新生成的图像自动更新/编辑嵌入消息 - Discord.js
Discord.js 使用来自其他消息的附件来更新嵌入中的图像
如何使用 Outlook 2010(无 smtp)和 python 发送带有嵌入图像(不是附件)的 HTML 格式电子邮件