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

Discord.js v14机器人仅响应私信,服务器命令无响应求助

问题:Discord.js v14机器人仅在私信响应命令,服务器内无反应

我正在使用JavaScript和discord.js v14开发首个Discord机器人,目前它仅在私信中响应命令,在服务器中不会回复消息,恳请技术帮助。

我尝试重新安装discord.js,也安装过旧版本,但问题似乎不在库本身,因为它在私信中可以正常工作。

我的代码

//npm é um gerenciador de pacotes

const { Client, GatewayIntentBits, Partials } = require('discord.js');
const config = require('./config.json');
const { Guilds, GuildMembers, DirectMessages } = GatewayIntentBits;
const { Channel, GuildMember, Message, User, Reaction } = Partials;
const client = new Client({
  intents: [Guilds, GuildMembers, DirectMessages],
  partials: [Channel, GuildMember, Message, User, Reaction],
});

client.on('ready', () => {
  console.log(
    `Bot foi iniciado, com ${client.users.cache.size} usuários, em ${client.channels.cache.size} canais, em ${client.guilds.cache.size} servidores.`,
  );
  client.user.setActivity(
    `Eu estou em ${client.guilds.cache.size} servidores.`,
  ); //atualiza status do bot
});

client.on('guildCreate', (guild) => {
  console.log(
    `O bot entrou nos servidores: ${guild.cache.name} (id: ${guild.cache.id}). População: ${guild.cache.memberCount} membros.`,
  );
  client.user.setActivity(`Estou em ${client.guilds.cache.size} servidores!`);
}); //toda vez q o bot entra num server, esse comando é executado e atualiza o status do bot

client.on('guildDelete', (guild) => {
  console.log(
    `O bot foi removido do servidor: ${guild.cache.name} (id: ${guild.cache.id}).); client.user.setActivity(Serving ${client.guilds.cache.size} servers!`,
  );
}); //avisa caso o bot seja excluido de um servidor

client.on('messageCreate', async (message) => {
  let prefix = config.prefix; //liga o prefixo do arquivo config para comando

  if (message.author.bot) return; //nao responda outros bots
  if (!message.content.startsWith(config.prefix)) return;
  //if(message.channel.type === "dm") return; //nao responda por DM

  const args = message.content.slice(config.prefix.length).trim().split(/ +/g); //liga o prefix do config para comando
  const comando = args.shift().toLowerCase(); //parametros do comando

  if (comando === 'ping') {
    //define o comando depois do prefixo digitado pelo usuario
    const m = await message.channel.send('Ping?'); //mensagem
    m.edit(
      `:ping_pong: Pong! A latencia é ${
        m.createdTimestamp - message.createdTimestamp
      } ms. A latencia da API é ${Math.round(client.ws.ping)} ms`,
    ); //edita a propria mensagem 'm'
  }
}); //evento de mensagem do bot

client.login(config.token); //liga o bot

问题原因及修复方案

1. 缺少服务器消息相关的Intent权限

discord.js v14要求必须显式声明需要的Intent才能接收对应事件。你的机器人收不到服务器消息,是因为没有开启GuildMessages(接收服务器消息事件)和MessageContent(读取消息内容)这两个关键Intent。

修改Client初始化的intents配置:

const { Guilds, GuildMembers, DirectMessages, GuildMessages, MessageContent } = GatewayIntentBits;
const client = new Client({
  intents: [Guilds, GuildMembers, DirectMessages, GuildMessages, MessageContent],
  partials: [Channel, GuildMember, Message, User, Reaction],
});

同时,需在Discord开发者后台的机器人页面,开启Message Content Intent开关(位于Privileged Gateway Intents板块下),否则MessageContentIntent不会生效。

2. 代码中的语法错误

代码存在几处语法错误,会导致机器人运行异常:

  • guildCreate和guildDelete事件中,错误使用guild.cache.name、guild.cache.id,guild参数本身就是Guild实例,直接用guild.name、guild.id、guild.memberCount即可,guild.cache是不存在的属性。
  • guildDelete事件的console.log字符串未闭合,且client.user.setActivity的参数未加引号,会直接导致语法报错。

修正后的完整代码

//npm é um gerenciador de pacotes

const { Client, GatewayIntentBits, Partials } = require('discord.js');
const config = require('./config.json');
const { Guilds, GuildMembers, DirectMessages, GuildMessages, MessageContent } = GatewayIntentBits;
const { Channel, GuildMember, Message, User, Reaction } = Partials;
const client = new Client({
  intents: [Guilds, GuildMembers, DirectMessages, GuildMessages, MessageContent],
  partials: [Channel, GuildMember, Message, User, Reaction],
});

client.on('ready', () => {
  console.log(
    `Bot foi iniciado, com ${client.users.cache.size} usuários, em ${client.channels.cache.size} canais, em ${client.guilds.cache.size} servidores.`,
  );
  client.user.setActivity(
    `Eu estou em ${client.guilds.cache.size} servidores.`,
  ); //atualiza status do bot
});

client.on('guildCreate', (guild) => {
  console.log(
    `O bot entrou nos servidores: ${guild.name} (id: ${guild.id}). População: ${guild.memberCount} membros.`,
  );
  client.user.setActivity(`Estou em ${client.guilds.cache.size} servidores!`);
}); //toda vez q o bot entra num server, esse comando é executado e atualiza o status do bot

client.on('guildDelete', (guild) => {
  console.log(
    `O bot foi removido do servidor: ${guild.name} (id: ${guild.id}).`
  );
  client.user.setActivity(`Estou em ${client.guilds.cache.size} servidores!`);
}); //avisa caso o bot seja excluido de um servidor

client.on('messageCreate', async (message) => {
  let prefix = config.prefix; //liga o prefixo do arquivo config para comando

  if (message.author.bot) return; //nao responda outros bots
  if (!message.content.startsWith(config.prefix)) return;
  //if(message.channel.type === "dm") return; //nao responda por DM

  const args = message.content.slice(config.prefix.length).trim().split(/ +/g); //liga o prefix do config para comando
  const comando = args.shift().toLowerCase(); //parametros do comando

  if (comando === 'ping') {
    //define o comando depois do prefixo digitado pelo usuario
    const m = await message.channel.send('Ping?'); //mensagem
    m.edit(
      `:ping_pong: Pong! A latencia é ${
        m.createdTimestamp - message.createdTimestamp
      } ms. A latencia da API é ${Math.round(client.ws.ping)} ms`,
    ); //edita a propria mensagem 'm'
  }
}); //evento de mensagem do bot

client.login(config.token); //liga o bot

内容的提问来源于stack exchange,提问作者Arthur Jacintho de Oliveira Sa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:30:22