mirror of
https://github.com/danbulant/discord.js
synced 2026-07-07 20:20:55 +00:00
Add guild.fetchMembers() 🎉🎉
This commit is contained in:
parent
727f3de45b
commit
001460acc0
5 changed files with 41 additions and 3 deletions
File diff suppressed because one or more lines are too long
|
|
@ -15,6 +15,7 @@ class GuildMemberRemoveAction extends Action {
|
||||||
if (guild) {
|
if (guild) {
|
||||||
let member = guild.members.get(data.user.id);
|
let member = guild.members.get(data.user.id);
|
||||||
if (member) {
|
if (member) {
|
||||||
|
guild.memberCount--;
|
||||||
guild._removeMember(member);
|
guild._removeMember(member);
|
||||||
this.deleted[guild.id + data.user.id] = member;
|
this.deleted[guild.id + data.user.id] = member;
|
||||||
client.emit(Constants.Events.GUILD_MEMBER_REMOVE, guild, member);
|
client.emit(Constants.Events.GUILD_MEMBER_REMOVE, guild, member);
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ class GuildMemberAddHandler extends AbstractHandler {
|
||||||
const guild = client.guilds.get(data.guild_id);
|
const guild = client.guilds.get(data.guild_id);
|
||||||
|
|
||||||
if (guild) {
|
if (guild) {
|
||||||
|
guild.memberCount++;
|
||||||
guild._addMember(data);
|
guild._addMember(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,14 +9,14 @@ class GuildMembersChunkHandler extends AbstractHandler {
|
||||||
const data = packet.d;
|
const data = packet.d;
|
||||||
const client = this.packetManager.client;
|
const client = this.packetManager.client;
|
||||||
const guild = client.guilds.get(data.guild_id);
|
const guild = client.guilds.get(data.guild_id);
|
||||||
|
|
||||||
const members = [];
|
const members = [];
|
||||||
if (guild) {
|
if (guild) {
|
||||||
for (const member of guild.members) {
|
for (const member of data.members) {
|
||||||
members.push(guild._addMember(member, true));
|
members.push(guild._addMember(member, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
guild._checkChunks();
|
||||||
client.emit(Constants.Events.GUILD_MEMBERS_CHUNK, guild, members);
|
client.emit(Constants.Events.GUILD_MEMBERS_CHUNK, guild, members);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,15 @@ class Guild {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_checkChunks() {
|
||||||
|
if (this._fetchWaiter) {
|
||||||
|
if (this.members.size === this.memberCount) {
|
||||||
|
this._fetchWaiter(this);
|
||||||
|
this._fetchWaiter = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_addMember(guildUser, noEvent) {
|
_addMember(guildUser, noEvent) {
|
||||||
if (!(guildUser.user instanceof User)) {
|
if (!(guildUser.user instanceof User)) {
|
||||||
guildUser.user = this.client.dataManager.newUser(guildUser.user);
|
guildUser.user = this.client.dataManager.newUser(guildUser.user);
|
||||||
|
|
@ -100,6 +109,7 @@ class Guild {
|
||||||
this.client.emit(Constants.Events.GUILD_MEMBER_ADD, this, member);
|
this.client.emit(Constants.Events.GUILD_MEMBER_ADD, this, member);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this._checkChunks();
|
||||||
return member;
|
return member;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -136,6 +146,7 @@ class Guild {
|
||||||
|
|
||||||
_removeMember(guildMember) {
|
_removeMember(guildMember) {
|
||||||
this.members.delete(guildMember.id);
|
this.members.delete(guildMember.id);
|
||||||
|
this._checkChunks();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -560,6 +571,31 @@ class Guild {
|
||||||
return this.client.rest.methods.getGuildInvites(this);
|
return this.client.rest.methods.getGuildInvites(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches all the members in the Guild, even if they are offline. If the Guild has less than 250 members,
|
||||||
|
* this should not be necessary.
|
||||||
|
* @param {String} [query=''] An optional query to provide when fetching members
|
||||||
|
* @returns {Promise<Guild, Error>}
|
||||||
|
*/
|
||||||
|
fetchMembers(query = '') {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
if (this._fetchWaiter) {
|
||||||
|
throw new Error('already fetching guild members');
|
||||||
|
}
|
||||||
|
this._fetchWaiter = resolve;
|
||||||
|
this.client.ws.send({
|
||||||
|
op: Constants.OPCodes.REQUEST_GUILD_MEMBERS,
|
||||||
|
d: {
|
||||||
|
guild_id: this.id,
|
||||||
|
query,
|
||||||
|
limit: 0,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
this._checkChunks();
|
||||||
|
setTimeout(() => reject(new Error('members not here in time')), 10000);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the URL to this guild's icon (if it has one, otherwise it returns null)
|
* Gets the URL to this guild's icon (if it has one, otherwise it returns null)
|
||||||
* @type {?String}
|
* @type {?String}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue