Ошибка типа: Не удается прочитать свойство «кэш» неопределенного объекта.необходимо выполнить исправление

#discord.js

Вопрос:

Я пытался отключить систему, но консоль отправила мне эту ошибку TypeError:

Не удается прочитать свойство » кэш » неопределенного объекта at.выполнить

А потом мой бот разбился. Я попытался удалить часть кода, но бот продолжал сбой по той же причине. Я попытался удалить «кэш», но ошибка изменилась на

Ошибка типа: Не удается прочитать свойство «имеет» неопределенного в объекте.выполнить

 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)
 
 }

}
 

Ответ №1:

Проблема в том , что переменная mencionado относится к a User , а не к a GuildMember .

User s не обладают .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!");
...
 

Еще одна вещь , которую следует отметить, заключается в том, что если эта команда будет запущена в a DMChannel , она также приведет к сбою вашего бота.

Ответ №2:

Проблема в том , что переменная mencionado относится к a User , а не к a GuildMember .

User не является участником и, следовательно, не может иметь roles свойство

Чтобы исправить это, вам нужно использовать message.mentions.members , а не message.mentions.users :

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

Еще одна вещь , которую следует отметить, заключается в том, что если эта команда выполняется в a DMChannel , она выдаст ошибку, так как канал dm не имеет участников и, следовательно, не имеет ролей.