#java #discord #bots #discord-jda
#java #Discord #боты #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();
}
);
}
Результат:
Комментарии:
1. Попробуйте использовать TextChannel#SendMessage(File, filename).embed(eb.build()).queue()
2. Я почти уверен, что сообщение такое, потому что вы отправляете файл дважды, один раз в
EmbedBuilder#setImage(String)
и один раз вaddFile(InputStream, String)
.3. @Redi Я предполагаю, что вы предлагаете мне использовать TextChannel#sendFile, если это так, он дает точно такой же результат, как и раньше.
4. @MrBorder, дело в том, что изображение появляется дважды только после изменения сообщения. Более того, я попытался вызвать MessageAction#clearFiles после editMessage(), это ничего не меняет, файл по-прежнему отображается дважды. Возможно, последний метод нельзя использовать после публикации сообщения. В любом случае проблема остается странной, возможно, это связано с тем, как discord связывает встраиваемое изображение и файлы, и в этом случае я не смог бы ничего сделать, чтобы предотвратить это: ‘(
Ответ №1:
Ваша проблема заключается в следующей строке: .setImage(me.getImage().getUrl())
, эта строка вернет URL-адрес discord like https://media.discordapp.net/attachments/203572340280262657/877103116036759642/unknown.png
и not 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)
создаст embeddbuilder, начиная с другого встраивания. Если вы используете это, вам нужно только установить части встраивания, которые необходимо изменить, и все остальное будет сохранено.
Хотя я предпочитаю использовать channel.sendFile(...).embed(..).queue()
, как упоминал Redi, ваш способ отправки изображения одинаково правильный.
Однако, если вы хотите изменить изображение, это уже другая история. Как я упоминал ранее, discord не позволяет изменять вложения. Может возникнуть путаница с методом clearFiles, но этот метод закрывает только файлы, которые добавлены в RestAction, но не отправлены. Единственный способ изменить изображение после отправки вложения — это не использовать вложение, а использовать обычный URL-адрес с самого начала. Если вы сделаете это, вы можете изменить URL позже, что приведет к изменению изображения, поскольку оно не является вложением.