如何让漫游器通过ID或权限识别您

时间:2019-07-07 09:52:15

标签: javascript discord.js

我遇到了一个问题,我的机器人只能通过许可进行识别,我什至还确保我的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()之后运行代码,或者该成员具有以下权限

4 个答案:

答案 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!`)
}