如何让discord.js机器人在有人@我时自动回复,现有代码不生效如何解决
问题排查与解决方案
你的代码没有触发效果,基本是以下几个原因导致的,按顺序排查修改即可:
- 缺少必要的权限与意图配置
discord.js v13及以上版本要求手动开启Message Content权限才能读取消息内容:
- 先进入Discord开发者平台的机器人管理页,找到
Privileged Gateway Intents分类,打开Message Content Intent开关 - 初始化客户端时必须声明对应的意图,示例代码:
const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent ] });
- 匹配逻辑过于严格
你写的全等匹配只能匹配「只发了ping你、没有其他内容、且ping的是你的用户名而非群昵称」的场景,只要有一点不符合就会触发失败。直接用官方提供的mentionsAPI检测更稳定,完整的事件监听代码如下:
const MY_USER_ID = '723821826291138611'; // 监听消息创建事件 client.on('messageCreate', message => { // 过滤机器人发送的消息,避免触发死循环 if (message.author.bot) return; // 检测消息中是否@了你 if (message.mentions.users.has(MY_USER_ID)) { message.channel.send("Hello, sup? "); } });
- 代码位置错误
确认你的逻辑代码是写在messageCreate事件的回调函数内部,写在事件外不会被触发执行。
内容的提问来源于stack exchange,提问作者Irtiza Khan Labib
相关产品推荐
相关产品推荐

