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
相关产品推荐
相关产品推荐

