【问题标题】:.hasPermissions not working? Type Error: Cannot read property of undefined client?.hasPermissions 不起作用?类型错误:无法读取未定义客户端的属性?
【发布时间】:2019-12-29 00:25:01
【问题描述】:

我的朋友和我正在尝试制作 Discord Bot。我们目前正在尝试发出踢命令。但是,当我们尝试踢出没有角色且只有基本权限的成员时,它不起作用,并且 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);

【问题讨论】:

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


    【解决方案1】:

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

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

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

    请注意,如果此命令在直接消息中运行,给定的解决方案将导致问题。

    【讨论】:

    • 我有成员调用命令 (var member = msg.author.id) 但现在出现新错误:``` TypeError: member.hasPermission is not a function ``
    • 那是因为你得到了消息作者的id,那是一个字符串。从msg.author.id 中删除.id,您将获得成员对象。该对象有一个名为 hasPermission() 的函数
    • 还是说不是函数
    • message.author 返回一个 User 对象。如果您想使用hasPermission 函数,您应该使用message.member 来获取用户的GuildMember 对象。
    猜你喜欢
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2018-04-29
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    相关资源
    最近更新 更多