首页 > 解决方案 > 为什么 oldMember 和 newMember 的头像 url 在 guildMemberUpdate 中是相同的?(不和谐.js)

问题描述

当有人更改个人资料图片时,我试图在频道中发送消息,但它不起作用,因为 oldUser 和 newUser 的 url 总是相同(两次是新头像 url),我对昵称更改做了类似的事情,实际上运作良好..

bot.on("guildMemberUpdate", (oldMember, newMember) => {
    //checks if the change is the nickname
    if (oldMember.displayName != newMember.displayName) {
        console.log(`(NEW ACTIVITY): @${oldMember.user.username} changed username. @${oldMember.displayName} was the username before update, @${newMember.displayName} is the username after update`);
        //build embed
        messages.usernameUpdate(bot, oldMember, newMember);
    }

    console.log(oldMember.user.displayAvatarURL());
    console.log(newMember.user.displayAvatarURL());
    //checks if the change is the profile picture
    if (oldMember.user.displayAvatarURL() != newMember.user.displayAvatarURL()) {
        console.log(`(NEW ACTIVITY): @${newMember.user.username} updated profile picture`);
        //build embed
        messages.photoUpdate(bot, oldMember, newMember);
    }
});

更改头像后登录,oldMember 和 newMember 头像 url 相同(两个是新头像 url):

https://cdn.discordapp.com/avatars/826073829302206525/4eab82e784ca3caa8ed1ba18631541b2.webp
https://cdn.discordapp.com/avatars/826073829302206525/4eab82e784ca3caa8ed1ba18631541b2.webp

标签: javascriptdiscorddiscord.js

解决方案


我认为这是一个已知问题,它的工作原理是这样的,因为 Discord 会同时发送两者PRESENCE_UPDATE以及GUILD_MEMBER_UPDATE用户信息是否更改。

首先,在PRESENCE_UPDATEdiscord.js 上确定更改并将其应用于缓存,并且GUILD_MEMBER_UPDATE基础用户已经从 更改,PRESENCE_UPDATE因此旧用户不能与旧成员一起发出。因此,每次用户更新时,GUILD_MEMBER_UPDATE都不会保存“旧”数据,而只会保存更新的版本。这就是oldMember.user.displayAvatarURL()同理newMember.user.displayAvatarURL()

我知道这可能不是您期望的答案。


推荐阅读