mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-17 20:13:30 +01:00
forceFetch fix
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -127,6 +127,10 @@ export default class InternalClient {
|
|||||||
this.readyTime = null;
|
this.readyTime = null;
|
||||||
this.messageAwaits = {};
|
this.messageAwaits = {};
|
||||||
|
|
||||||
|
this.forceFetchCount = {};
|
||||||
|
this.forceFetchQueue = [];
|
||||||
|
this.forceFetchLength = 1;
|
||||||
|
|
||||||
this.tokenCacher = new TokenCacher(this.client);
|
this.tokenCacher = new TokenCacher(this.client);
|
||||||
this.tokenCacher.init(0);
|
this.tokenCacher.init(0);
|
||||||
}
|
}
|
||||||
@@ -208,7 +212,7 @@ export default class InternalClient {
|
|||||||
} else {
|
} else {
|
||||||
// preserve old functionality for non-bots
|
// preserve old functionality for non-bots
|
||||||
if (this.voiceConnections[0]) {
|
if (this.voiceConnections[0]) {
|
||||||
this.voiceConnections[0].destroy();
|
this.voiceConnections[0].destroy();
|
||||||
}
|
}
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
@@ -309,29 +313,44 @@ export default class InternalClient {
|
|||||||
return this.voiceConnections[0];
|
return this.voiceConnections[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
// def forceFetchUsers
|
getGuildMembers(guildID, chunkCount) {
|
||||||
forceFetchUsers() {
|
this.forceFetchCount[guildID] = chunkCount;
|
||||||
this.sendWS({
|
if(this.forceFetchLength + 3 + guildID.length > 4082) { // 4096 - '{"op":8,"d":[]}'.length + 1 for lazy comma offset
|
||||||
op : 8,
|
this.requestGuildMembers(this.forceFetchQueue);
|
||||||
d : {
|
this.forceFetchQueue = [guildID];
|
||||||
guild_id : this.servers.filter(srv => srv.large && srv.memberCount > srv.members.length).map(srv => srv.id),
|
this.forceFetchLength = 1 + guildID.length + 3;
|
||||||
query : "",
|
} else {
|
||||||
limit : 0
|
this.forceFetchQueue.push(guildID);
|
||||||
}
|
this.forceFetchLength += guildID.length + 3;
|
||||||
});
|
|
||||||
this.chunkloaderCount = {};
|
|
||||||
for (var server of this.servers.filter(srv => srv.large && srv.memberCount > srv.members.length)) {
|
|
||||||
this.chunkloaderCount[server.id] = Math.ceil(server.memberCount / 1000);
|
|
||||||
}
|
}
|
||||||
return new Promise((resolve, reject) => {
|
}
|
||||||
if (!server) {
|
|
||||||
resolve();
|
requestGuildMembers(guildID, query, limit) {
|
||||||
} else {
|
this.sendWS(OPCodes.GET_GUILD_MEMBERS, {
|
||||||
this.chunkloaderCallback = resolve;
|
guild_id: guildID,
|
||||||
}
|
query: query || "",
|
||||||
|
limit: limit || 0
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checkReady() {
|
||||||
|
if(!this.readyTime) {
|
||||||
|
if(this.forceFetchQueue.length > 0) {
|
||||||
|
this.requestGuildMembers(this.forceFetchQueue);
|
||||||
|
this.forceFetchQueue = [];
|
||||||
|
this.forceFetchLength = 1;
|
||||||
|
} else {
|
||||||
|
for (var key in this.forceFetchCount) {
|
||||||
|
if (this.forceFetchCount.hasOwnProperty(key)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.readyTime = Date.now();
|
||||||
|
client.emit("ready");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// def createServer
|
// def createServer
|
||||||
createServer(name, region = "london") {
|
createServer(name, region = "london") {
|
||||||
name = this.resolver.resolveString(name);
|
name = this.resolver.resolveString(name);
|
||||||
@@ -1298,9 +1317,12 @@ export default class InternalClient {
|
|||||||
self.user = self.users.add(new User(data.user, client));
|
self.user = self.users.add(new User(data.user, client));
|
||||||
data.guilds.forEach(server => {
|
data.guilds.forEach(server => {
|
||||||
if (!server.unavailable) {
|
if (!server.unavailable) {
|
||||||
self.servers.add(new Server(server, client));
|
server = self.servers.add(new Server(server, client));
|
||||||
|
if(self.options.forceFetchUsers && server.members && server.members.length < server.memberCount) {
|
||||||
|
self.getGuildMembers(server.id, Math.ceil(server.memberCount / 1000));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
client.emit("warn", "server was unavailable, could not create (ready)");
|
client.emit("warn", "server " + guild.id + " was unavailable, could not create (ready)");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
data.private_channels.forEach(pm => {
|
data.private_channels.forEach(pm => {
|
||||||
@@ -1328,13 +1350,7 @@ export default class InternalClient {
|
|||||||
client.emit("debug", `ready packet took ${Date.now() - startTime}ms to process`);
|
client.emit("debug", `ready packet took ${Date.now() - startTime}ms to process`);
|
||||||
client.emit("debug", `ready with ${self.servers.length} servers, ${self.channels.length} channels and ${self.users.length} users cached.`);
|
client.emit("debug", `ready with ${self.servers.length} servers, ${self.channels.length} channels and ${self.users.length} users cached.`);
|
||||||
|
|
||||||
self.readyTime = Date.now();
|
self.checkReady();
|
||||||
|
|
||||||
if (self.client.options.forceFetchUsers) {
|
|
||||||
self.forceFetchUsers().then(() => {client.emit("ready")});
|
|
||||||
} else {
|
|
||||||
client.emit("ready");
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PacketType.MESSAGE_CREATE:
|
case PacketType.MESSAGE_CREATE:
|
||||||
@@ -1399,11 +1415,10 @@ export default class InternalClient {
|
|||||||
var server = self.servers.get("id", data.id);
|
var server = self.servers.get("id", data.id);
|
||||||
if (!server) {
|
if (!server) {
|
||||||
if (!data.unavailable) {
|
if (!data.unavailable) {
|
||||||
server = new Server(data, client)
|
server = self.servers.add(new Server(data, client));
|
||||||
self.servers.add(server);
|
|
||||||
client.emit("serverCreated", server);
|
client.emit("serverCreated", server);
|
||||||
if (server.large && server.members.length < server.memberCount) {
|
if (self.options.forceFetchUsers && server.large && server.members.length < server.memberCount) {
|
||||||
self.sendWS({op: 8, d: {guild_id: server.id, query: "", limit: 0}});
|
self.getGuildMembers(server.id, Math.ceil(server.memberCount / 1000));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
client.emit("warn", "server was unavailable, could not create");
|
client.emit("warn", "server was unavailable, could not create");
|
||||||
@@ -1800,16 +1815,33 @@ export default class InternalClient {
|
|||||||
server.members.add(self.users.add(new User(user.user, client)));
|
server.members.add(self.users.add(new User(user.user, client)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self.chunkloaderCallback && server.id in self.chunkloaderCount) {
|
xxxx
|
||||||
self.chunkloaderCount[server.id]--;
|
xxxx
|
||||||
if (self.chunkloaderCount[server.id] <= 0) {
|
xxxx
|
||||||
delete self.chunkloaderCount[server.id];
|
xxxx
|
||||||
if (Object.keys(self.chunkloaderCount).length == 0) {
|
xxxx
|
||||||
self.chunkloaderCallback();
|
xxxx
|
||||||
self.chunkloaderCallback = null;
|
xxxx
|
||||||
}
|
xxxx
|
||||||
}
|
xxxx
|
||||||
}
|
xxxx
|
||||||
|
xxxx
|
||||||
|
xxxx
|
||||||
|
xxxx
|
||||||
|
xxxx
|
||||||
|
xxxx
|
||||||
|
xxxx
|
||||||
|
xxxx
|
||||||
|
xxxx
|
||||||
|
xxxx
|
||||||
|
xxxx
|
||||||
|
xxxx
|
||||||
|
xxxx
|
||||||
|
xxxx
|
||||||
|
xxxx
|
||||||
|
xxxx
|
||||||
|
xxxx
|
||||||
|
xxxx
|
||||||
|
|
||||||
client.emit("debug", (new Date().getTime() - testtime) + "ms for " + data.members.length + " user chunk for server with id " + server.id);
|
client.emit("debug", (new Date().getTime() - testtime) + "ms for " + data.members.length + " user chunk for server with id " + server.id);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user