【发布时间】:2021-03-19 15:17:48
【问题描述】:
作为我正在制作的机器人的一部分,我正在制作一个config 命令,该命令允许用户切换其服务器中的某些功能。为此,我使用了一个名为 config.json 的简单 JSON 文件来存储服务器的 ID 以及用于表示功能的几个布尔变量:
{
"servers": [
{
"id": INSERT_ID,
"delete": true
},
{
"id": INSERT_ID,
"delete": true
},
{
"id": INSERT_ID,
"delete": false
}
]
}
我正在尝试获取它,因此当config 命令运行时,机器人会通过此列表查找与消息来源服务器的 ID 匹配的服务器。我已经制作了这个代码来做到这一点:
let data = fs.readFileSync(__dirname + "/config.json");
let config = JSON.parse(data);
let found = false;
for(let server of config.servers) {
if (server.id === message.guild.id.toString()) {
found = true;
if (server.delete) {
server.delete = false;
message.reply("`Message Delete` has been toggled to `False`");
} else {
server.delete = true;
message.reply("`Message Delete` has been toggled to `True`");
}
}
}
if (!found) {
message.reply("I couldn't find this server in the database!");
}
let newData = JSON.stringify(config)
fs.writeFileSync(__dirname + "/config.jsom", newData);
如果我 console.log message.guild.id 它会打印一个与存储在我的 JSON 文件中的字符串匹配的数字,但是 IF 语句 if (server.id === message.guild.id) 的计算结果为 false,我不知道为什么。
【问题讨论】:
-
尝试使用
==而不是===。 -
@ChrisG 哇,效果很好,但我不知道为什么。你介意解释一下吗?
-
@Mastermind
message对象是message事件返回的对象,即bot.on("message", message => {}); -
简而言之:
==测试相等性,===测试身份。由于双方都有不同对象的属性,除非两个属性确实指向内存中的同一个对象,否则身份测试永远不会为真。
标签: javascript json discord.js