为什么我用Discord.js开发的机器人前缀N!无法正常生效?
问题原因排查
- 事件名称已弃用:discord.js v13及以上版本已经移除原
message事件,替换为messageCreate事件,你当前注册的message事件不会被触发,需要修改事件监听逻辑。 - 缺少必要的网关意图:你当前配置的intents仅包含
DIRECT_MESSAGES和GUILDS,要接收服务器内的消息内容,必须额外添加GUILD_MESSAGES意图;如果需要读取消息内容做前缀匹配,还要额外添加MESSAGE_CONTENT意图。 - 未开启特权意图:Discord要求所有需要读取用户消息内容的机器人,必须在Discord开发者后台的Bot设置页面手动开启Message Content Intent,否则机器人无法获取用户发送的消息文本,前缀判断逻辑会直接失效。
- 权限不足:检查机器人在对应服务器/频道是否拥有发送消息的权限,是否被频道角色或权限设置禁言。
修复后参考代码
const Discord = require("discord.js"); const config = require("./config.json"); const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES", "DIRECT_MESSAGES", "MESSAGE_CONTENT"] }); const prefix = "N!"; // 替换为messageCreate事件 client.on("messageCreate", function(message) { if (message.author.bot) return; if (!message.content.startsWith(prefix)) return; const commandBody = message.content.slice(prefix.length); const args = commandBody.split(' '); const command = args.shift().toLowerCase(); if (command === "ping") { const timeTaken = Date.now() - message.createdTimestamp; message.reply(`Pong! This message had a latency of ${timeTaken}ms.`); } }); client.login(config.BOT_TOKEN);
内容的提问来源于stack exchange,提问作者Somebody
相关产品推荐
相关产品推荐

