【问题标题】:Discord.js roleUpdate eventDiscord.js 角色更新事件
【发布时间】:2021-04-07 02:59:31
【问题描述】:

我正在尝试做的是一个简单的事件记录器,它将在其中输出,例如角色是否丢失/获得了权限。所以我想到了比较两者,然后简单地将它们相减,所以它只显示一个特定的权限。相反,我得到 1 个未定义(权限丢失,检查下面的代码)而其他只是空白,因为根本没有文本(权限获得,检查下面的代码)。我已经做过了,比如公会成员失去角色或获得角色,但它的工作方式不同。

我做错了什么,我该如何从这里继续?

代码:

bot.on("roleUpdate", async (oldRole, newRole) => {


if (oldRole.permissions !== newRole.permissions) {

  if (oldRole.permissions > newRole.permissions) {
    //Permission lost
    let oldPerms = oldRole.serialize()
    let newPerms = newRole.serialize()
    var permLost = Object.keys(oldPerms, newPerms).find(perm => perm[newPerms] - oldPerms)
    const embed = new Discord.RichEmbed()
    .setAuthor(`Role changed permissions`)
    .setColor("#ffc500")
    .setDescription(`**${newRole.toString()} has lost the ${permLost} permission**`)
    .setFooter(`ID: ${newRole.id} ????`)
    .setTimestamp()
    logchannel.send(embed).catch()

} else if (oldRole.permissions < newRole.permissions) {
    //Permission given
    let oldPerms = oldRole.serialize()
    let newPerms = newRole.serialize()
    var permGained = Object.keys(oldPerms, newPerms).filter(perm => perm[newPerms] - oldPerms)
    const embed2 = new Discord.RichEmbed()
    .setAuthor(`Role changed permissions`)
    .setColor("#ffc500")
    .setDescription(`**${newRole.toString()} has been given the ${permGained} permission**`)
    .setFooter(`ID: ${newRole.id} ????`)
    .setTimestamp()
    logchannel.send(embed2).catch()

  }
}

});

【问题讨论】:

    标签: discord discord.js


    【解决方案1】:

    我更改了您的一些代码,我认为一切都很好。

    
    client.on("roleUpdate", async (oldRole, newRole) => {
    
        if (oldRole.permissions !== newRole.permissions) {
    
            const embed = new Discord.RichEmbed()
                .setAuthor(`Role changed permissions`)
                .setColor("#ffc500")
                .setFooter(`ID: ${newRole.id} ?`)
                .setTimestamp()
    
            const oldPerms = oldRole.serialize();
            const newPerms = newRole.serialize();
    
            const permUpdated = [];
    
            for (const [key, element] of Object.entries(oldPerms)) {
                if (newPerms[key] !== element) permUpdated.push(key);
            }
    
            if (oldRole.permissions > newRole.permissions) {
                //Permission lost
    
                embed.setDescription(`**${newRole.toString()} has lost the ${permUpdated.join(", ")} permission**`)
                logchannel.send(embed).catch()
    
            } else if (oldRole.permissions < newRole.permissions) {
                //Permission given
    
                embed.setDescription(`**${newRole.toString()} has been given the ${permUpdated.join(", ")} permission**`)
                logchannel.send(embed).catch()
    
            }
        }
    
    });
    

    我更改了您的新嵌入...因为这些嵌入之间的唯一区别是描述,因此您只需创建一个嵌入并在发送前设置描述。

    -------

    【讨论】:

    • 我添加和删除了权限 ADMINISTRADOR,这意味着角色的所有权限相同。
    猜你喜欢
    • 2020-10-25
    • 2021-07-01
    • 2021-08-28
    • 2021-01-28
    • 2017-08-25
    • 2021-02-07
    • 2020-08-24
    • 2020-12-31
    • 1970-01-01
    相关资源
    最近更新 更多