|
| 1 | +'use strict'; |
| 2 | + |
| 3 | +const Action = require('./Action'); |
| 4 | +const { Status, Events } = require('../../util/Constants'); |
| 5 | + |
| 6 | +class GuildMemberUpdateAction extends Action { |
| 7 | + handle(data, shard) { |
| 8 | + const { client } = this; |
| 9 | + if (data.user.username) { |
| 10 | + const user = client.users.cache.get(data.user.id); |
| 11 | + if (!user) { |
| 12 | + client.users.add(data.user); |
| 13 | + } else if (!user.equals(data.user)) { |
| 14 | + client.actions.UserUpdate.handle(data.user); |
| 15 | + } |
| 16 | + } |
| 17 | + |
| 18 | + const guild = client.guilds.cache.get(data.guild_id); |
| 19 | + if (guild) { |
| 20 | + const member = this.getMember({ user: data.user }, guild); |
| 21 | + if (member) { |
| 22 | + const old = member._update(data); |
| 23 | + /** |
| 24 | + * Emitted whenever a guild member changes - i.e. new role, removed role, nickname. |
| 25 | + * Also emitted when the user's details (e.g. username) change. |
| 26 | + * @event Client#guildMemberUpdate |
| 27 | + * @param {GuildMember} oldMember The member before the update |
| 28 | + * @param {GuildMember} newMember The member after the update |
| 29 | + */ |
| 30 | + if (shard.status === Status.READY) client.emit(Events.GUILD_MEMBER_UPDATE, old, member); |
| 31 | + } else { |
| 32 | + const newMember = guild.members.add(data); |
| 33 | + /** |
| 34 | + * Emitted whenever a member becomes available in a large guild. |
| 35 | + * @event Client#guildMemberAvailable |
| 36 | + * @param {GuildMember} member The member that became available |
| 37 | + */ |
| 38 | + this.client.emit(Events.GUILD_MEMBER_AVAILABLE, newMember); |
| 39 | + } |
| 40 | + } |
| 41 | + } |
| 42 | +} |
| 43 | + |
| 44 | +module.exports = GuildMemberUpdateAction; |
0 commit comments