discord.js v12 权限

时间:2020-12-26 11:26:35

标签: permissions discord discord.js

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

1 个答案:

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

问题

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

  • 获取消息作者的 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,所以我们应该返回

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

OR (||) 会在 任一 个检查为真时返回,而 AND (&&) 只会在 < em>两个检查都是真的。这会将您的逻辑更改为:

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

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