通过提及Discord bot静音命令

时间:2020-07-29 11:29:36

标签: javascript discord.js

我想向机器人添加一些审核命令,但是我陷入了“静音”命令的困境:

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

我一直在阅读各种指南并浏览文档,但一直无法找到自己在哪里犯了错误,甚至导致了什么错误。

1 个答案:

答案 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}`)
            })
    }
}