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

Discord.js命令缺失参数未发错误消息却报控制台错误

问题分析

错误原因很明确:你现在的代码是先创建Embed,再判断参数是否完整。当参数缺失时(比如没提及用户、没写理由),Embed的字段值会变成空字符串,Discord.js会直接抛出EMBED_FIELD_VALUE错误,根本走不到你写的else分支错误提示。

修复方案

核心思路是先做参数校验,通过后再创建Embed和执行后续逻辑,避免无效代码触发错误。

修改步骤

  1. 提前校验所有必填参数:在创建Embed之前,检查member、channel、motivo是否存在,任意一项缺失就发送错误提示并终止函数。
  2. 将后续逻辑(Embed创建、发送消息、reaction收集器)放到参数校验通过的分支内:避免参数缺失时执行无效代码。
  3. 优化错误提示信息:明确告诉用户需要哪些参数,比如格式示例。

修改后的完整代码

const Discord = require('discord.js')
const { MessageEmbed } = require('discord.js');

module.exports = {
  name: 'rejeitar',
  category: 'Premium',
  description: 'rejeitar alguem na org ',
  run: async (client, message, args, user, guild) => {
    // 先检查权限
    if (!message.member.roles.cache.some(r => r.name === "[🔥] Gestor tickets")) {
      return message.channel.send("你没有使用这个命令的权限!");
    }

    // 提取参数
    const member = message.mentions.members.first();
    const channel = message.mentions.channels.first();
    const motivo = args.slice(2).join(' ');

    // 提前校验所有必填参数
    if (!member || !channel || !motivo) {
      return message.channel.send(`**ERRO**\n参数缺失!正确格式:\`.rejeitar @用户 #频道 拒绝理由\``);
    }

    // 参数校验通过后,再创建Embed
    const rejeitado2 = new MessageEmbed()
      .setColor('#ff0000')
      .setTitle('**📝❱Resultado cands**')
      .setDescription('**Rejeitado**')
      .addFields(
        { name: '**💼❱ Rejeitado pelo Staff**', value: `${message.author.tag}` },
        { name: '**🕒❱ Data**', value: `${message.createdAt}` },
        { name: '**🕒❱ Motivo**', value: `${motivo}` },
        { name: '**👨‍🦲❱ Membro Rejeitado**', value: `${member}`, inline: true },
      )
      .setTimestamp()
      .setFooter({ text: 'Bot feito por Chain#6988' });

    const rejeitado = new MessageEmbed()
      .setColor('#ff0000')
      .setTitle('**📝❱Infelizmente não foste aceite nos TDT**')
      .setDescription('**Tenta denovo mais tarte **')
      .addFields(
        { name: '**💼❱Rejeitado pelo Staff **', value: `${message.author.tag}` },
        { name: '**🕒❱Data**', value: `${message.createdAt}` },
        { name: '**🕒❱ Motivo**', value: `${motivo}` },
        { name: '**👨‍🦲❱Membro Rejeitado**', value: `${member}`, inline: true },
      )
      .setFooter({ text: 'Bot feito por Chain#6988' });

    // 发送消息
    await channel.send({ embeds: [rejeitado] });
    await channel.send(`${member}`);
    await client.channels.cache.get('1002892850385657866').send({ embeds: [rejeitado2] });
    await client.channels.cache.get('1002892850385657866').send(`${member}`);
    
    await message.react("✅");
    await message.channel.send("Clica no ✅ para apagar o ticket!");

    // 反应收集器逻辑,只在参数校验通过后执行
    function filter(reaction, user) {
      return reaction.emoji.name === '✅' && user.id === message.author.id;
    }

    const collector = message.createReactionCollector({ filter, time: 1500000, max: 1 });

    collector.on("collect", (reaction, user) => {
      channel.delete();
    });

    collector.on('end', collected => {
      if (collected.size < 1) {
        message.channel.send("o tempo acabou, vais ter de fechar o ticket manualmente");
      }
    });
  }
}

关键修改点说明

  • 把权限检查改成提前返回的形式,避免嵌套过深。
  • 参数校验放在最前面,一旦缺失直接返回错误,不会执行后续的Embed创建代码。
  • 所有业务逻辑都放到了参数校验通过的分支里,确保不会出现channel或member为undefined的情况。
  • 优化了错误提示的格式,明确给出正确命令示例。

内容的提问来源于stack exchange,提问作者Chain God

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:57:20