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

discord.js开发机器人时message.mentions.members.first()无法识别解决

问题根因

两个核心问题会导致message.mentions.members.first()识别失败:

  • 指令拆分的正则写法错误:现有代码里的split(/\/s+/)是匹配连续的/s字符串作为分隔符,并非匹配空白字符,导致指令解析逻辑异常,连带消息内容识别出错。
  • 高版本discord.js(v13及以上)未开启必要的网关意图,或开发者后台未开启消息内容权限,导致机器人无法正常读取消息内容、解析提及成员。
修复方案

第一步:修正指令解析的正则错误

将前缀解析部分的split正则修正为匹配空白字符的正确写法,补全代码截断部分的逻辑:

if (message.author.bot) return;
if (message.content.startsWith(PREFIX)) {
    const [CMD_NAME, ...args] = message.content
        .trim()
        .substring(PREFIX.length)
        .split(/\s+/); // 修正为\s匹配任意空白,原写法的\/s是错误转义
    // 后续指令判断逻辑接在这里
}

第二步:补全kill指令的边界判断

避免未@用户时脚本抛出空值错误:

if (CMD_NAME == "kill") {
    let target = message.mentions.members.first();
    if (!target) return message.reply("请先@需要指定的目标用户");
    message.reply(`${target} is die`);
}

第三步:检查网关意图配置(仅v13+版本需要)

如果修正正则后仍无法识别提及,检查Client初始化时的意图配置,必须添加以下必要意图:

const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
    intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMessages,
        GatewayIntentBits.MessageContent, // 必须开启,否则无法读取消息内容、解析mentions
        GatewayIntentBits.GuildMembers
    ]
});

同时需要前往Discord开发者后台,在对应机器人的「Bot」设置页,打开「Message Content Intent」的开关,否则代码配置的意图不会生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:27:25