mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-19 04:53:30 +01:00
cleanup(Client): guard emitting GMU and PU on user updates (#5655)
This commit is contained in:
@@ -27,7 +27,7 @@ class GuildMemberUpdateAction extends Action {
|
|||||||
* @param {GuildMember} oldMember The member before the update
|
* @param {GuildMember} oldMember The member before the update
|
||||||
* @param {GuildMember} newMember The member after the update
|
* @param {GuildMember} newMember The member after the update
|
||||||
*/
|
*/
|
||||||
if (shard.status === Status.READY) client.emit(Events.GUILD_MEMBER_UPDATE, old, member);
|
if (shard.status === Status.READY && !member.equals(old)) client.emit(Events.GUILD_MEMBER_UPDATE, old, member);
|
||||||
} else {
|
} else {
|
||||||
const newMember = guild.members.add(data);
|
const newMember = guild.members.add(data);
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class PresenceUpdateAction extends Action {
|
|||||||
this.client.emit(Events.GUILD_MEMBER_AVAILABLE, member);
|
this.client.emit(Events.GUILD_MEMBER_AVAILABLE, member);
|
||||||
}
|
}
|
||||||
guild.presences.add(Object.assign(data, { guild }));
|
guild.presences.add(Object.assign(data, { guild }));
|
||||||
if (member && this.client.listenerCount(Events.PRESENCE_UPDATE)) {
|
if (member && this.client.listenerCount(Events.PRESENCE_UPDATE) && !member.presence.equals(oldPresence)) {
|
||||||
/**
|
/**
|
||||||
* Emitted whenever a guild member's presence (e.g. status, activity) is changed.
|
* Emitted whenever a guild member's presence (e.g. status, activity) is changed.
|
||||||
* @event Client#presenceUpdate
|
* @event Client#presenceUpdate
|
||||||
|
|||||||
@@ -346,6 +346,29 @@ class GuildMember extends Base {
|
|||||||
return this.guild.members.fetch({ user: this.id, cache: true, force });
|
return this.guild.members.fetch({ user: this.id, cache: true, force });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether this guild member equals another guild member. It compares all properties, so for most
|
||||||
|
* comparison it is advisable to just compare `member.id === member2.id` as it is significantly faster
|
||||||
|
* and is often what most users need.
|
||||||
|
* @param {GuildMember} member The member to compare with
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
equals(member) {
|
||||||
|
return (
|
||||||
|
member instanceof this.constructor &&
|
||||||
|
this.id === member.id &&
|
||||||
|
this.partial === member.partial &&
|
||||||
|
this.guild.id === member.guild.id &&
|
||||||
|
this.joinedTimestamp === member.joinedTimestamp &&
|
||||||
|
this.lastMessageID === member.lastMessageID &&
|
||||||
|
this.lastMessageChannelID === member.lastMessageChannelID &&
|
||||||
|
this.nickname === member.nickname &&
|
||||||
|
this.pending === member.pending &&
|
||||||
|
(this._roles === member._roles ||
|
||||||
|
(this._roles.length === member._roles.length && this._roles.every((role, i) => role === member._roles[i])))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When concatenated with a string, this automatically returns the user's mention instead of the GuildMember object.
|
* When concatenated with a string, this automatically returns the user's mention instead of the GuildMember object.
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
|
|||||||
Reference in New Issue
Block a user