Discord.JS机器人在线但无响应问题排查求助
问题分析与解决
你的机器人在线但不响应指令,核心原因是你混用了Discord.js原生代码和另一类机器人框架(比如Botkit)的API——controller.hears是Botkit专属的消息监听方法,Discord.js本身并不支持这个语法,所以你的指令监听逻辑完全没有被执行,机器人自然不会响应。
修正方案:改用纯Discord.js写法
把原来的module.exports部分替换成Discord.js原生的消息监听逻辑,同时注意适配Discord.js的版本差异:
完整修正代码
// require the discord.js module const Discord = require('discord.js'); // create a new Discord client const client = new Discord.Client({ intents: [ Discord.Intents.FLAGS.GUILDS, Discord.Intents.FLAGS.GUILD_MESSAGES, Discord.Intents.FLAGS.MESSAGE_CONTENT // Discord.js v13+必须添加这个意图才能读取消息内容 ] }); // 机器人就绪事件 client.once('ready', () => { console.log('Ready!'); }); // 监听消息创建事件(Discord.js v13+用messageCreate,v12及以下用message) client.on('messageCreate', (message) => { // 忽略机器人自己的消息,避免循环 if (message.author.bot) return; // 判断是否触发!appreciates指令 if (message.content.startsWith('!appreciates')) { let sender = message.author; // 获取被@的非机器人用户(和原逻辑一致) let recipient = message.mentions.users .filter(user => !user.bot) .last(); let responses = [ `Hey, ${sender.username}, I appreciate you! :heart_eyes:`, `Hey, ${sender.username}, I appreciate your enthusiasm! :muscle:`, `Hey, ${sender.username}, I appreciate your commands! :wink:`, `Hey, ${sender.username}, I appreciate your participation! :grinning:`, `Hey, ${sender.username}, I appreciate all your works! :blush:`, `Hey, ${sender.username}, I appreciate everything you do. :star_struck:` ]; let response = responses[Math.floor(Math.random() * responses.length)]; // 回复消息 message.reply(response); } }); client.login('app token');
关键注意事项
- Intent权限:如果你的Discord.js版本是v13或更高,必须在Discord开发者平台的机器人设置里开启
Message Content Intent权限,同时在代码的客户端配置中声明这个意图(如上面代码所示),否则机器人无法读取消息内容。 - 版本适配:如果用的是v12及以下版本,把
messageCreate换成message,并且不需要配置MESSAGE_CONTENT意图。 - 避免框架混用:Discord.js和Botkit是不同的机器人开发框架,不要把两者的代码混写,选择其中一种即可。
内容的提问来源于stack exchange,提问作者R4356th
相关产品推荐
相关产品推荐

