首页 > 解决方案 > discord.js v12 权限

问题描述

代码

我需要此代码仅适用于两个人。如果该命令被其他人使用,则返回。但就我而言,总是发出回报。为什么?

预习

{
 if(message.author.id != "347030464462192651" || message.author.id != "586526295366565889") {
 return message.channel.send(`This command can only be used by the <@&791356969091989555>`)
}

标签: permissionsdiscorddiscord.js

解决方案


好的,你有这个代码:

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 的更多信息并进行更多研究。

问题

所以让我们来看看你的代码当前在做什么。让我们首先将您的代码“翻译”成英文,本质上将其转回伪代码:

  • 取消息作者的ID
    • 如果 ID 不是347030464462192651,则返回
    • 或者
    • 如果 ID 不是586526295366565889,则返回

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

  • 获取消息作者的 ID:586526295366565889
    • 如果 ID 不是347030464462192651,则返回
      • 586526295366565889不是347030464462192651,所以我们应该返回

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

  • 获取消息作者的 ID:347030464462192651
    • 如果 ID 不是347030464462192651,则返回
      • ID是347030464462192651,所以继续下面的检查
    • 或者
    • 如果 ID 不是586526295366565889,则返回
      • 347030464462192651不是586526295366565889,所以我们应该返回

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

OR( ||) 将在其中一个检查为真时返回,AND( &&) 仅在两个检查都为真时返回。这会将您的逻辑更改为:

  • 取消息作者的ID
    • 如果 ID 不是347030464462192651,则返回
    • 如果 ID 不是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(类似于您在一个简单的代数问题中的方式),那么所有的都==将成为!=并且||将成为&&(这是第一个解决方案)!

希望您了解您的代码有什么问题,我希望您彻底阅读并理解我上面描述的问题。在问题部分查看我用来解决您的问题的过程,并尝试在将来自己使用该过程;你会发现它会让你更容易解决几乎所有你遇到的逻辑问题。


推荐阅读