Discord.js机器人无消息响应问题排查及解决方案咨询
Discord.js
message 事件过时问题及替代方案 1. 代码是否过时?
是的,Discord.js v14 及更高版本已完全移除 message 事件,该事件在 v13 版本中就已被标记为废弃,当前代码无法触发消息监听逻辑。
2. 替代方案
基础文本命令实现
使用 messageCreate 事件替代原 message 事件,同时需确保机器人配置了必要权限:
client.on('messageCreate', message => { // 忽略机器人自身消息,避免触发循环 if (message.author.bot) return; if (message.content === 'test') { message.author.send('tested1'); } });
机器人无法读取消息的解决
核心原因通常是未启用Message Content Intent权限:
- 登录Discord开发者平台,进入你的应用页面
- 切换到「Bot」标签页,在「Privileged Gateway Intents」区域开启「Message Content Intent」
- 重新生成机器人邀请链接,确保勾选「View Channels」「Read Message History」「Send Messages」等必要权限
官方推荐方案:斜杠命令
Discord 官方建议使用斜杠命令替代传统文本命令,无需依赖消息内容权限,交互体验更规范:
// 在机器人就绪时注册斜杠命令(仅需执行一次) client.on('ready', async () => { // 可指定服务器注册(替换为你的服务器ID),或移除guild参数实现全局注册 const targetGuild = client.guilds.cache.get('你的服务器ID'); await targetGuild.commands.create({ name: 'test', description: '发送测试私信' }); }); // 监听斜杠命令交互 client.on('interactionCreate', async interaction => { if (!interaction.isChatInputCommand()) return; if (interaction.commandName === 'test') { // 发送仅用户可见的回复 await interaction.reply({ content: '已发送测试私信', ephemeral: true }); await interaction.user.send('tested1'); } });
内容的提问来源于stack exchange,提问作者temp
相关产品推荐
相关产品推荐

