我想向机器人添加一些审核命令,但是我陷入了“静音”命令的困境:
module.exports = {
name: 'mute',
description: 'command to mute members',
execute(message, args){
if(message.member.roles.cache.some(r => r.name === "Siren")){
const role = message.guild.roles.cache.find(r => r.name === "Muted");
const user = message.mentions.members.first().id;
user.roles.add(role);
}
}
}
我不断收到错误消息:
TypeError: Cannot read property 'add' of undefined
我一直在阅读各种指南并浏览文档,但一直无法找到自己在哪里犯了错误,甚至导致了什么错误。
答案 0 :(得分:1)
首先,您尝试将角色添加到成员ID,而不是成员。如果消息中没有成员提及,您将得到空提及集合,并尝试获取未定义的ID,因为空集合的message.mentions.members.first()
返回undefined
。
第二,尝试不使用角色名称,为此使用角色ID,它更安全。并将您的if代码从if (statment) then do something
更改为 if (!statment) return reject reason
,这将有助于避免不必要的代码嵌套。
module.exports = {
name: 'mute',
description: 'command to mute members',
execute(message, args){
if(!message.member.roles.cache.has('2132132131213')) return message.reply('You can`t use mute command')
const role = message.guild.roles.cache.get('21321321312');
if (!role) return message.reply('can`t get a role')
const member = message.mentions.members.first()
if (!member) return message.reply('Pls mention a member')
member.roles.add(role).then(newMember => {
message.channel.send(`successfully muted member ${member.user}`)
})
}
}