Discord.js 使用来自其他消息的附件来更新嵌入中的图像

Posted

技术标签:

【中文标题】Discord.js 使用来自其他消息的附件来更新嵌入中的图像【英文标题】:Discord.js use Attachment from other Message to update Image in Embed 【发布时间】:2021-09-04 16:49:32 【问题描述】:

我正在从 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)) 时,它不起作用。

图片没有更新。

我还尝试给它一个随机名称,以确保它不只是使用旧的缓存图像 - 这只是将旧图片从嵌入中断开 - 但新图片没有出现。

在另一个 *** 帖子中,有人说 Discord API 不允许您更新消息的附件。但也有人说,你可以更改图片网址

所以,我的想法是,发送带有新图片作为附件的新消息。然后在旧邮件中,把图片的url改成新邮件的附件。 例如,我发布了一条包含 bufferedImg2.png 作为附件的新消息,在旧消息中,链接指向attachment://bufferedImg.png,我只是将其更改为使用newMessage:attachment://bufferedImg2.png

问题是: 如何使网址指向另一封邮件的附件?

【问题讨论】:

这能回答你的问题吗? How do I edit an image inside an embed discord? @Ant 不,它没有。这就是我所指的帖子“在另一个 *** 帖子中,有人说 Discord API 不允许您更新消息的附件。但也有人说,您可以更改图像 url。” 从我从 DiscordJS 中读到的内容,您可以更改图像的 url,但不能更改上传图像的 url,例如,如果您将链接发送到 gif,您可以更改该链接,它应该更改预览。 我建议尝试npm i discordjs/discord.js,它安装了可以执行所有新功能的 in-dev 版本,但很可能会破坏一些旧代码。 【参考方案1】:

使用最新的 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] )

【讨论】:

哦,哇,我认为我的想法很荒谬而且不可能,但这确实有效。这正是我想要的。非常感谢! 我的想法是一样的,因为 discordjs 版本之间的语法有很多变化,这使得大多数指南和教程都被弃用了。不客气,祝你好运:)。

以上是关于Discord.js 使用来自其他消息的附件来更新嵌入中的图像的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js 消息附件图片

Discord.js:检测来自 Webhook 的消息

Discord js检测其他机器人的消息

统计来自 Discord 服务器的消息 - Discord.js

Discord.js V13:如何编辑交互的消息对象?

尝试使用 discord.js 将 client.reply 作为嵌入消息发送时出现问题