类型错误:无法读取 Object.execute 处未定义的属性“缓存” - 需要修复

时间:2021-06-06 03:47:55

标签: discord.js

我试图将系统静音,但控制台向我发送了此错误 TypeError:

<块引用>

无法读取 Object.execute 处未定义的属性“缓存”

然后我的机器人崩溃了。我试图删除一些代码,但机器人继续因为同样的事情崩溃。我试图删除“缓存”但错误改为

<块引用>

TypeError: 无法读取 Object.execute 处未定义的属性“has”

const Discord = require("discord.js");
const client = new Discord.Client();
const { Client, MessageEmbed } = require("discord.js");
const ms = require('ms')
const db = require("megadb")
const muterol = new db.crearDB("muterol")

module.exports = {
    name: "mute",
    alias: [ ],
  
  async execute (client, message, args){

    var perms = message.member.hasPermission("KICK_MEMBERS")
    if(!perms) return message.channel.send("No tienes permisos suficientes para usar ese comando!")

    let time = args[1]
    if(!time) return message.channel.send("Debes decir un tiempo!")
    let timer = ms(time)

    let mencionado = message.mentions.users.first()
    if(!mencionado) return message.channel.send("Debes mencionar a alguien!")

    var razon = args[2]
    if(!razon) {
        razon = 'No especificado'
    }

    if(muterol.tiene(message.guild.id)) return message.channel.send("Este servidor no tiene ningún rol para mutear")

    let rol = await muterol.obtener(message.guild.id)

    if (mencionado.roles.cache.has(rol)) return message.channel.send("Ese usuario ya estaba muteado!")

    mencionado.roles.add(rol)

    await setTimeout(async function() {

        await mencionado.roles.remove(rol)

        await message.channel.send(`Se acabo el tiempo de mute de ${mencionado}`).catch(error => {message.channel.send(`Hubo un error inesperado! **${error}**`)
        })

    }, timer)
 
 }

}

2 个答案:

答案 0 :(得分:0)

问题在于变量 mencionado 指的是 User,而不是 GuildMember

User 不是成员,因此不能拥有 roles 属性

要解决此问题,您需要使用 message.mentions.members 而不是 message.mentions.users

let mencionado = message.mentions.members.first();

另外要注意的是,如果这个命令在 DMChannel 中运行,它会抛出一个错误,因为 dm 频道没有成员,因此没有角色。

答案 1 :(得分:-1)

问题在于变量 mencionado 指的是 User,而不是 GuildMember

User 没有 .roles 属性(因此 User.roles.cache 的结果是 TypeError: Cannot read property 'cache'...

要解决此问题,您需要使用 message.mentions.members 而不是 message.mentions.users

...
let mencionado = message.mentions.members.first();
...
if (mencionado.roles.cache.has(rol)) return message.channel.send("Ese usuario ya estaba muteado!");
...

另一件需要注意的事情是,如果在 DMChannel 中运行此命令,它也会使您的机器人崩溃。