diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index 27c097c53..5f5a28c96 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -178,6 +178,7 @@ var InternalClient = (function () { this.incoming_friend_requests = new _UtilCache2["default"](); this.channels = new _UtilCache2["default"](); this.servers = new _UtilCache2["default"](); + this.unavailableServers = new _UtilCache2["default"](); this.private_channels = new _UtilCache2["default"](); this.intervals = { @@ -191,10 +192,6 @@ var InternalClient = (function () { this.readyTime = null; this.messageAwaits = {}; - this.forceFetchCount = {}; - this.forceFetchQueue = []; - this.forceFetchLength = 1; - this.tokenCacher = new _UtilTokenCacher2["default"](this.client); this.tokenCacher.init(0); }; @@ -431,10 +428,24 @@ var InternalClient = (function () { } }; + InternalClient.prototype.restartServerCreateTimeout = function restartServerCreateTimeout() { + var _this6 = this; + + if (this.guildCreateTimeout) { + clearTimeout(this.guildCreateTimeout); + this.guildCreateTimeout = null; + } + if (!this.readyTime) { + this.guildCreateTimeout = setTimeout(function () { + _this6.checkReady(); + }, 1000); + } + }; + // def createServer InternalClient.prototype.createServer = function createServer(name) { - var _this6 = this; + var _this7 = this; var region = arguments.length <= 1 || arguments[1] === undefined ? "london" : arguments[1]; @@ -443,7 +454,7 @@ var InternalClient = (function () { return this.apiRequest('post', _Constants.Endpoints.SERVERS, true, { name: name, region: region }).then(function (res) { // valid server, wait until it is cached return waitFor(function () { - return _this6.servers.get("id", res.id); + return _this7.servers.get("id", res.id); }); }); }; @@ -451,7 +462,7 @@ var InternalClient = (function () { //def joinServer InternalClient.prototype.joinServer = function joinServer(invite) { - var _this7 = this; + var _this8 = this; invite = this.resolver.resolveInviteID(invite); if (!invite) { @@ -461,7 +472,7 @@ var InternalClient = (function () { return this.apiRequest("post", _Constants.Endpoints.INVITE(invite), true).then(function (res) { // valid server, wait until it is received via ws and cached return waitFor(function () { - return _this7.servers.get("id", res.guild.id); + return _this8.servers.get("id", res.guild.id); }); }); }; @@ -469,7 +480,7 @@ var InternalClient = (function () { //def updateServer InternalClient.prototype.updateServer = function updateServer(server, name, region) { - var _this8 = this; + var _this9 = this; var server = this.resolver.resolveServer(server); if (!server) { @@ -479,7 +490,7 @@ var InternalClient = (function () { return this.apiRequest("patch", _Constants.Endpoints.SERVER(server.id), true, { name: name || server.name, region: region || server.region }).then(function (res) { // wait until the name and region are updated return waitFor(function () { - return _this8.servers.get("name", res.name) ? _this8.servers.get("name", res.name).region === res.region ? _this8.servers.get("id", res.id) : false : false; + return _this9.servers.get("name", res.name) ? _this9.servers.get("name", res.name).region === res.region ? _this9.servers.get("id", res.id) : false : false; }); }); }; @@ -487,7 +498,7 @@ var InternalClient = (function () { //def leaveServer InternalClient.prototype.leaveServer = function leaveServer(srv) { - var _this9 = this; + var _this10 = this; var server = this.resolver.resolveServer(srv); if (!server) { @@ -510,17 +521,17 @@ var InternalClient = (function () { var chan = _ref2; - _this9.channels.remove(chan); + _this10.channels.remove(chan); } // remove server - _this9.servers.remove(server); + _this10.servers.remove(server); }); }; //def deleteServer InternalClient.prototype.deleteServer = function deleteServer(srv) { - var _this10 = this; + var _this11 = this; var server = this.resolver.resolveServer(srv); if (!server) { @@ -543,10 +554,10 @@ var InternalClient = (function () { var chan = _ref3; - _this10.channels.remove(chan); + _this11.channels.remove(chan); } // remove server - _this10.servers.remove(server); + _this11.servers.remove(server); }); }; @@ -554,7 +565,7 @@ var InternalClient = (function () { // email and password are optional InternalClient.prototype.loginWithToken = function loginWithToken(token, email, password) { - var _this11 = this; + var _this12 = this; this.state = _ConnectionState2["default"].LOGGED_IN; this.token = token; @@ -562,7 +573,7 @@ var InternalClient = (function () { this.password = password; return this.getGateway().then(function (url) { - _this11.createWS(url); + _this12.createWS(url); return token; }); }; @@ -570,14 +581,14 @@ var InternalClient = (function () { // def login InternalClient.prototype.login = function login(email, password) { - var _this12 = this; + var _this13 = this; var client = this.client; if (!this.tokenCacher.done) { return new Promise(function (resolve, reject) { setTimeout(function () { - _this12.login(email, password).then(resolve)["catch"](reject); + _this13.login(email, password).then(resolve)["catch"](reject); }, 20); }); } else { @@ -598,15 +609,15 @@ var InternalClient = (function () { email: email, password: password }).then(function (res) { - _this12.client.emit("debug", "direct API login, cached token was unavailable"); + _this13.client.emit("debug", "direct API login, cached token was unavailable"); var token = res.token; - _this12.tokenCacher.setToken(email, password, token); - return _this12.loginWithToken(token, email, password); + _this13.tokenCacher.setToken(email, password, token); + return _this13.loginWithToken(token, email, password); }, function (error) { - _this12.websocket = null; + _this13.websocket = null; throw error; })["catch"](function (error) { - _this12.state = _ConnectionState2["default"].DISCONNECTED; + _this13.state = _ConnectionState2["default"].DISCONNECTED; client.emit("disconnected"); throw error; }); @@ -615,28 +626,28 @@ var InternalClient = (function () { // def logout InternalClient.prototype.logout = function logout() { - var _this13 = this; + var _this14 = this; if (this.state === _ConnectionState2["default"].DISCONNECTED || this.state === _ConnectionState2["default"].IDLE) { return Promise.reject(new Error("Client is not logged in!")); } return this.apiRequest("post", _Constants.Endpoints.LOGOUT, true).then(function () { - if (_this13.websocket) { - _this13.websocket.close(); - _this13.websocket = null; + if (_this14.websocket) { + _this14.websocket.close(); + _this14.websocket = null; } - _this13.token = null; - _this13.email = null; - _this13.password = null; - _this13.state = _ConnectionState2["default"].DISCONNECTED; + _this14.token = null; + _this14.email = null; + _this14.password = null; + _this14.state = _ConnectionState2["default"].DISCONNECTED; }); }; // def startPM InternalClient.prototype.startPM = function startPM(resUser) { - var _this14 = this; + var _this15 = this; var user = this.resolver.resolveUser(resUser); if (!user) { @@ -646,7 +657,7 @@ var InternalClient = (function () { return this.apiRequest("post", _Constants.Endpoints.USER_CHANNELS(this.user.id), true, { recipient_id: user.id }).then(function (res) { - return _this14.private_channels.add(new _StructuresPMChannel2["default"](res, _this14.client)); + return _this15.private_channels.add(new _StructuresPMChannel2["default"](res, _this15.client)); }); }; @@ -661,19 +672,19 @@ var InternalClient = (function () { // def sendMessage InternalClient.prototype.sendMessage = function sendMessage(where, _content) { - var _this15 = this; + var _this16 = this; var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; return this.resolver.resolveChannel(where).then(function (destination) { //var destination; - var content = _this15.resolver.resolveString(_content); + var content = _this16.resolver.resolveString(_content); - return _this15.apiRequest("post", _Constants.Endpoints.CHANNEL_MESSAGES(destination.id), true, { + return _this16.apiRequest("post", _Constants.Endpoints.CHANNEL_MESSAGES(destination.id), true, { content: content, tts: options.tts }).then(function (res) { - return destination.messages.add(new _StructuresMessage2["default"](res, destination, _this15.client)); + return destination.messages.add(new _StructuresMessage2["default"](res, destination, _this16.client)); }); }); }; @@ -681,7 +692,7 @@ var InternalClient = (function () { // def deleteMessage InternalClient.prototype.deleteMessage = function deleteMessage(_message) { - var _this16 = this; + var _this17 = this; var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; @@ -692,7 +703,7 @@ var InternalClient = (function () { var chain = options.wait ? delay(options.wait) : Promise.resolve(); return chain.then(function () { - return _this16.apiRequest("del", _Constants.Endpoints.CHANNEL_MESSAGE(message.channel.id, message.id), true); + return _this17.apiRequest("del", _Constants.Endpoints.CHANNEL_MESSAGE(message.channel.id, message.id), true); }).then(function () { return message.channel.messages.remove(message); }); @@ -701,7 +712,7 @@ var InternalClient = (function () { // def updateMessage InternalClient.prototype.updateMessage = function updateMessage(msg, _content) { - var _this17 = this; + var _this18 = this; var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; @@ -717,14 +728,14 @@ var InternalClient = (function () { content: content, tts: options.tts }).then(function (res) { - return message.channel.messages.update(message, new _StructuresMessage2["default"](res, message.channel, _this17.client)); + return message.channel.messages.update(message, new _StructuresMessage2["default"](res, message.channel, _this18.client)); }); }; // def sendFile InternalClient.prototype.sendFile = function sendFile(where, _file, name) { - var _this18 = this; + var _this19 = this; if (!name) { if (_file instanceof String || typeof _file === "string") { @@ -738,12 +749,12 @@ var InternalClient = (function () { } return this.resolver.resolveChannel(where).then(function (channel) { - return _this18.resolver.resolveFile(_file).then(function (file) { - return _this18.apiRequest("post", _Constants.Endpoints.CHANNEL_MESSAGES(channel.id), true, null, { + return _this19.resolver.resolveFile(_file).then(function (file) { + return _this19.apiRequest("post", _Constants.Endpoints.CHANNEL_MESSAGES(channel.id), true, null, { name: name, file: file }).then(function (res) { - return channel.messages.add(new _StructuresMessage2["default"](res, channel, _this18.client)); + return channel.messages.add(new _StructuresMessage2["default"](res, channel, _this19.client)); }); }); }); @@ -752,7 +763,7 @@ var InternalClient = (function () { // def getChannelLogs InternalClient.prototype.getChannelLogs = function getChannelLogs(_channel) { - var _this19 = this; + var _this20 = this; var limit = arguments.length <= 1 || arguments[1] === undefined ? 50 : arguments[1]; var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; @@ -760,21 +771,21 @@ var InternalClient = (function () { return this.resolver.resolveChannel(_channel).then(function (channel) { var qsObject = { limit: limit }; if (options.before) { - var res = _this19.resolver.resolveMessage(options.before); + var res = _this20.resolver.resolveMessage(options.before); if (res) { qsObject.before = res.id; } } if (options.after) { - var res = _this19.resolver.resolveMessage(options.after); + var res = _this20.resolver.resolveMessage(options.after); if (res) { qsObject.after = res.id; } } - return _this19.apiRequest("get", _Constants.Endpoints.CHANNEL_MESSAGES(channel.id) + "?" + _querystring2["default"].stringify(qsObject), true).then(function (res) { + return _this20.apiRequest("get", _Constants.Endpoints.CHANNEL_MESSAGES(channel.id) + "?" + _querystring2["default"].stringify(qsObject), true).then(function (res) { return res.map(function (msg) { - return channel.messages.add(new _StructuresMessage2["default"](msg, channel, _this19.client)); + return channel.messages.add(new _StructuresMessage2["default"](msg, channel, _this20.client)); }); }); }); @@ -783,13 +794,13 @@ var InternalClient = (function () { // def getBans InternalClient.prototype.getBans = function getBans(server) { - var _this20 = this; + var _this21 = this; server = this.resolver.resolveServer(server); return this.apiRequest("get", _Constants.Endpoints.SERVER_BANS(server.id), true).then(function (res) { return res.map(function (ban) { - return _this20.users.add(new _StructuresUser2["default"](ban.user, _this20.client)); + return _this21.users.add(new _StructuresUser2["default"](ban.user, _this21.client)); }); }); }; @@ -797,7 +808,7 @@ var InternalClient = (function () { // def createChannel InternalClient.prototype.createChannel = function createChannel(server, name) { - var _this21 = this; + var _this22 = this; var type = arguments.length <= 2 || arguments[2] === undefined ? "text" : arguments[2]; @@ -809,23 +820,23 @@ var InternalClient = (function () { }).then(function (res) { var channel; if (res.type === "text") { - channel = new _StructuresTextChannel2["default"](res, _this21.client, server); + channel = new _StructuresTextChannel2["default"](res, _this22.client, server); } else { - channel = new _StructuresVoiceChannel2["default"](res, _this21.client, server); + channel = new _StructuresVoiceChannel2["default"](res, _this22.client, server); } - return server.channels.add(_this21.channels.add(channel)); + return server.channels.add(_this22.channels.add(channel)); }); }; // def deleteChannel InternalClient.prototype.deleteChannel = function deleteChannel(_channel) { - var _this22 = this; + var _this23 = this; return this.resolver.resolveChannel(_channel).then(function (channel) { - return _this22.apiRequest("del", _Constants.Endpoints.CHANNEL(channel.id), true).then(function () { + return _this23.apiRequest("del", _Constants.Endpoints.CHANNEL(channel.id), true).then(function () { channel.server.channels.remove(channel); - _this22.channels.remove(channel); + _this23.channels.remove(channel); }); }); }; @@ -863,7 +874,7 @@ var InternalClient = (function () { // def moveMember InternalClient.prototype.moveMember = function moveMember(user, channel) { - var _this23 = this; + var _this24 = this; user = this.resolver.resolveUser(user); return this.resolver.resolveChannel(channel).then(function (channel) { @@ -873,7 +884,7 @@ var InternalClient = (function () { if (channel.type !== "voice") { throw new Error("Can't moveMember into a non-voice channel"); } else { - return _this23.apiRequest("patch", _Constants.Endpoints.SERVER_MEMBERS(server.id) + "/" + user.id, true, { channel_id: channel.id }).then(function (res) { + return _this24.apiRequest("patch", _Constants.Endpoints.SERVER_MEMBERS(server.id) + "/" + user.id, true, { channel_id: channel.id }).then(function (res) { user.voiceChannel = channel; return res; }); @@ -916,15 +927,15 @@ var InternalClient = (function () { // def createRole InternalClient.prototype.createRole = function createRole(server, data) { - var _this24 = this; + var _this25 = this; server = this.resolver.resolveServer(server); return this.apiRequest("post", _Constants.Endpoints.SERVER_ROLES(server.id), true).then(function (res) { - var role = server.roles.add(new _StructuresRole2["default"](res, server, _this24.client)); + var role = server.roles.add(new _StructuresRole2["default"](res, server, _this25.client)); if (data) { - return _this24.updateRole(role, data); + return _this25.updateRole(role, data); } return role; }); @@ -933,7 +944,7 @@ var InternalClient = (function () { // def updateRole InternalClient.prototype.updateRole = function updateRole(role, data) { - var _this25 = this; + var _this26 = this; role = this.resolver.resolveRole(role); var server = this.resolver.resolveServer(role.server); @@ -970,7 +981,7 @@ var InternalClient = (function () { } return this.apiRequest("patch", _Constants.Endpoints.SERVER_ROLES(server.id) + "/" + role.id, true, newData).then(function (res) { - return server.roles.update(role, new _StructuresRole2["default"](res, server, _this25.client)); + return server.roles.update(role, new _StructuresRole2["default"](res, server, _this26.client)); }); }; @@ -987,7 +998,7 @@ var InternalClient = (function () { //def addMemberToRole InternalClient.prototype.addMemberToRole = function addMemberToRole(member, roles) { - var _this26 = this; + var _this27 = this; member = this.resolver.resolveUser(member); @@ -1004,7 +1015,7 @@ var InternalClient = (function () { } } else { roles = roles.map(function (r) { - return _this26.resolver.resolveRole(r); + return _this27.resolver.resolveRole(r); }); } @@ -1067,7 +1078,7 @@ var InternalClient = (function () { //def removeMemberFromRole InternalClient.prototype.removeMemberFromRole = function removeMemberFromRole(member, roles) { - var _this27 = this; + var _this28 = this; member = this.resolver.resolveUser(member); @@ -1084,7 +1095,7 @@ var InternalClient = (function () { } } else { roles = roles.map(function (r) { - return _this27.resolver.resolveRole(r); + return _this28.resolver.resolveRole(r); }); } @@ -1125,7 +1136,7 @@ var InternalClient = (function () { // def createInvite InternalClient.prototype.createInvite = function createInvite(chanServ, options) { - var _this28 = this; + var _this29 = this; return this.resolver.resolveChannel(chanServ).then(function (channel) { if (!options) { @@ -1139,8 +1150,8 @@ var InternalClient = (function () { options.xkcdpass = options.xkcd || false; } - return _this28.apiRequest("post", _Constants.Endpoints.CHANNEL_INVITES(channel.id), true, options).then(function (res) { - return new _StructuresInvite2["default"](res, _this28.channels.get("id", res.channel.id), _this28.client); + return _this29.apiRequest("post", _Constants.Endpoints.CHANNEL_INVITES(channel.id), true, options).then(function (res) { + return new _StructuresInvite2["default"](res, _this29.channels.get("id", res.channel.id), _this29.client); }); }); }; @@ -1158,7 +1169,7 @@ var InternalClient = (function () { //def getInvite InternalClient.prototype.getInvite = function getInvite(invite) { - var _this29 = this; + var _this30 = this; invite = this.resolver.resolveInviteID(invite); if (!invite) { @@ -1166,11 +1177,11 @@ var InternalClient = (function () { } return this.apiRequest("get", _Constants.Endpoints.INVITE(invite), true).then(function (res) { - if (!_this29.channels.has("id", res.channel.id)) { - return new _StructuresInvite2["default"](res, null, _this29.client); + if (!_this30.channels.has("id", res.channel.id)) { + return new _StructuresInvite2["default"](res, null, _this30.client); } - return _this29.apiRequest("post", _Constants.Endpoints.CHANNEL_INVITES(res.channel.id), true, { validate: invite }).then(function (res2) { - return new _StructuresInvite2["default"](res2, _this29.channels.get("id", res.channel.id), _this29.client); + return _this30.apiRequest("post", _Constants.Endpoints.CHANNEL_INVITES(res.channel.id), true, { validate: invite }).then(function (res2) { + return new _StructuresInvite2["default"](res2, _this30.channels.get("id", res.channel.id), _this30.client); }); }); }; @@ -1178,22 +1189,22 @@ var InternalClient = (function () { //def getInvites InternalClient.prototype.getInvites = function getInvites(channel) { - var _this30 = this; + var _this31 = this; if (!(channel instanceof _StructuresChannel2["default"])) { var server = this.resolver.resolveServer(channel); if (server) { return this.apiRequest("get", _Constants.Endpoints.SERVER_INVITES(server.id), true).then(function (res) { return res.map(function (data) { - return new _StructuresInvite2["default"](data, _this30.channels.get("id", data.channel.id), _this30.client); + return new _StructuresInvite2["default"](data, _this31.channels.get("id", data.channel.id), _this31.client); }); }); } } return this.resolver.resolveChannel(channel).then(function (channel) { - return _this30.apiRequest("get", _Constants.Endpoints.CHANNEL_INVITES(channel.id), true).then(function (res) { + return _this31.apiRequest("get", _Constants.Endpoints.CHANNEL_INVITES(channel.id), true).then(function (res) { return res.map(function (data) { - return new _StructuresInvite2["default"](data, _this30.channels.get("id", data.channel.id), _this30.client); + return new _StructuresInvite2["default"](data, _this31.channels.get("id", data.channel.id), _this31.client); }); }); }); @@ -1202,7 +1213,7 @@ var InternalClient = (function () { //def overwritePermissions InternalClient.prototype.overwritePermissions = function overwritePermissions(channel, role, updated) { - var _this31 = this; + var _this32 = this; return this.resolver.resolveChannel(channel).then(function (channel) { if (!channel instanceof _StructuresServerChannel2["default"]) { @@ -1215,7 +1226,7 @@ var InternalClient = (function () { }; if (role instanceof String || typeof role === "string") { - role = _this31.resolver.resolveUser(role) || _this31.resolver.resolveRole(role); + role = _this32.resolver.resolveUser(role) || _this32.resolver.resolveRole(role); } if (role instanceof _StructuresUser2["default"]) { @@ -1248,7 +1259,7 @@ var InternalClient = (function () { } } - return _this31.apiRequest("put", _Constants.Endpoints.CHANNEL_PERMISSIONS(channel.id) + "/" + data.id, true, data); + return _this32.apiRequest("put", _Constants.Endpoints.CHANNEL_PERMISSIONS(channel.id) + "/" + data.id, true, data); }); }; @@ -1287,49 +1298,49 @@ var InternalClient = (function () { //def sendTyping InternalClient.prototype.sendTyping = function sendTyping(channel) { - var _this32 = this; + var _this33 = this; return this.resolver.resolveChannel(channel).then(function (channel) { - return _this32.apiRequest("post", _Constants.Endpoints.CHANNEL(channel.id) + "/typing", true); + return _this33.apiRequest("post", _Constants.Endpoints.CHANNEL(channel.id) + "/typing", true); }); }; //def startTyping InternalClient.prototype.startTyping = function startTyping(channel) { - var _this33 = this; + var _this34 = this; return this.resolver.resolveChannel(channel).then(function (channel) { - if (_this33.intervals.typing[channel.id]) { + if (_this34.intervals.typing[channel.id]) { // typing interval already exists, leave it alone throw new Error("Already typing in that channel"); } - _this33.intervals.typing[channel.id] = setInterval(function () { - return _this33.sendTyping(channel)["catch"](function (error) { - return _this33.emit("error", error); + _this34.intervals.typing[channel.id] = setInterval(function () { + return _this34.sendTyping(channel)["catch"](function (error) { + return _this34.emit("error", error); }); }, 4000); - return _this33.sendTyping(channel); + return _this34.sendTyping(channel); }); }; //def stopTyping InternalClient.prototype.stopTyping = function stopTyping(channel) { - var _this34 = this; + var _this35 = this; return this.resolver.resolveChannel(channel).then(function (channel) { - if (!_this34.intervals.typing[channel.id]) { + if (!_this35.intervals.typing[channel.id]) { // typing interval doesn"t exist throw new Error("Not typing in that channel"); } - clearInterval(_this34.intervals.typing[channel.id]); - _this34.intervals.typing[channel.id] = false; + clearInterval(_this35.intervals.typing[channel.id]); + _this35.intervals.typing[channel.id] = false; }); }; @@ -1367,12 +1378,12 @@ var InternalClient = (function () { //def setChannelTopic InternalClient.prototype.setChannelTopic = function setChannelTopic(chann) { - var _this35 = this; + var _this36 = this; var topic = arguments.length <= 1 || arguments[1] === undefined ? "" : arguments[1]; return this.resolver.resolveChannel(chann).then(function (channel) { - return _this35.apiRequest("patch", _Constants.Endpoints.CHANNEL(channel.id), true, { + return _this36.apiRequest("patch", _Constants.Endpoints.CHANNEL(channel.id), true, { name: channel.name, position: channel.position, topic: topic @@ -1385,12 +1396,12 @@ var InternalClient = (function () { //def setChannelName InternalClient.prototype.setChannelName = function setChannelName(chann) { - var _this36 = this; + var _this37 = this; var name = arguments.length <= 1 || arguments[1] === undefined ? "discordjs_is_the_best" : arguments[1]; return this.resolver.resolveChannel(chann).then(function (channel) { - return _this36.apiRequest("patch", _Constants.Endpoints.CHANNEL(channel.id), true, { + return _this37.apiRequest("patch", _Constants.Endpoints.CHANNEL(channel.id), true, { name: name, position: channel.position, topic: channel.topic @@ -1403,13 +1414,13 @@ var InternalClient = (function () { //def setChannelNameAndTopic InternalClient.prototype.setChannelNameAndTopic = function setChannelNameAndTopic(chann) { - var _this37 = this; + var _this38 = this; var name = arguments.length <= 1 || arguments[1] === undefined ? "discordjs_is_the_best" : arguments[1]; var topic = arguments.length <= 2 || arguments[2] === undefined ? "" : arguments[2]; return this.resolver.resolveChannel(chann).then(function (channel) { - return _this37.apiRequest("patch", _Constants.Endpoints.CHANNEL(channel.id), true, { + return _this38.apiRequest("patch", _Constants.Endpoints.CHANNEL(channel.id), true, { name: name, position: channel.position, topic: topic @@ -1423,12 +1434,12 @@ var InternalClient = (function () { //def setTopic InternalClient.prototype.setChannelPosition = function setChannelPosition(chann) { - var _this38 = this; + var _this39 = this; var position = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1]; return this.resolver.resolveChannel(chann).then(function (channel) { - return _this38.apiRequest("patch", _Constants.Endpoints.CHANNEL(channel.id), true, { + return _this39.apiRequest("patch", _Constants.Endpoints.CHANNEL(channel.id), true, { name: channel.name, position: position, topic: channel.topic @@ -1490,7 +1501,7 @@ var InternalClient = (function () { }; InternalClient.prototype.createWS = function createWS(url) { - var _this39 = this; + var _this40 = this; var self = this; var client = self.client; @@ -1556,14 +1567,20 @@ var InternalClient = (function () { }, data.heartbeat_interval); self.user = self.users.add(new _StructuresUser2["default"](data.user, client)); + + _this40.forceFetchCount = {}; + _this40.forceFetchQueue = []; + _this40.forceFetchLength = 1; + data.guilds.forEach(function (server) { if (!server.unavailable) { server = self.servers.add(new _StructuresServer2["default"](server, client)); - if (self.options.forceFetchUsers && server.members && server.members.length < server.memberCount) { + if (self.client.options.forceFetchUsers && server.members && server.members.length < server.memberCount) { self.getGuildMembers(server.id, Math.ceil(server.memberCount / 1000)); } } else { client.emit("warn", "server " + server.id + " was unavailable, could not create (ready)"); + self.unavailableServers.add(server); } }); data.private_channels.forEach(function (pm) { @@ -1595,7 +1612,8 @@ var InternalClient = (function () { 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."); - self.checkReady(); + self.restartServerCreateTimeout(); + break; case _Constants.PacketType.MESSAGE_CREATE: @@ -1664,9 +1682,14 @@ var InternalClient = (function () { if (!data.unavailable) { server = self.servers.add(new _StructuresServer2["default"](data, client)); client.emit("serverCreated", server); - if (self.options.forceFetchUsers && server.large && server.members.length < server.memberCount) { + if (self.client.options.forceFetchUsers && server.large && server.members.length < server.memberCount) { self.getGuildMembers(server.id, Math.ceil(server.memberCount / 1000)); } + var unavailable = self.unavailableServers.get("id", server.id); + if (unavailable) { + self.unavailableServers.remove(unavailable); + } + self.restartServerCreateTimeout(); } else { client.emit("warn", "server was unavailable, could not create"); } @@ -1995,7 +2018,7 @@ var InternalClient = (function () { data.id = data.id || user.id; data.avatar = data.avatar || user.avatar; data.discriminator = data.discriminator || user.discriminator; - _this39.email = data.email || _this39.email; + _this40.email = data.email || _this40.email; var presenceUser = new _StructuresUser2["default"](data, client); @@ -2122,12 +2145,12 @@ var InternalClient = (function () { server.members.add(self.users.add(new _StructuresUser2["default"](user.user, client))); } - if (_this39.forceFetchCount.hasOwnProperty(guild.id)) { - if (_this39.forceFetchCount[guild.id] <= 1) { - delete _this39.forceFetchCount[guild.id]; - _this39.checkReady(); + if (self.forceFetchCount.hasOwnProperty(server.id)) { + if (self.forceFetchCount[server.id] <= 1) { + delete self.forceFetchCount[server.id]; + self.checkReady(); } else { - _this39.forceFetchCount[guild.id]--; + self.forceFetchCount[server.id]--; } } diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index 75d278a3e..3dba5c92f 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -114,6 +114,7 @@ export default class InternalClient { this.incoming_friend_requests = new Cache(); this.channels = new Cache(); this.servers = new Cache(); + this.unavailableServers = new Cache(); this.private_channels = new Cache(); this.intervals = { @@ -127,10 +128,6 @@ export default class InternalClient { this.readyTime = null; this.messageAwaits = {}; - this.forceFetchCount = {}; - this.forceFetchQueue = []; - this.forceFetchLength = 1; - this.tokenCacher = new TokenCacher(this.client); this.tokenCacher.init(0); } @@ -353,6 +350,18 @@ export default class InternalClient { } } + restartServerCreateTimeout() { + if(this.guildCreateTimeout) { + clearTimeout(this.guildCreateTimeout); + this.guildCreateTimeout = null; + } + if(!this.readyTime) { + this.guildCreateTimeout = setTimeout(() => { + this.checkReady(); + }, 1000); + } + } + // def createServer createServer(name, region = "london") { name = this.resolver.resolveString(name); @@ -1317,14 +1326,20 @@ export default class InternalClient { self.intervals.kai = setInterval(() => self.sendWS({ op: 1, d: Date.now() }), data.heartbeat_interval); self.user = self.users.add(new User(data.user, client)); + + this.forceFetchCount = {}; + this.forceFetchQueue = []; + this.forceFetchLength = 1; + data.guilds.forEach(server => { if (!server.unavailable) { server = self.servers.add(new Server(server, client)); - if(self.options.forceFetchUsers && server.members && server.members.length < server.memberCount) { + if(self.client.options.forceFetchUsers && server.members && server.members.length < server.memberCount) { self.getGuildMembers(server.id, Math.ceil(server.memberCount / 1000)); } } else { client.emit("warn", "server " + server.id + " was unavailable, could not create (ready)"); + self.unavailableServers.add(server); } }); data.private_channels.forEach(pm => { @@ -1352,7 +1367,8 @@ export default class InternalClient { 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.`); - self.checkReady(); + self.restartServerCreateTimeout(); + break; case PacketType.MESSAGE_CREATE: @@ -1419,9 +1435,14 @@ export default class InternalClient { if (!data.unavailable) { server = self.servers.add(new Server(data, client)); client.emit("serverCreated", server); - if (self.options.forceFetchUsers && server.large && server.members.length < server.memberCount) { + if (self.client.options.forceFetchUsers && server.large && server.members.length < server.memberCount) { self.getGuildMembers(server.id, Math.ceil(server.memberCount / 1000)); } + var unavailable = self.unavailableServers.get("id", server.id); + if(unavailable) { + self.unavailableServers.remove(unavailable); + } + self.restartServerCreateTimeout(); } else { client.emit("warn", "server was unavailable, could not create"); } @@ -1817,12 +1838,12 @@ export default class InternalClient { server.members.add(self.users.add(new User(user.user, client))); } - if(this.forceFetchCount.hasOwnProperty(guild.id)) { - if(this.forceFetchCount[guild.id] <= 1) { - delete this.forceFetchCount[guild.id]; - this.checkReady(); + if(self.forceFetchCount.hasOwnProperty(server.id)) { + if(self.forceFetchCount[server.id] <= 1) { + delete self.forceFetchCount[server.id]; + self.checkReady(); } else { - this.forceFetchCount[guild.id]--; + self.forceFetchCount[server.id]--; } }