mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-19 13:03:31 +01:00
fix(GuildMemberManager): refactor fetchMany (#6328)
This commit is contained in:
@@ -378,13 +378,8 @@ class GuildMemberManager extends CachedManager {
|
|||||||
query,
|
query,
|
||||||
time = 120e3,
|
time = 120e3,
|
||||||
nonce = SnowflakeUtil.generate(),
|
nonce = SnowflakeUtil.generate(),
|
||||||
force = false,
|
|
||||||
} = {}) {
|
} = {}) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!query && !limit && !presences && !user_ids && !force) {
|
|
||||||
resolve(this.cache);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!query && !user_ids) query = '';
|
if (!query && !user_ids) query = '';
|
||||||
if (nonce.length > 32) throw new RangeError('MEMBER_FETCH_NONCE_LENGTH');
|
if (nonce.length > 32) throw new RangeError('MEMBER_FETCH_NONCE_LENGTH');
|
||||||
this.guild.shard.send({
|
this.guild.shard.send({
|
||||||
@@ -399,20 +394,19 @@ class GuildMemberManager extends CachedManager {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
const fetchedMembers = new Collection();
|
const fetchedMembers = new Collection();
|
||||||
const option = Boolean(query || limit || presences || user_ids);
|
|
||||||
let i = 0;
|
let i = 0;
|
||||||
const handler = (members, _, chunk) => {
|
const handler = (members, _, chunk) => {
|
||||||
timeout.refresh();
|
timeout.refresh();
|
||||||
if (chunk.nonce !== nonce) return;
|
if (chunk.nonce !== nonce) return;
|
||||||
i++;
|
i++;
|
||||||
for (const member of members.values()) {
|
for (const member of members.values()) {
|
||||||
if (option || force) fetchedMembers.set(member.id, member);
|
fetchedMembers.set(member.id, member);
|
||||||
}
|
}
|
||||||
if ((option && members.size < 1000) || (limit && fetchedMembers.size >= limit) || i === chunk.count) {
|
if (members.size < 1000 || (limit && fetchedMembers.size >= limit) || i === chunk.count) {
|
||||||
clearTimeout(timeout);
|
clearTimeout(timeout);
|
||||||
this.client.removeListener(Events.GUILD_MEMBERS_CHUNK, handler);
|
this.client.removeListener(Events.GUILD_MEMBERS_CHUNK, handler);
|
||||||
this.client.decrementMaxListeners();
|
this.client.decrementMaxListeners();
|
||||||
let fetched = option || force ? fetchedMembers : this.cache;
|
let fetched = fetchedMembers;
|
||||||
if (user_ids && !Array.isArray(user_ids) && fetched.size) fetched = fetched.first();
|
if (user_ids && !Array.isArray(user_ids) && fetched.size) fetched = fetched.first();
|
||||||
resolve(fetched);
|
resolve(fetched);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user