You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:27:03