Discord.js机器人message.attachments无法读取消息附件问题求助
Discord.js机器人无法检测消息附件的解决办法
问题情况
在Discord中发送图片、文本、音频等附件后,Discord.js机器人的message.attachments始终无法检测到附件,messageCreate事件中判断message.attachments.size === 0时,控制台持续输出“无附件”日志。
机器人的messageCreate事件代码如下:
client.on('messageCreate', (message) => { if (message.author.bot) return; if (message.attachments.size === 0) { console.log('无附件'); return; } console.log(message.attachments); });
可能原因及解决办法
1. 机器人权限不足
机器人需要拥有Attach Files和Read Message History权限才能读取消息附件:
- 前往Discord开发者门户,在你的机器人应用的
OAuth2 -> URL Generator中,勾选bot权限并选中Attach Files、Read Message History,重新生成邀请链接并邀请机器人到目标服务器。 - 在服务器的
设置 -> 角色中,找到机器人对应的角色,确认上述权限已启用。
2. 未启用MessageContent意图(Discord.js v14+)
Discord.js v14及以上版本默认不再提供消息内容和附件的访问权限,必须显式启用MessageContent意图:
- 代码层面:创建客户端时添加该意图
const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, // 必须添加此意图 GatewayIntentBits.DirectMessages ] });
- 开发者门户设置:进入Discord开发者门户的
Bot页面,找到Privileged Gateway Intents,开启Message Content Intent开关。
3. 验证附件获取逻辑
可以尝试遍历附件集合来确认是否能读取到附件:
client.on('messageCreate', (message) => { if (message.author.bot) return; if (message.attachments.size === 0) { console.log('无附件'); return; } // 遍历输出所有附件信息 message.attachments.forEach(attachment => { console.log(`附件名称: ${attachment.name}`); console.log(`附件URL: ${attachment.url}`); }); });
内容的提问来源于stack exchange,提问作者yagyesh
相关产品推荐
相关产品推荐

