discord.js v12 权限

discord.js v12 permissions

code

我需要此代码才能为两个人工作。如果该命令被其他人使用,则发出 return。但就我而言,总是会发出 return 。为什么?

preview

{
 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>`)
}

你知道它有问题。所以仔细看看你的代码,弄清楚它实际上在做什么。或者调试它,使用调试器可以很容易地告诉你为什么会这样。这是一个简单的逻辑错误,您可以通过更改 if 语句的部分内容或简单地思考您的 if 语句当前正在做什么来在几秒钟内解决。在 Whosebug 上提出此类问题之前,请尝试了解更多有关 javascript 的信息并进行更多研究。

问题

那么让我们研究一下您的代码当前正在做什么。让我们从将您的代码“翻译”成英文开始,本质上是将其转回伪代码:

  • 获取消息作者的ID
    • 如果ID不是347030464462192651,return
    • 如果ID不是586526295366565889,return

现在让我们使用 ID 586526295366565889,看看当我们使用这个 ID 时这段代码做了什么。

  • 取留言作者ID:586526295366565889
    • 如果ID不是347030464462192651,return
      • 586526295366565889不是347030464462192651,所以我们应该return

现在让我们使用另一个 ID (347030464462192651),看看当我们使用那个 ID 时这段代码做了什么。

  • 取留言作者ID:347030464462192651
    • 如果ID不是347030464462192651,return
      • ID是347030464462192651,所以继续下面的检查
    • 如果ID不是586526295366565889,return
      • 347030464462192651不是586526295366565889,所以我们应该return

你看到这里发生了什么吗?您正在使用 || 这是一个逻辑 OR 运算符。因此,如果 if 语句((message.author.id != "347030464462192651"message.author.id != "586526295366565889")中的 任一个 为真,则代码将 return。所以你看,当 ID 不等于这两个指定 ID 中的一个时,它将 return 为真(很明显,如果你有这两个 ID 之一,它就不会等于另一个 ID)。

OR (||) 将 return 当 任一 检查为真时,AND (&&) 只会 return 当 both 检查为真时。这会将您的逻辑更改为:

  • 获取消息作者的ID
    • 如果ID不是347030464462192651,return
    • 如果ID不是586526295366565889,return

但这只是一种可能的解决方案。有许多不同的逻辑组合会产生相同的结果;目前能想到的两个,包括上面的解决方案:id != x && id != y, !(id == x || id == y).

解决方案(请先阅读问题)

下面是这两种可能的解决方案。您可以实施其中任何一个。 但请不要只是复制和粘贴这些解决方案。阅读上面的解释,了解逻辑在做什么,并确保您理解解决方案。如果你不这样做,你将来只会犯同样的错误;如果您随后再次在 Whosebug 上就同一问题寻求帮助,那将浪费我们的时间在一个非常简单的解决方案上,您在这个问题之后应该已经掌握了。

逻辑与(带 !=):

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(类似于您在简单代数问题中的做法),所有 == 将变为 !=|| 将变为&&(这是第一个解)!

希望你明白你的代码有什么问题,我希望你彻底阅读并理解我上面描述的问题。看看我在问题部分解决你问题的过程,以后自己尝试使用那个过程;您会发现它可以更轻松地解决您遇到的几乎任何逻辑问题。