TypeError:无法读取未定义的node.js的属性“ map”

时间:2020-03-27 11:08:04

标签: javascript node.js discord.js


我想修复它,我想当user1给user2一个角色名称zzz而user1不具有ccc角色bot时,请从user2删除角色zzz,因为user1不具有ccc角色

(node:4544) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'map' of undefined
    at pluck (C:\Dev\DiscordTickets-master\auto.js:5:18)
    at hasRole (C:\Dev\DiscordTickets-master\auto.js:9:8)
    at newMember.guild.fetchAuditLogs.then.logs (C:\Dev\DiscordTickets-master\auto.js:21:8)
    at process._tickCallback (internal/process/next_tick.js:68:7)
(node:4544) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:4544) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.


function pluck(array) {
    return array.map(function(item){ return item["name"]})
}

function hasRole(mem, role){
    if(pluck(mem.roles).includes(role)){
        return true;
    } else {
        return false;
    }
}

client.on('guildMemberUpdate', (oldMember, newMember) => {
    var cca = newMember.guild.channels.find(c => c.name === 'bots');
    newMember.guild.fetchAuditLogs().then(logs => {
        if(oldMember.roles.size < newMember.roles.size) {
            var role25 = newMember.guild.roles.find(r => r.name === 'zzz');
      var ex = logs.entries.first().executor;
      if(!hasRole(ex, "ccc"))return newMember.removeRole( role25 );  
        }
    })
});

1 个答案:

答案 0 :(得分:0)

这部分中的错误。 if(!hasRole(ex, "ccc"))return newMember.removeRole( role25 ); executor是一个用户,您需要从该用户获取成员。

像这样更好地检查角色。

client.on('guildMemberUpdate', (oldMember, newMember) => {
    var cca = newMember.guild.channels.find(c => c.name === 'bots');
    newMember.guild.fetchAuditLogs().then(logs => {
        if(oldMember.roles.size < newMember.roles.size) {
            let role25 = newMember.guild.roles.find(r => r.name === 'zzz');
            let ccRole = newMember.guild.roles.find(r => r.name === 'ccc');
            var ex = newMember.guild.members.get(logs.entries.first().executor.id);
            if(!ex.roles.has(ccRole.id))return newMember.removeRole( role25 );  
        }
    })
});