javascript - 为什么 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
解决方案
我认为这是一个已知问题,它的工作原理是这样的,因为 Discord 会同时发送两者PRESENCE_UPDATE
以及GUILD_MEMBER_UPDATE
用户信息是否更改。
首先,在PRESENCE_UPDATE
discord.js 上确定更改并将其应用于缓存,并且GUILD_MEMBER_UPDATE
基础用户已经从 更改,PRESENCE_UPDATE
因此旧用户不能与旧成员一起发出。因此,每次用户更新时,GUILD_MEMBER_UPDATE
都不会保存“旧”数据,而只会保存更新的版本。这就是oldMember.user.displayAvatarURL()
同理newMember.user.displayAvatarURL()
。
我知道这可能不是您期望的答案。