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

Node.js编写的Discord bot正常上线但不响应指令问题求助

问题排查与解决方案

核心故障原因

  • 事件名大小写错误:代码中监听的事件为Message(首字母大写),但discord.js的消息触发事件名是全小写的message,这是指令无响应的最直接原因。
  • 缺少网关意图配置:discord.js v13及以上版本初始化Client时必须声明需要使用的意图,否则无法接收消息事件。
  • 权限未开启:Discord开发者后台未给机器人开启Message Content Intent权限时,机器人无法读取用户发送的消息内容,自然无法匹配指令。
  • 邀请权限不足:机器人进服务器时未被授予发消息、读消息的基础权限,也会导致无响应。

修复后可运行代码

// v13版本写法
const { Client, Intents } = require('discord.js');
// 声明需要用到的网关意图
const client = new Client({ 
  intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MESSAGES,
    Intents.FLAGS.DIRECT_MESSAGES
  ] 
});
const prefix = '-';

client.once('ready', () => {
    console.log('BOT ist online');
});

// 修正事件名为全小写的message
client.on('message', (message) => {
    if(!message.content.startsWith(prefix) || message.author.bot) return;

    const args = message.content.slice(prefix.length).split(/ +/);
    const command = args.shift().toLowerCase();

    if(command === 'ping'){
        message.channel.send('pong!');
    } else if(command == 'youtube'){
        message.channel.send('TEST');
    }
});

client.login('你的机器人Token');

如果使用v14及以上版本,只需将意图声明部分替换为如下写法即可:

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

额外配置操作

  1. 打开Discord开发者平台,进入对应机器人应用页面,切换到Bot选项卡,找到Privileged Gateway Intents分区,开启Message Content Intent开关后保存设置。
  2. 重新生成机器人邀请链接,确保勾选Send Messages、Read Message History、Read Messages/View Channels三个基础权限,用新链接重新邀请机器人进服务器即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:45:03