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

Discord.js机器人无法读取消息及自定义状态异常求助

解决你的Discord机器人问题:Ping-Pong无响应、状态不显示、前缀失效

看起来你的机器人遇到了几个典型的Discord.js版本适配问题,我帮你逐一拆解解决:

核心问题1:机器人无法读取消息、不响应Ping命令

这几乎都是因为Discord.js v13及以上要求启用特权网关意图导致的——即使机器人有管理员权限,Discord也会限制它读取消息内容,除非你开启了对应的意图。

解决步骤:

  1. 打开Discord开发者平台,进入你的机器人应用页面,找到「Privileged Gateway Intents」板块,把Message Content Intent的开关打开,然后点击保存。
  2. 修改代码里的客户端初始化部分,添加必要的意图配置:
// 替换原来的const client = new Discord.Client();
const client = new Discord.Client({
  intents: [
    Discord.IntentsBitField.Flags.Guilds,
    Discord.IntentsBitField.Flags.GuildMessages,
    Discord.IntentsBitField.Flags.MessageContent
  ]
});
  1. 还有一个容易忽略的点:Discord.js v13+ 已经把message事件改成了messageCreate!你原来的代码用client.on("message", ...)不会触发任何消息事件,必须换成messageCreate。

问题2:自定义状态无法显示

状态不显示主要也是意图缺失(Guilds意图是更新状态的必要条件,上面的配置已经包含了),另外可以给状态设置代码加上错误捕获,方便排查问题:

client.on('ready', async () => {
  console.log('Ready!');
  try {
    // 明确指定活动类型,避免默认值可能的问题
    await client.user.setActivity('Running a test, hopefully.', { type: Discord.ActivityType.Playing });
    console.log('状态设置成功!');
  } catch (error) {
    console.error('设置状态失败:', error);
  }
});

问题3:无法识别;前缀的消息

先确认你的config.json格式完全正确,没有多余的空格或语法错误:

{
  "prefix": ";",
  "token": "你的机器人令牌"
}

只要前面的消息读取问题解决了,前缀判断逻辑是有效的,你也可以把message.content.indexOf(config.prefix) !== 0换成更直观的!message.content.startsWith(config.prefix),效果一致。

完整修复后的代码

把上面的修改整合起来,最终代码如下:

const Discord = require('discord.js');
const client = new Discord.Client({
  intents: [
    Discord.IntentsBitField.Flags.Guilds,
    Discord.IntentsBitField.Flags.GuildMessages,
    Discord.IntentsBitField.Flags.MessageContent
  ]
});
const config = require("./config.json");

client.on('ready', async () => {
  console.log('Ready!');
  try {
    await client.user.setActivity('Running a test, hopefully.', { type: Discord.ActivityType.Playing });
    console.log('Custom status set successfully!');
  } catch (err) {
    console.error('Error setting status:', err);
  }
});

client.on("messageCreate", (message) => {
  if (message.author.bot) return;
  if (!message.content.startsWith(config.prefix)) return;

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

  if (command === "ping") {
    message.channel.send('Pong.')
      .catch(err => console.error('Error sending Pong message:', err));
  }
});

client.login(config.token)
  .catch(err => console.error('Failed to login:', err));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:16:08