使用discord.js编写ship配对命令无响应且无报错问题求助
问题原因
- 核心问题是你在命令导出的
run函数内部重复注册了message事件监听器。常规的discord.js命令框架逻辑是主文件收到message事件后匹配到对应命令,主动调用该命令的run方法,你在内部又加了一层bot.on('message')监听,相当于只有先触发一次run方法才能注册这个监听,逻辑完全闭环无法触发,自然不会有任何反应也不会报错。 - 你用
message.content == 'bia ship'做判断完全不符合使用场景,触发命令的时候你需要@配对的用户,消息内容会变成bia ship @某某,永远匹配不到这个全等条件。 - 没有处理随机值等于50的分支,这种情况会直接跳过所有发送消息的逻辑。
- 额外的冗余逻辑:你在命令文件内又重新实例化了一次
Discord.Client,还写了ready事件监听,这部分完全没用,主文件已经完成了bot实例化和上线逻辑,重复实例化只会引发未知错误。
修正后的代码
const Discord = require('discord.js'); require('discord-reply'); module.exports.run = async (bot, message, args, prefix) => { // 直接获取被艾特的用户,不需要额外监听消息事件 let user = message.mentions.users.first(); // 先校验有没有传入配对目标 if (!user) return message.channel.send('请艾特你要配对的用户'); let RN = Math.floor(Math.random() * 100); const UnLoveEmbed = new Discord.MessageEmbed() .setColor('#A14EFF') .setTitle('Uhm.. There is not a match. 💔 😭') .setDescription(`${message.author} 和 ${user} 的配对度是 ${RN}%`); const LoveEmbed = new Discord.MessageEmbed() .setColor('#A14EFF') .setTitle('Looks like we have a couple here! 💖 😍') .setDescription(`${message.author} 和 ${user} 的配对度是 ${RN}%`); // 覆盖所有数值情况,等于50时归为未匹配即可 if (RN > 50) { message.channel.send(LoveEmbed); } else { message.channel.send(UnLoveEmbed); } };
额外校验点
- 确认主文件的命令注册逻辑里,
bia ship已经正确关联到该命令文件,前缀匹配规则无异常。 - 如果你使用的是discord.js v13及以上版本,确认你在实例化Client时已经开启了
GUILD_MEMBERS、GUILD_MESSAGES等必要的网关意图,否则无法正常获取消息内容和艾特信息。
内容的提问来源于stack exchange,提问作者annaax
相关产品推荐
相关产品推荐

