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

Discord.js v13.6.0机器人仅被提及才响应问题修复求助

问题修复方案

核心原因

Discord.js v13及以后版本,读取消息内容(message.content)需要额外启用Message Content Intent权限,你当前代码未配置这个意图,导致机器人只能读取到被提及的消息内容。

修复步骤

  1. 开启开发者门户的权限
    登录Discord开发者门户,找到你的机器人应用,进入「Bot」页面,在「Privileged Gateway Intents」区域,打开「Message Content Intent」的开关。

  2. 修改代码的Intents配置
    在创建Discord.Client的配置中,给intents数组添加"GUILD_MESSAGE_CONTENT";如果需要读取DM消息内容,再加上"DIRECT_MESSAGES",修改后的代码如下:

    const client = new Discord.Client({
      intents: [
        "GUILDS",
        "GUILD_MESSAGES",
        "GUILD_MESSAGE_REACTIONS",
        "DIRECT_MESSAGE_REACTIONS",
        "GUILD_MESSAGE_CONTENT", // 新增读取服务器消息内容的意图
        "DIRECT_MESSAGES" // 可选:需要读取DM消息内容就加这个
      ]
    })
    
  3. 调整代码执行顺序(规避额外报错)
    你当前代码先处理参数再判断前缀,会导致非前缀消息触发无效的slice操作。把机器人判断和前缀判断移到最前面,同时处理guild可能不存在的情况(比如DM场景):

    client.on("messageCreate", async message => {
      // 先过滤机器人消息和非前缀消息,不符合直接返回
      if (message.author.bot) return;
      if (!message.content.startsWith(pre)) return;
    
      // 再处理命令参数
      var args = message.content.slice(pre.length).split(/ +/g);
      const comando = args.shift().toLowerCase();
      const cmd = message.content.slice(pre.length + comando.length + 1);
    
      // 处理服务器名称可能为空的情况(DM频道)
      const guildName = message.guild ? message.guild.name : "DM频道";
      console.log(`\n ${guildName}, chat ` + message.channel.name +`\n ${message.createdAt}\n ${message.author.username}: ${message.content}`)
    })
    

以上修改无需重写全部代码,即可解决只有被提及才显示message.content的问题,同时规避潜在报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:15:50