javascript - 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');
}
这就是代码,正如我所说,它不会给出任何错误,但如果我发送一个列入黑名单的单词,它就不会做任何事情
解决方案
您的逻辑返回它正在迭代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');
}
推荐阅读
- python - Python 的 asyncio 中如何使用 Future 对象?
- postgresql - 管理 Kubernetes 集群上的数据库迁移
- python-3.x - 将 Python 数据帧写入 AWS 红移时,DataError- 类型字符变化(256)的值太长
- vue.js - Vuejs 阻止在 contenteditable 中添加新行
- javascript - 没有收到控制台错误,但脚本不起作用
- javascript - 将购物车存储在本地存储中并在路由更改 vue 上持久化数据
- excel - VBA:如何在用户表单文本框中显示文件路径
- sql - Postgres/Redshift 按状态统计最后 5 行
- jenkins - 从版本 2.7.2 更新到 2.107.2 后,Jenkins 代理无法连接
- mysql - Laravel - 无法在查询中加入表