如何在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
相关产品推荐
相关产品推荐

