javascript - Discord.js 使用来自其他消息的附件来更新嵌入中的图像
问题描述
我正在从 Canvas 生成一张图片(它在 中imageBuffer
),并从中制作一个 MessageAttachment:
const attachment = new MessageAttachment(imageBuffer, "bufferedImg.png");
然后我创建一个像这样的嵌入对象,其中包含图像作为文件附件:
const messageObj = {
embed: {
title: "The Image",
files: [
attachment
],
image: {
url: 'attachment://bufferedImg.png'
}
}
}
我第一次将这个对象发送到文本通道 ( this.channel.send(messageObj).then(msg => this.displayMessage = msg
) 时,它会正常工作。它发布了带有图片的嵌入。但是,当我生成新图片/附件,重新创建嵌入对象,然后编辑嵌入以使用该新附件 ( this.displayMessage.edit(messageObj)
) 时,它不起作用。
图片没有更新。
我还尝试给它一个随机名称,以确保它不只是使用旧的缓存图像 - 这只是将旧图片与嵌入断开 - 但新图片没有出现。
在另一个 Stackoverflow 帖子中,有人说 Discord API不允许您更新 Message 的附件。但也有人说,你可以更改图片 url。
所以,我的想法是,用新图片作为附件发送一条新消息。然后在旧邮件中,将图片的 url 更改为新邮件的附件。例如,我发布了一条包含 bufferedImg2.png 作为附件的新消息,在链接指向的旧消息中attachment://bufferedImg.png
,我只是将其更改为使用newMessage:attachment://bufferedImg2.png
.
问题是: 如何使 url 指向另一条消息的附件?
解决方案
要使用最新的 discordjs (13.0.1) (Typescript) 实现这一点:
1. 创建并发送您要更新的第一条消息。
let embed = new MessageEmbed().setImage(INSERT_YOUR_FIRST_URL)
const displayMessage = await channel.send({ embeds: [embed] })
2. 发送第二条消息并获取 URL。如果您想保持频道清洁,可以将其发送到其他频道或服务器
const msg = await channel.send({ files: [attachment] })
const url = msg.attachments.first()?.url ?? '';
3. 编辑您的第一条消息。
embed = new MessageEmbed().setImage(url)
displayMessage.edit({ embeds: [embed] })
推荐阅读
- html - ios Swiftsoup 设置图片
- tcp - 使用 Jacobson-Karels 算法的 SRTT
- sql - 删除没有不同的重复值并更改为 NULL 值
- android - 在 android 中使用 U2Net 模型获取裁剪的图像位图
- java - netbeans自动完成?从“section.page>div.container...”到“……”一击?
- c# - 在文件 c# 中写入流时出现错误消息
- c++ - 如何在新的终端行上打印 C++ 代码
- ios - Swift DispatchSemaphore 正在冻结应用程序
- asp.net-core - .NetCore WebAPI:如何从子域获取所有请求
- python - Django包含变量不会给出预期的结果