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

Discord.js开发中embed页脚判断的第二个if满足条件不生效问题

问题成因
  • 条件互斥+提前return阻断:你编写的两个if判断是完全对立的布尔条件,第一个if命中后会直接执行return退出整个message事件回调函数,后面的第二个if永远没有执行机会。调换两个if的顺序后,同理后置的if会被前置的return阻断。
  • 代码块括号位置错误:你把if的执行逻辑和对应的日志打印代码块完全拆分了。当前代码里if条件命中后只会执行return,后面的console.log和if没有任何关联,不管判断结果如何都会先打印no have footer,逻辑完全错乱。
  • 存在无效判断:message.embeds.length >= 0是无效判断,数组的长度属性最小值就是0,这个条件永远成立,没有实际作用。
解决方法

将互斥条件改用if...else结构,调整代码块的括号位置,移除不必要的全局return,如果需要遍历所有embed就不要随便终止整个事件回调。修正后的参考代码如下:

const { Client, Intents } = require("discord.js-selfbot");
const client = new Client({
  intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MESSAGES,
    Intents.FLAGS.GUILD_MESSAGE_REACTIONS,
  ],
});

let token = "";

client.on("ready", () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

client.on("message", (message) => {
  const embeds = message.embeds;
  // 仅当存在embed时才执行校验
  if (embeds.length === 0) return;
  for (let i = 0; i < embeds.length; i++) {
    const currentEmbed = embeds[i];
    // 判定存在有效footer
    if (currentEmbed?.footer?.text != null) {
      console.log(`第${i+1}个embed存在footer:`, currentEmbed.footer.text);
      // 若需要处理完当前embed就跳出循环用break,不要用return终止整个事件
    } else {
      console.log(`第${i+1}个embed不存在有效footer`);
    }
  }
});
client.login(token);

优化说明:

  • 用可选链?.简化多层属性判断,避免属性不存在时报错
  • 用if...else处理互斥逻辑,避免重复编写对立条件
  • 仅当消息存在embed时才执行遍历逻辑,减少无效运算
  • 移除了会提前终止整个事件回调的错误return,可以遍历所有embed完成校验

内容的提问来源于stack exchange,提问作者Andres Avendaño Aguilar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:36:03