Discord.js v13.6.0机器人仅被提及才响应问题修复求助
问题修复方案
核心原因
Discord.js v13及以后版本,读取消息内容(message.content)需要额外启用Message Content Intent权限,你当前代码未配置这个意图,导致机器人只能读取到被提及的消息内容。
修复步骤
开启开发者门户的权限
登录Discord开发者门户,找到你的机器人应用,进入「Bot」页面,在「Privileged Gateway Intents」区域,打开「Message Content Intent」的开关。修改代码的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消息内容就加这个 ] })调整代码执行顺序(规避额外报错)
你当前代码先处理参数再判断前缀,会导致非前缀消息触发无效的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
相关产品推荐
相关产品推荐

