mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-09 16:13:31 +01:00
fix(GuildMemberUpdate): cache incoming members & use partials if enabled (#4986)
Co-authored-by: Antonio Román <kyradiscord@gmail.com> Co-authored-by: Sugden <28943913+NotSugden@users.noreply.github.com>
This commit is contained in:
@@ -20,6 +20,7 @@ class ActionsManager {
|
|||||||
this.register(require('./InviteCreate'));
|
this.register(require('./InviteCreate'));
|
||||||
this.register(require('./InviteDelete'));
|
this.register(require('./InviteDelete'));
|
||||||
this.register(require('./GuildMemberRemove'));
|
this.register(require('./GuildMemberRemove'));
|
||||||
|
this.register(require('./GuildMemberUpdate'));
|
||||||
this.register(require('./GuildBanRemove'));
|
this.register(require('./GuildBanRemove'));
|
||||||
this.register(require('./GuildRoleCreate'));
|
this.register(require('./GuildRoleCreate'));
|
||||||
this.register(require('./GuildRoleDelete'));
|
this.register(require('./GuildRoleDelete'));
|
||||||
|
|||||||
44
src/client/actions/GuildMemberUpdate.js
Normal file
44
src/client/actions/GuildMemberUpdate.js
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const Action = require('./Action');
|
||||||
|
const { Status, Events } = require('../../util/Constants');
|
||||||
|
|
||||||
|
class GuildMemberUpdateAction extends Action {
|
||||||
|
handle(data, shard) {
|
||||||
|
const { client } = this;
|
||||||
|
if (data.user.username) {
|
||||||
|
const user = client.users.cache.get(data.user.id);
|
||||||
|
if (!user) {
|
||||||
|
client.users.add(data.user);
|
||||||
|
} else if (!user.equals(data.user)) {
|
||||||
|
client.actions.UserUpdate.handle(data.user);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const guild = client.guilds.cache.get(data.guild_id);
|
||||||
|
if (guild) {
|
||||||
|
const member = this.getMember({ user: data.user }, guild);
|
||||||
|
if (member) {
|
||||||
|
const old = member._update(data);
|
||||||
|
/**
|
||||||
|
* Emitted whenever a guild member changes - i.e. new role, removed role, nickname.
|
||||||
|
* Also emitted when the user's details (e.g. username) change.
|
||||||
|
* @event Client#guildMemberUpdate
|
||||||
|
* @param {GuildMember} oldMember The member before the update
|
||||||
|
* @param {GuildMember} newMember The member after the update
|
||||||
|
*/
|
||||||
|
if (shard.status === Status.READY) client.emit(Events.GUILD_MEMBER_UPDATE, old, member);
|
||||||
|
} else {
|
||||||
|
const newMember = guild.members.add(data);
|
||||||
|
/**
|
||||||
|
* Emitted whenever a member becomes available in a large guild.
|
||||||
|
* @event Client#guildMemberAvailable
|
||||||
|
* @param {GuildMember} member The member that became available
|
||||||
|
*/
|
||||||
|
this.client.emit(Events.GUILD_MEMBER_AVAILABLE, newMember);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = GuildMemberUpdateAction;
|
||||||
@@ -1,29 +1,5 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const { Status, Events } = require('../../../util/Constants');
|
module.exports = (client, packet, shard) => {
|
||||||
|
client.actions.GuildMemberUpdate.handle(packet.d, shard);
|
||||||
module.exports = (client, { d: data }, shard) => {
|
|
||||||
let user = client.users.cache.get(data.user.id);
|
|
||||||
if (!user && data.user.username) user = client.users.add(data.user);
|
|
||||||
if (user && data.user && data.user.username) {
|
|
||||||
if (!user.equals(data.user)) client.actions.UserUpdate.handle(data.user);
|
|
||||||
}
|
|
||||||
|
|
||||||
const guild = client.guilds.cache.get(data.guild_id);
|
|
||||||
if (guild) {
|
|
||||||
const member = guild.members.cache.get(data.user.id);
|
|
||||||
if (member) {
|
|
||||||
const old = member._update(data);
|
|
||||||
if (shard.status === Status.READY) {
|
|
||||||
/**
|
|
||||||
* Emitted whenever a guild member changes - i.e. new role, removed role, nickname.
|
|
||||||
* Also emitted when the user's details (e.g. username) change.
|
|
||||||
* @event Client#guildMemberUpdate
|
|
||||||
* @param {GuildMember} oldMember The member before the update
|
|
||||||
* @param {GuildMember} newMember The member after the update
|
|
||||||
*/
|
|
||||||
client.emit(Events.GUILD_MEMBER_UPDATE, old, member);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user