TypeError: Cannot read properties of undefined (reading 'hasPermission')

TypeError: Cannot read properties of undefined (reading 'hasPermission')

我又回来了,我的票务功能又回来了。这次我正在研究关闭命令。无论我尝试什么,我总是会遇到同样的错误:

TypeError: message.member.hasPermission is not a function

谁能看看代码?

    const { MessageEmbed, Collection, Permissions } = require ('discord.js');

module.exports = {
    name: 'close',
    description: "closes the ticket",
    execute(message, args, client){
        if(!message.member.hasPermission("MANAGE_CHANNELS")) return message.channel.send("Only a moderator can end a ticket!")

        if(message.member.hasPermission("MANAGE_CHANNELS")) message.channel.delete()
    }
}

根据你对我的评论的回答,你似乎只是把论点放在了错误的顺序上。

你的函数定义为

execute(client, message, args)

所以你应该用相同的顺序调用它:

try {
  command.execute(client, message, args); // `client` is first, not last
} catch (error) {
  console.error(error);
  message.channel.send('There was an error trying to execute that command!');
} 

根据您对此答案的评论,它解决了最初的问题。现在 message.member 有值了!

但是现在member.hasPermission好像不是函数。事实上它不是:当你查看 at the documentation 时,GuildMember 上没有 hasPermission 方法。

所以你必须弄清楚你到底需要什么,并查看文档以了解如何去做。

首先,您应该尝试阅读 docs and see what properties GuildMember actually has, just a quick look through it, you should be able to find a .permissions, following from that, you'll get to this doc 权限 class。从那里,您可以看到可以使用 .has 函数。所以你的最终代码应该是

message.member.permissions.has(Permissions.FLAGS.MANAGE_MESSAGES)

此代码将检查成员是否具有 MANAGE_CHANNELS 的权限,并且由于 .permissions.has() return 是一个布尔值,它将 return true 或 false,如果用户没有这样的权限它会 return 一条消息说他们不能使用命令,否则如果它会删除频道...

if(!message.member.permissions.has(Permissions.FLAGS.MANAGE_CHANNELS)) { 
  return message.channel.send("Only a moderator can end a ticket!")
} else {
  return message.channel.delete()
}