gateway/events/guildmemberschunk.js

  1. "use strict";
  2. // models
  3. const User = require('../../models/User');
  4. const Member = require('../../models/Member');
  5. /**
  6. * Emitted when a guild requests all members to be fetched
  7. * @event Client.GUILD_MEMBERS_CHUNK
  8. * @prop {Guild} guild The guild that requested for all members to be fetced
  9. */
  10. class GuildMembersChunk {
  11. constructor() {}
  12. emit(shard, packet) {
  13. let guild = shard.client.guilds.get(packet.d.guild_id);
  14. for (var i = 0; i < packet.d.members.length; i++) {
  15. packet.d.members[i].guild = guild;
  16. guild.members.set(packet.d.members[i].user.id, new Member(shard.client, packet.d.members[i]));
  17. shard.client.users.set(packet.d.members[i].user.id, new User(shard.client, packet.d.members[i].user));
  18. };
  19. shard.totalMemberCountOfGuildMemberChunk += packet.d.members.length;
  20. shard.client.guilds.set(guild.id, guild);
  21. if (shard.totalMemberCountOfGuildMemberChunk === shard.totalMemberCount && shard.status !== 'ready') {
  22. if (shard.status === 'reconnecting') {
  23. shard.startTime = Date.now();
  24. shard.status = 'ready';
  25. shard.client.connectedShards.set(shard.id, shard);
  26. shard.client.shards.set(shard.id, shard);
  27. shard.client.emit('SHARD_READY', shard);
  28. return;
  29. }
  30. shard.startTime = Date.now();
  31. shard.client.connectedShards.set(shard.id, shard);
  32. shard.client.shards.set(shard.id, shard);
  33. shard.status = 'ready';
  34. shard.client.emit('SHARD_READY', shard);
  35. if (shard.client.connectedShards.size === shard.client.shardCount) {
  36. shard.client.startTime = Date.now();
  37. shard.client.status = 'ready';
  38. shard.client.emit('READY');
  39. };
  40. };
  41. shard.client.emit('GUILD_MEMBERS_CHUNK', guild);
  42. }
  43. };
  44. module.exports = GuildMembersChunk;