我需要此代码仅适用于两个人。如果该命令被其他人使用,则发出return。但就我而言,总是发出 return 。为什么?
{
if(message.author.id != "347030464462192651" || message.author.id != "586526295366565889") {
return message.channel.send(`This command can only be used by the <@&791356969091989555>`)
}
答案 0 :(得分:0)
好的,你有这个代码:
if(message.author.id != "347030464462192651" || message.author.id != "586526295366565889") {
return message.channel.send(`This command can only be used by the <@&791356969091989555>`)
}
而且你知道它有问题。因此,请仔细查看您的代码,并弄清楚它实际上在做什么。或者调试它,使用调试器可以很容易地告诉你为什么会发生这种情况。这是一个简单的逻辑错误,您可以通过更改 if
语句的某些部分或简单地思考您的 if
语句当前正在做什么来在几秒钟内解决。在 StackOverflow 上提出类似问题之前,请尝试了解更多关于 javascript 的信息并进行更多研究。
问题
那么让我们研究一下您的代码当前在做什么。让我们首先将您的代码“翻译”成英文,实质上是将其转回伪代码:
347030464462192651
,则返回586526295366565889
,则返回现在让我们使用 ID 586526295366565889
,看看当我们使用这个 ID 时这段代码做了什么。
586526295366565889
347030464462192651
,则返回
586526295366565889
不是 347030464462192651
,所以我们应该返回现在让我们使用另一个 ID (347030464462192651
),看看当我们使用该 ID 时这段代码会做什么。
347030464462192651
347030464462192651
,则返回
347030464462192651
,所以继续下面的检查586526295366565889
,则返回
347030464462192651
不是 586526295366565889
,所以我们应该返回你看到这里发生了什么吗?您正在使用 ||
,它是一个逻辑 OR
运算符。因此,如果 if
语句((message.author.id != "347030464462192651"
和 message.author.id != "586526295366565889"
)中的检查 为真,则代码将返回。所以你看,当 ID 不等于这两个指定 ID 之一时,它会返回 true(显然如果你有这两个 ID 之一,它不会等于另一个 ID)。
OR
(||
) 会在 任一 个检查为真时返回,而 AND
(&&
) 只会在 < em>两个检查都是真的。这会将您的逻辑更改为:
347030464462192651
,则返回586526295366565889
,则返回不过,这只是一种可能的解决方案。有许多不同的逻辑组合会产生相同的结果;目前我能想到的两个,包括上面的解决方案:id != x && id != y
, !(id == x || id == y)
。
解决方案(请先阅读问题)
下面是这两种可能的解决方案。您可以实施任一。 但请不要只是复制粘贴这些解决方案。阅读上面的解释,了解逻辑在做什么,并确保您了解解决方案。如果你不这样做,你将来只会犯完全相同的错误;如果您随后再次在 StackOverflow 上就同一问题寻求帮助,那么我们将浪费时间在一个非常简单的解决方案上,而您在回答这个问题后应该已经掌握了这个解决方案。
逻辑与(使用 !=):
if(message.author.id != "347030464462192651" && message.author.id != "586526295366565889") {
return message.channel.send(`This command can only be used by the <@&791356969091989555>`)
}
逻辑非或(带 ==):
if(!(message.author.id == "347030464462192651" || message.author.id == "586526295366565889")) {
return message.channel.send(`This command can only be used by the <@&791356969091989555>`)
}
这两个解决方案实际上是同一个解决方案,以两种不同的方式编写。如果您要在第二个解决方案中“分发”NOT(类似于您在简单代数问题中的处理方式),则所有 ==
将变为 !=
,而 ||
将变为&&
(这是第一个解决方案)!
希望您了解您的代码有什么问题,并且我希望您彻底阅读并理解我上面描述的问题。在问题部分查看我用来解决您的问题的过程,并尝试在将来自己使用该过程;您会发现,解决您偶然遇到的几乎任何逻辑问题都会变得更加容易。