#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 не имеет участников и, следовательно, не имеет ролей.