.hasPermissions不起作用?类型错误:无法读取未定义客户端的属性?

时间:2019-08-23 16:52:36

标签: javascript bots discord discord.js repl.it

我的朋友们,我正在尝试制造Discord Bot。我们目前正在尝试发出一个kick命令。但是,当我们尝试踢一个没有角色且只有基本权限的成员时,它不起作用,并且在Repl.it控制台上会出现此错误:

if(member.hasPermission("ADMINISTRATOR"))
                  ^

TypeError: Cannot read property 'hasPermission' of undefined
at Client.client.on.msg

然后是整个错误段落。

这是我们的代码:

我曾尝试寻找解决方案,但找不到任何解决方案。我发现大多数网站都使用has.Permission(),并且在GitHub上发布的内容都说使用perm.has,但显然未定义“ perm”。这是Github帖子:https://github.com/AnIdiotsGuide/discordjs-bot-guide/blob/master/understanding/roles.md

const Discord = require('discord.js');
const client = new Discord.Client();
const token = process.env.DISCORD_BOT_SECRET;

client.on('ready', () => {
  console.log("I'm in.  My prefix is &.");
  console.log(client.user.username);
});

client.on('message', msg => {
    if (msg.author.id != client.user.id)
    {
      if(msg == "&help")
      {
        msg.channel.send("Here are some commands you can do! (prefix is &):");
      }    
      if (msg.content.startsWith("&kick")) 
      {
        if(member.hasPermission("ADMINISTRATOR"))
        {
          // Easy way to get member object though mentions.
          var member = msg.mentions.members.first();
          // Kick
          member.kick().then((member) => {
            // Successmessage
            message.channel.send(member.displayName + " has been successfully kicked!");
          }).catch(() => {
             // Failmessage
            msg.channel.send("Access Denied");
          });
        }
      }
    }
});


client.login(token);

2 个答案:

答案 0 :(得分:2)

您似乎没有设置member变量,或者您使用了错误的变量来引用运行命令的用户。

您可以将member变量设置为调用该命令的成员,但是由于只使用了一次,因此最好直接使用它。

...
if (msg.content.startsWith("&kick")) 
      {
        // Get the member calling the command.
        if(msg.member.hasPermission("ADMINISTRATOR"))
...

请注意,如果此命令在Direct Messages中运行,则给定的解决方案将引起问题。

答案 1 :(得分:0)

根据该网站https://discordjs.guide/additional-info/changes-in-v12.html#permissions-haspermission-s,它说.hasPermission() / .hasPermissions()现在已更改为permissions.has('permission here')