Userbots on gateway v5

This commit is contained in:
abalabahaha
2016-09-18 08:50:32 +09:00
parent 4139401f1b
commit d96f5d1e30
6 changed files with 232 additions and 42 deletions

View File

@@ -240,6 +240,9 @@ var InternalClient = (function () {
this.unavailableServers = new _UtilCache2["default"]();
this.private_channels = new _UtilCache2["default"]();
this.autoReconnectInterval = 1000;
this.unsyncedGuilds = 0;
this.guildSyncQueue = [];
this.guildSyncQueueLength = 1;
this.intervals = {
typing: [],
@@ -489,8 +492,29 @@ var InternalClient = (function () {
});
};
InternalClient.prototype.syncGuild = function syncGuild(guildID) {
if (this.guildSyncQueueLength + 3 + guildID.length > 4081) {
// 4096 - "{\"op\":12,\"d\":[]}".length + 1 for lazy comma offset
this.sendWS({ op: 12, d: this.guildSyncQueue });
this.guildSyncQueue = [guildID];
this.guildSyncQueueLength = 1 + guildID.length + 3;
} else {
this.guildSyncQueue.push(guildID);
this.guildSyncQueueLength += guildID.length + 3;
}
};
InternalClient.prototype.checkReady = function checkReady() {
if (!this.readyTime) {
if (this.guildSyncQueue.length > 0) {
this.sendWS({ op: 12, d: this.guildSyncQueue });
this.guildSyncQueue = [];
this.guildSyncQueueLength = 1;
return;
}
if (this.unsyncedGuilds > 0) {
return;
}
if (this.forceFetchQueue.length > 0) {
this.requestGuildMembers(this.forceFetchQueue);
this.forceFetchQueue = [];
@@ -1932,6 +1956,10 @@ var InternalClient = (function () {
data.guilds.forEach(function (server) {
if (!server.unavailable) {
server = _this37.servers.add(new _StructuresServer2["default"](server, client));
if (client.options.bot === false) {
_this37.unsyncedGuilds++;
_this37.syncGuild(server.id);
}
if (_this37.client.options.forceFetchUsers && server.members && server.members.length < server.memberCount) {
_this37.getGuildMembers(server.id, Math.ceil(server.memberCount / 1000));
}
@@ -2079,6 +2107,10 @@ var InternalClient = (function () {
if (!server) {
if (!data.unavailable) {
server = this.servers.add(new _StructuresServer2["default"](data, client));
if (client.options.bot === false) {
this.unsyncedGuilds++;
this.syncGuild(server.id);
}
if (client.readyTime) {
client.emit("serverCreated", server);
}
@@ -2556,7 +2588,7 @@ var InternalClient = (function () {
if (this.forceFetchCount.hasOwnProperty(server.id)) {
if (this.forceFetchCount[server.id] <= 1) {
delete this.forceFetchCount[server.id];
this.checkReady();
this.restartServerCreateTimeout();
} else {
this.forceFetchCount[server.id]--;
}
@@ -2647,6 +2679,78 @@ var InternalClient = (function () {
return;
}
break;
case _Constants.PacketType.SERVER_SYNC:
// (╯°□°)╯︵ ┻━┻ thx Discord devs
var guild = this.servers.get(data.id);
data.members.forEach(function (dataUser) {
guild.memberMap[dataUser.user.id] = {
roles: dataUser.roles,
mute: dataUser.mute,
selfMute: dataUser.self_mute,
deaf: dataUser.deaf,
selfDeaf: dataUser.self_deaf,
joinedAt: Date.parse(dataUser.joined_at),
nick: dataUser.nick || null
};
guild.members.add(client.internal.users.add(new _StructuresUser2["default"](dataUser.user, client)));
});
for (var _iterator11 = data.presences, _isArray11 = Array.isArray(_iterator11), _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : _iterator11[Symbol.iterator]();;) {
var _ref11;
if (_isArray11) {
if (_i11 >= _iterator11.length) break;
_ref11 = _iterator11[_i11++];
} else {
_i11 = _iterator11.next();
if (_i11.done) break;
_ref11 = _i11.value;
}
var presence = _ref11;
var user = client.internal.users.get("id", presence.user.id);
if (user) {
user.status = presence.status;
user.game = presence.game;
}
}
if (guild.pendingVoiceStates && guild.pendingVoiceStates.length > 0) {
for (var _iterator12 = guild.pendingVoiceStates, _isArray12 = Array.isArray(_iterator12), _i12 = 0, _iterator12 = _isArray12 ? _iterator12 : _iterator12[Symbol.iterator]();;) {
var _ref12;
if (_isArray12) {
if (_i12 >= _iterator12.length) break;
_ref12 = _iterator12[_i12++];
} else {
_i12 = _iterator12.next();
if (_i12.done) break;
_ref12 = _i12.value;
}
var voiceState = _ref12;
var _user = guild.members.get("id", voiceState.user_id);
if (_user) {
guild.memberMap[_user.id] = guild.memberMap[_user.id] || {};
guild.memberMap[_user.id].mute = voiceState.mute || guild.memberMap[_user.id].mute;
guild.memberMap[_user.id].selfMute = voiceState.self_mute === undefined ? guild.memberMap[_user.id].selfMute : voiceState.self_mute;
guild.memberMap[_user.id].deaf = voiceState.deaf || guild.memberMap[_user.id].deaf;
guild.memberMap[_user.id].selfDeaf = voiceState.self_deaf === undefined ? guild.memberMap[_user.id].selfDeaf : voiceState.self_deaf;
var _channel2 = guild.channels.get("id", voiceState.channel_id);
if (_channel2) {
guild.eventVoiceJoin(_user, _channel2);
} else {
guild.client.emit("warn", "channel doesn't exist even though GUILD_SYNC expects them to");
}
} else {
guild.client.emit("warn", "user doesn't exist even though GUILD_SYNC expects them to");
}
}
}
guild.pendingVoiceStates = null;
this.unsyncedGuilds--;
this.restartServerCreateTimeout();
break;
default:
client.emit("unknown", packet);
break;