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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:24:19