Discord.js开发问题:机器人在线但不响应消息
Discord机器人登录成功但不响应消息的解决办法
以下是导致问题的核心原因及修复方案:
问题点与修复步骤
- 事件名称过时:Discord.js v13及以上版本已弃用
message事件,需改用messageCreate事件监听消息。 - 缺少消息内容读取权限:要获取消息文本内容,必须添加
MessageContent意图,同时需在Discord开发者后台的机器人页面开启"Message Content Intent"开关。 - 冷却变量未初始化且逻辑颠倒:
userCooldown未声明初始化,且冷却逻辑写反——初始状态应允许用户触发指令,触发后进入冷却,冷却结束后恢复可触发状态。
修复后的完整代码
const Discord = require("discord.js") const TOKEN = "MY TOKEN" // 初始化冷却状态存储对象 const userCooldown = {}; const client = new Discord.Client({ intents: [ "Guilds", "GuildMessages", "MessageContent" // 添加读取消息内容的必要意图 ] }) client.on("ready", () => { console.log(`Logged in as ${client.user.tag}`) }) // 使用正确的messageCreate事件监听消息 client.on("messageCreate", message => { // 忽略机器人自身发送的消息,避免循环触发 if (message.author.bot) return; if (message.content.includes('ping')) { // 检查用户是否不在冷却状态 if (!userCooldown[message.author.id]) { message.reply('Pong'); // 标记用户进入冷却 userCooldown[message.author.id] = true; setTimeout(() => { // 5秒冷却结束后恢复可触发状态 userCooldown[message.author.id] = false; }, 5000) } } }) client.login(TOKEN)
额外注意事项
- 登录Discord开发者平台,找到你的机器人应用,进入「Bot」页面,在「Privileged Gateway Intents」区域开启「Message Content Intent」,否则代码中的意图配置无效。
- 确保机器人在目标服务器中拥有读取消息和发送消息的权限。
内容的提问来源于stack exchange,提问作者Miqi
相关产品推荐
相关产品推荐

