diff --git a/src/client/actions/GuildMemberUpdate.js b/src/client/actions/GuildMemberUpdate.js index 1f8d260d2..28396856c 100644 --- a/src/client/actions/GuildMemberUpdate.js +++ b/src/client/actions/GuildMemberUpdate.js @@ -10,7 +10,7 @@ class GuildMemberUpdateAction extends Action { const user = client.users.cache.get(data.user.id); if (!user) { client.users._add(data.user); - } else if (!user.equals(data.user)) { + } else if (!user._equals(data.user)) { client.actions.UserUpdate.handle(data.user); } } diff --git a/src/client/actions/PresenceUpdate.js b/src/client/actions/PresenceUpdate.js index 2e34c212f..a09688ba4 100644 --- a/src/client/actions/PresenceUpdate.js +++ b/src/client/actions/PresenceUpdate.js @@ -10,7 +10,7 @@ class PresenceUpdateAction extends Action { if (!user) return; if (data.user?.username) { - if (!user.equals(data.user)) this.client.actions.UserUpdate.handle(data.user); + if (!user._equals(data.user)) this.client.actions.UserUpdate.handle(data.user); } const guild = this.client.guilds.cache.get(data.guild_id); diff --git a/src/structures/User.js b/src/structures/User.js index 0abe9e141..2cc7af49c 100644 --- a/src/structures/User.js +++ b/src/structures/User.js @@ -247,16 +247,35 @@ class User extends Base { * @returns {boolean} */ equals(user) { - let equal = + return ( user && this.id === user.id && this.username === user.username && this.discriminator === user.discriminator && this.avatar === user.avatar && + this.flags?.bitfield === user.flags?.bitfield && this.banner === user.banner && - this.accentColor === user.accentColor; + this.accentColor === user.accentColor + ); + } - return equal; + /** + * Compares the user with an API user object + * @param {APIUser} user The API user object to compare + * @returns {boolean} + * @private + */ + _equals(user) { + return ( + user && + this.id === user.id && + this.username === user.username && + this.discriminator === user.discriminator && + this.avatar === user.avatar && + this.flags?.bitfield === user.public_flags && + ('banner' in user ? this.banner === user.banner : true) && + ('accent_color' in user ? this.accentColor === user.accent_color : true) + ); } /** diff --git a/typings/index.d.ts b/typings/index.d.ts index a5dfabbc2..827493276 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -1982,6 +1982,8 @@ export class Typing extends Base { export class User extends PartialTextBasedChannel(Base) { protected constructor(client: Client, data: RawUserData); + private _equals(user: APIUser): boolean; + public accentColor: number | null; public avatar: string | null; public banner: string | null;