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

Discord.js v14机器人无法接收DM消息的问题排查

问题排查与修复方案

核心问题分析

你的代码存在4个关键问题:

  1. client未传入执行函数:execute仅接收message参数,调用client.channels.get时client未定义,无法获取目标频道。
  2. 频道获取方式过时:Discord.js v13及以上版本已废弃channels.get(),需改用channels.fetch()确保能正确获取频道数据。
  3. 直接转发message对象错误:channel.send()不能直接传入原始message对象,需提取消息内容、附件等信息构造新消息。
  4. Intents权限缺失:机器人未开启必要的意图权限,无法接收DM消息。

修复步骤

1. 补充client参数到执行函数

修改事件文件的execute方法,同时接收client和message:

module.exports = {
    name: 'messageCreate',
    // 新增client参数
    execute(client, message) {
        // 后续代码...
    }
};

同时在加载事件的核心文件(如index.js/main.js)中,触发事件时传入client:

// 示例事件加载逻辑
client.on(event.name, (...args) => event.execute(client, ...args));

2. 修正频道获取与消息转发逻辑

改用fetch()获取频道,并正确转发DM内容及附件:

module.exports = {
    name: 'messageCreate',
    async execute(client, message) {
        // 过滤机器人自身消息,仅处理用户DM
        if (message.channel.type === 'DM' && !message.author.bot) {
            console.log('DM received');
            try {
                // 获取管理员频道
                const adminChannel = await client.channels.fetch('1026279100626767924');
                // 转发带发送者信息的消息内容
                await adminChannel.send(`收到来自 ${message.author.tag} 的DM:\n${message.content}`);
                // 如有附件,一并转发
                if (message.attachments.size > 0) {
                    const attachmentUrls = message.attachments.map(att => att.url);
                    await adminChannel.send(`附件:\n${attachmentUrls.join('\n')}`);
                }
            } catch (error) {
                console.error('转发DM失败:', error);
            }
        }
    }
};

3. 开启必要的Intents权限

在机器人客户端初始化代码中,开启DirectMessages和MessageContent意图(v14+版本必须开启MessageContent才能读取消息内容):

const { Client, GatewayIntentBits } = require('discord.js');

const client = new Client({
    intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.DirectMessages,
        GatewayIntentBits.MessageContent
    ]
});

同时需前往Discord开发者后台的机器人页面,在Privileged Gateway Intents下开启Message Content Intent权限。

4. 验证机器人频道权限

确保机器人在管理员频道拥有发送消息和上传文件(如需转发附件)的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:10:29