permissions - 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>`)
}
解决方案
好的,你有这个代码:
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 不是
现在让我们使用 ID 586526295366565889
,看看当我们使用这个 ID 时这段代码做了什么。
- 获取消息作者的 ID:
586526295366565889
- 如果 ID 不是
347030464462192651
,则返回586526295366565889
不是347030464462192651
,所以我们应该返回
- 如果 ID 不是
现在让我们使用另一个 ID ( 347030464462192651
),看看当我们使用该 ID 时这段代码做了什么。
- 获取消息作者的 ID:
347030464462192651
- 如果 ID 不是
347030464462192651
,则返回- ID是
347030464462192651
,所以继续下面的检查
- ID是
- 或者
- 如果 ID 不是
586526295366565889
,则返回347030464462192651
不是586526295366565889
,所以我们应该返回
- 如果 ID 不是
你看到这里发生了什么吗?您正在使用||
which 是一个逻辑OR
运算符。因此,如果语句 (和) 中的任一检查为真,则代码将返回。所以你看,当 ID 不等于这两个指定 ID 中的一个时,它会返回 true(很明显,如果你有这两个 ID 之一,它不会等于另一个 ID)。if
(message.author.id != "347030464462192651"
message.author.id != "586526295366565889"
而OR
( ||
) 将在其中一个检查为真时返回,AND
( &&
) 仅在两个检查都为真时返回。这会将您的逻辑更改为:
- 取消息作者的ID
- 如果 ID 不是
347030464462192651
,则返回 - 和
- 如果 ID 不是
586526295366565889
,则返回
- 如果 ID 不是
不过,这只是一种可能的解决方案。有许多不同的逻辑组合产生相同的结果;目前我能想到的两个,包括上面的解决方案: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(类似于您在一个简单的代数问题中的方式),那么所有的都==
将成为!=
并且||
将成为&&
(这是第一个解决方案)!
希望您了解您的代码有什么问题,我希望您彻底阅读并理解我上面描述的问题。在问题部分查看我用来解决您的问题的过程,并尝试在将来自己使用该过程;你会发现它会让你更容易解决几乎所有你遇到的逻辑问题。
推荐阅读
- linux - linux从文件夹中删除文件
- performance - .NET COre kestrel 请求处理性能失败
- perl - 如何在 Perl 中的 Soap::Lite 上正确死掉
- java - Hibernate ReturningWork的目的是什么
界面? - go - 使用参数从 Golang 调用 Apps Script API 函数?
- azure-keyvault - Azure KeyVault .net SDK 即 KeyVaultClient 是否会在出现暂时性错误时执行,例如。瞬态网络故障
- codeigniter-3 - 为什么从 codeigniter 2.6 迁移到 codeigniter 3 后出现 DB 错误?
- java - 将外部应用程序嵌入到 fxml
- javascript - 我的 loading.gif 在按钮点击时不显示
- mysql - 有没有办法在 mysql8 中导入数据库文件(.MYD .MYI)?