我遇到了一个问题,我的机器人只能通过许可进行识别,我什至还确保我的ID位于!message.author.id ==
的位置。我从!
中删除了!message.author.id
,而我的漫游器仍然依赖于权限
我尝试过
-删除!来自!message.author.id
-在返回消息后添加else
-寻找类似问题
-并搜索了Discord.JS文档。
if(!message.author.id ==`329023088517971969` || !message.member.hasPermission(['MANAGE_GUILD'])) return message.channel.send(`You don't have the permissions to do this!`)
<code here>
我希望输出是如果机器人发现我的ID(作者)与之后的值相同,它将让我通过,或者如果两个语句都为真,它将让我通过,或者如果hasPermission是的,这会让我通过。 实际结果是它仅依赖hasPermission而忽略了作者ID。
基本上
Bot应该:如果作者的ID与代码中显示的ID相同,则在if()
之后运行代码,或者该成员具有以下权限
答案 0 :(得分:1)
使用所有否定条件时,应使用logical AND运算符(&&
),而不要使用logical OR运算符(||
)。
if (message.author.id !== '329023088517971969' && !message.member.hasPermission('MANAGE_GUILD')) {
return message.channel.send(':x: Insufficient permission.')
.catch(console.error);
}
用英语,这段代码基本上说:“如果这不是作者的ID,并且他们没有许可标志,那就停止。”从逻辑上讲,这比“如果不是作者的ID 或没有权限标志”更有意义,因为如果一个为true,另一个为false,则会阻止您。< / p>
考虑以下示例:
const str = 'abcd';
const arr = ['foo'];
if (str !== 'abcd' || !arr.includes('bar')) console.log('This is WRONG.');
// false OR true OUTPUTS true
if (str !== 'abcd' && !arr.includes('bar')) console.log('This is correct (you won\'t see this).');
// false AND true OUTPUTS false
答案 1 :(得分:0)
尝试将条件放在单独的函数中返回true / false,并检查其输出是什么。可以更轻松地检查条件的哪一部分不能正常工作。
答案 2 :(得分:0)
您必须将条件更改为此
if(message.author.id !='329023088517971969' || !message.member.hasPermission(['MANAGE_GUILD'])) return message.channel.send(`You don't have the permissions to do this!`)
请注意,您输入的!message.author.id =='329023088517971969'
不正确,因此您需要使用message.author.id !='329023088517971969;'
进行更改
答案 3 :(得分:0)
我不确定我是否理解这个问题,但听起来下面的代码就足够了。我建议避免使用否定条件,因为它很难阅读。
boolean authorHasNotPermission = message.author.id !== '329023088517971969';
boolean memberHasNotPermission = !message.member.hasPermission(['MANAGE_GUILD']);
if (authorHasNotPermission || memberHasNotPermission) {
return message.channel.send(`You don't have the permissions to do this!`)
}