java - 编辑带有图像附件的嵌入消息在聊天中加倍 - Discord JDA
问题描述
我正在尝试使用另一个嵌入来编辑消息的嵌入。当我这样做时,图像再次出现在编辑嵌入顶部的聊天中。有没有办法防止这种情况?
@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();
}
);
}
结果:
解决方案
您的问题是以下行:.setImage(me.getImage().getUrl())
,该行将返回不和谐的 url,例如https://media.discordapp.net/attachments/203572340280262657/877103116036759642/unknown.png
而不是attachment://image.png
。
因此,嵌入中的图像将更改为来自 url 的图像,并且由于不和谐无法编辑或删除附件,您的初始图像将被放置在嵌入之外。
解决此问题的一种方法是使用以下代码:
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)
将从另一个嵌入开始创建一个嵌入构建器。如果您使用它,您只需要设置嵌入的需要更改的部分,它会保留其他所有内容。尽管我更喜欢channel.sendFile(...).embed(..).queue()
Redi 提到的使用方式,但您发送图像的方式同样正确。
但是,如果您想更改图像,那就另当别论了。正如我之前提到的,discord 不允许更改附件。clearFiles方法可能会引起混淆,但此方法仅关闭添加到RestAction但未发送的文件。发送嵌入后能够更改图像的唯一方法不是使用附件,而是从一开始就使用普通 url。如果您这样做,您可以稍后更改 url,这将导致图像更改,因为它不是附件。
推荐阅读
- python - Odoo 在 One2Many 字段中获取选定的用户 ID
- influxdb - 支持 java7 的 Infulx db java-api
- c# - 在控制器中创建新方法并尝试为其调用视图后出现错误 500
- node.js - Make call with twilio in nodejs
- spring-boot - angular 5 spring boot 1.5.8 多个文件和多个属性合并为一个对象,使用POST,请求rest api spring boot
- python - 我可以在 python 上调用其他 gui
- javascript - For Loop 在量角器测试中只执行一次
- c# - 如何在 ICollection 属性上使用 Any() 方法创建表达式树?
- html - 滑块图像被另一个 div 标签重叠
- python-3.x - python tensorflow中一种热编码的分类级别