You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在discord.js中获取awaitMessages函数收集的消息附件URL

解决Discord.js中awaitMessages收集消息后获取附件URL的问题

我明白你遇到的困扰了——用awaitMessages收集到消息后,转成JSON就拿不到附件URL,但直接打印消息能看到attachments是个Collection对吧?这是因为JSON序列化会丢失Discord.js对象的细节,咱们直接操作原始对象就行:

正确的获取方式

你不需要把收集到的消息转成JSON,直接利用Discord.js的Collection方法来获取附件:

获取单条消息的第一个附件URL

// 假设collectedMessages是awaitMessages返回的Collection
const targetMessage = collectedMessages.first(); // 获取第一条收集到的消息
if (targetMessage && targetMessage.attachments.size > 0) {
  const firstAttachment = targetMessage.attachments.first();
  const imageUrl = firstAttachment.url;
  console.log(imageUrl); // 这就是你要的图片URL啦
}

遍历所有收集到的消息和附件

如果需要处理多条消息里的所有附件,可以这样遍历:

collectedMessages.forEach(message => {
  // 遍历当前消息的所有附件
  message.attachments.forEach(attachment => {
    console.log(`附件URL: ${attachment.url}`);
    // 这里可以添加你的业务逻辑
  });
});

为什么之前的方法失效?

你用collectedMessages.toJSON()得到的结果里,attachments变成了ID数组,这是因为JSON序列化只能保存简单的数据类型。而Discord.js里的Message.attachments本质是一个Collection(带Map特性的集合),里面存储的是完整的MessageAttachment对象,这些对象包含url等属性——但转成JSON时,这些对象会被简化成ID,所以拿不到URL。

直接操作收集到的Message对象和它的attachments Collection,就能直接访问到附件的所有属性啦。

内容的提问来源于stack exchange,提问作者Rijak Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 15:59:10