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

求助:Discord机器人无法接收消息且无法响应消息请求的解决方案

解决Discord机器人无法接收消息&回复失效的问题

看起来你的机器人核心问题出在Intent配置和Discord开发者后台的权限设置上,我帮你拆解一下问题和修复步骤:

1. 修复Intent配置错误

你的代码里的intents数组有两个明显问题:

  • 末尾多了一个空字符串'',这会导致Intent解析异常
  • 缺少Guilds这个基础Intent,discord.js v14及以上版本要求必须声明这个Intent才能正常处理服务器内的消息

同时,你声明的一些Intent其实是不必要的(比如GuildMessageReactions、GuildMessageTyping),可以精简一下,只保留必要的:

const Discord = require('discord.js');
// 修正后的Intent配置,移除空元素+添加Guilds基础Intent
const client = new Discord.Client({ 
  intents: ['Guilds', 'GuildMessages', 'MessageContent'] 
})

2. 开启Discord开发者后台的特权Intent

MessageContent属于特权网关Intent,必须手动在Discord开发者门户开启:

  • 登录Discord开发者平台,找到你的机器人应用
  • 进入Bot页面,下滑到Privileged Gateway Intents区域
  • 开启Message Content Intent的开关,然后保存更改

3. 优化消息处理逻辑(可选)

你的代码里messageCreate事件一开始就发送pong,然后才判断前缀和机器人消息,这会导致机器人对所有消息都回复pong,包括自己发的消息(虽然后面有message.author.bot判断,但顺序不对),可以调整逻辑顺序:

client.on('messageCreate', message => {
  // 先过滤机器人自身的消息,避免循环回复
  if(message.author.bot) return;
  
  // 对所有非机器人消息回复pong(如果需要的话)
  message.channel.send('pong');
  console.log('hoi');

  // 前缀命令处理
  const prefix = '!';
  if(!message.content.startsWith(prefix)) return;
  
  const args = message.content.slice(prefix.length).split(/ +/);
  const command = args.shift().toLowerCase();
  
  if(command === 'ping'){
    message.channel.send('pong');
  }
});

最后验证步骤

  1. 确保机器人邀请到服务器时,勾选了Send Messages等必要的文本权限
  2. 重启机器人,重新登录token
  3. 在服务器里发消息,看控制台是否输出hoi,同时机器人是否回复pong

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:07:48