我试图将系统静音,但控制台向我发送了此错误 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)
}
}
答案 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
中运行此命令,它也会使您的机器人崩溃。