首页 > 解决方案 > Discord.js 黑名单代码没有做任何事情

问题描述

所以我正在为列入黑名单的单词制作这段代码,但它不起作用。它没有给出任何错误,但不起作用。怎么修?

let blacklisted = ['blacklisted', 'right'];
    let foundInText = false;//
    for(const i in blacklisted) {
        if (message.content.toLowerCase().includes(blacklisted[i])) foundInText = true;
    }
    if (foundInText === true) {
        message.delete();
        message.channel.send('no just no');
    }

这就是代码,正如我所说,它不会给出任何错误,但如果我发送一个列入黑名单的单词,它就不会做任何事情

标签: javascriptdiscord.js

解决方案


您的逻辑返回它正在迭代for ... in的当前对象的实际值,而不是当前值的数组索引。blacklisted因此,您的代码试图找到blacklisted["blacklisted"]or的值,该值blacklisted["right"]将是未定义的并且总是返回 false。

要使这与您当前的代码一起工作,您可以改为检查消息内容是否包含i.

if (message.content.toLowerCase().includes(i)) foundInText = true;

但是,即使它确实在列表开头的某处找到了列入黑名单的单词,由于在break找到文本时缺少关键字,您的代码仍将遍历整个列表(您无需进一步迭代列表如果您已经找到匹配项)。您可以使用some数组函数true大大简化您的代码,该函数检查数组的任何元素是否满足给定条件,一旦找到任何满足条件的元素,或者false没有找到任何元素,就会立即返回。

let blacklisted = ["blacklisted", "right"]

let foundInText = blacklisted.some(blacklistWord => message.content.toLowerCase().includes(blacklistWord))

if (foundInText) { // No need for === true on boolean variables
    message.delete();
    message.channel.send('no just no');
}

推荐阅读