From afa5fa17583dd91e2309dbb981ce8bb21d7c4355 Mon Sep 17 00:00:00 2001 From: abalabahaha Date: Wed, 13 Apr 2016 00:05:08 -0700 Subject: [PATCH] Fixes --- lib/Client/InternalClient.js | 28 +++++++++++++++++++++------- lib/Voice/AudioEncoder.js | 6 +++--- src/Client/InternalClient.js | 29 ++++++++++++++++++++++------- src/Voice/AudioEncoder.js | 3 --- 4 files changed, 46 insertions(+), 20 deletions(-) diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index 5f5a28c96..e73d34584 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -122,6 +122,17 @@ var InternalClient = (function () { var _this = this, _arguments = arguments; + if (this.retryAfters[url]) { + if (this.retryAfters[url] < Date.now()) { + delete this.retryAfters[url]; + } else { + return new Promise(function (resolve, reject) { + setTimeout(function () { + _this.apiRequest.apply(_this, _arguments).then(resolve)["catch"](reject); + }, _this.retryAfters[url] - Date.now()); + }); + } + } var ret = _superagent2["default"][method](url); if (useAuth) { ret.set("authorization", this.token); @@ -140,10 +151,10 @@ var InternalClient = (function () { if (data.headers["retry-after"] || data.headers["Retry-After"]) { var toWait = data.headers["retry-after"] || data.headers["Retry-After"]; - toWait = parseInt(toWait); + if (!_this.retryAfters[url]) _this.retryAfters[url] = Date.now() + parseInt(toWait); setTimeout(function () { _this.apiRequest.apply(_this, _arguments).then(resolve)["catch"](reject); - }, toWait); + }, _this.retryAfters[url] - Date.now()); } else { return reject(error); } @@ -191,6 +202,7 @@ var InternalClient = (function () { this.resolver = new _ResolverResolver2["default"](this); this.readyTime = null; this.messageAwaits = {}; + this.retryAfters = {}; this.tokenCacher = new _UtilTokenCacher2["default"](this.client); this.tokenCacher.init(0); @@ -634,7 +646,7 @@ var InternalClient = (function () { return this.apiRequest("post", _Constants.Endpoints.LOGOUT, true).then(function () { if (_this14.websocket) { - _this14.websocket.close(); + _this14.websocket.close(1000); _this14.websocket = null; } _this14.token = null; @@ -1610,7 +1622,7 @@ var InternalClient = (function () { self.state = _ConnectionState2["default"].READY; 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.unavailableServers.length + " unavailable servers, " + self.channels.length + " channels and " + self.users.length + " users cached."); self.restartServerCreateTimeout(); @@ -1681,7 +1693,9 @@ var InternalClient = (function () { if (!server) { if (!data.unavailable) { server = self.servers.add(new _StructuresServer2["default"](data, client)); - client.emit("serverCreated", server); + if (client.readyTime) { + client.emit("serverCreated", server); + } if (self.client.options.forceFetchUsers && server.large && server.members.length < server.memberCount) { self.getGuildMembers(server.id, Math.ceil(server.memberCount / 1000)); } @@ -2116,7 +2130,7 @@ var InternalClient = (function () { if (server) { - var testtime = new Date().getTime(); + var testtime = Date.now(); for (var _iterator11 = data.members, _isArray11 = Array.isArray(_iterator11), _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : _iterator11[Symbol.iterator]();;) { var _ref11; @@ -2154,7 +2168,7 @@ var InternalClient = (function () { } } - client.emit("debug", new Date().getTime() - testtime + "ms for " + data.members.length + " user chunk for server with id " + server.id); + client.emit("debug", Date.now() - testtime + "ms for " + data.members.length + " user chunk for server with id " + server.id); } else { client.emit("warn", "chunk update received but server not in cache"); } diff --git a/lib/Voice/AudioEncoder.js b/lib/Voice/AudioEncoder.js index 0c69f12dc..1c28fc99e 100644 --- a/lib/Voice/AudioEncoder.js +++ b/lib/Voice/AudioEncoder.js @@ -87,7 +87,7 @@ var AudioEncoder = (function () { return new Promise(function (resolve, reject) { _this.volume = new _VolumeTransformer2["default"](options.volume); - var enc = _child_process2["default"].spawn(_this.getCommand(), ['-hide_banner', '-i', '-', '-f', 's16le', '-ar', '48000', '-ss', options.seek || 0, '-ac', 2, 'pipe:1']); + var enc = _child_process2["default"].spawn(_this.getCommand(), ['-i', '-', '-f', 's16le', '-ar', '48000', '-ss', options.seek || 0, '-ac', 2, 'pipe:1']); stream.pipe(enc.stdin); @@ -128,7 +128,7 @@ var AudioEncoder = (function () { return new Promise(function (resolve, reject) { _this2.volume = new _VolumeTransformer2["default"](options.volume); - var enc = _child_process2["default"].spawn(_this2.getCommand(), ['-hide_banner', '-i', file, '-f', 's16le', '-ar', '48000', '-ss', options.seek || 0, '-ac', 2, 'pipe:1']); + var enc = _child_process2["default"].spawn(_this2.getCommand(), ['-i', file, '-f', 's16le', '-ar', '48000', '-ss', options.seek || 0, '-ac', 2, 'pipe:1']); var ffmpegErrors = ""; @@ -167,7 +167,7 @@ var AudioEncoder = (function () { _this3.volume = new _VolumeTransformer2["default"](1); // add options discord.js needs - var options = ffmpegOptions.concat(['-hide_banner', '-f', 's16le', '-ar', '48000', '-ac', 2, 'pipe:1']); + var options = ffmpegOptions.concat(['-f', 's16le', '-ar', '48000', '-ac', 2, 'pipe:1']); var enc = _child_process2["default"].spawn(_this3.getCommand(), options); var ffmpegErrors = ""; diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index 3dba5c92f..4f363ec55 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -52,6 +52,17 @@ export default class InternalClient { } apiRequest(method, url, useAuth, data, file) { + if(this.retryAfters[url]) { + if(this.retryAfters[url] < Date.now()) { + delete this.retryAfters[url]; + } else { + return new Promise((resolve, reject) => { + setTimeout(() => { + this.apiRequest.apply(this, arguments).then(resolve).catch(reject); + }, this.retryAfters[url] - Date.now()); + }); + } + } let ret = request[method](url); if (useAuth) { ret.set("authorization", this.token); @@ -75,10 +86,11 @@ export default class InternalClient { if (data.headers["retry-after"] || data.headers["Retry-After"]) { var toWait = data.headers["retry-after"] || data.headers["Retry-After"]; - toWait = parseInt(toWait); + if(!this.retryAfters[url]) + this.retryAfters[url] = Date.now() + parseInt(toWait); setTimeout(() => { this.apiRequest.apply(this, arguments).then(resolve).catch(reject); - }, toWait); + }, this.retryAfters[url] - Date.now()); } else { return reject(error); } @@ -127,6 +139,7 @@ export default class InternalClient { this.resolver = new Resolver(this); this.readyTime = null; this.messageAwaits = {}; + this.retryAfters = {}; this.tokenCacher = new TokenCacher(this.client); this.tokenCacher.init(0); @@ -506,7 +519,7 @@ export default class InternalClient { return this.apiRequest("post", Endpoints.LOGOUT, true) .then(() => { if (this.websocket) { - this.websocket.close(); + this.websocket.close(1000); this.websocket = null; } this.token = null; @@ -1365,7 +1378,7 @@ export default class InternalClient { self.state = ConnectionState.READY; 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.unavailableServers.length} unavailable servers, ${self.channels.length} channels and ${self.users.length} users cached.`); self.restartServerCreateTimeout(); @@ -1434,7 +1447,9 @@ export default class InternalClient { if (!server) { if (!data.unavailable) { server = self.servers.add(new Server(data, client)); - client.emit("serverCreated", server); + if(client.readyTime) { + client.emit("serverCreated", server); + } if (self.client.options.forceFetchUsers && server.large && server.members.length < server.memberCount) { self.getGuildMembers(server.id, Math.ceil(server.memberCount / 1000)); } @@ -1824,7 +1839,7 @@ export default class InternalClient { if (server) { - var testtime = new Date().getTime(); + var testtime = Date.now(); for (var user of data.members) { server.memberMap[user.user.id] = { @@ -1847,7 +1862,7 @@ export default class InternalClient { } } - client.emit("debug", (new Date().getTime() - testtime) + "ms for " + data.members.length + " user chunk for server with id " + server.id); + client.emit("debug", (Date.now() - testtime) + "ms for " + data.members.length + " user chunk for server with id " + server.id); } else { client.emit("warn", "chunk update received but server not in cache"); diff --git a/src/Voice/AudioEncoder.js b/src/Voice/AudioEncoder.js index 370061cb0..ac304294b 100644 --- a/src/Voice/AudioEncoder.js +++ b/src/Voice/AudioEncoder.js @@ -63,7 +63,6 @@ export default class AudioEncoder { this.volume = new VolumeTransformer(options.volume); var enc = cpoc.spawn(this.getCommand(), [ - '-hide_banner', '-i', '-', '-f', 's16le', '-ar', '48000', @@ -110,7 +109,6 @@ export default class AudioEncoder { this.volume = new VolumeTransformer(options.volume); var enc = cpoc.spawn(this.getCommand(), [ - '-hide_banner', '-i', file, '-f', 's16le', '-ar', '48000', @@ -155,7 +153,6 @@ export default class AudioEncoder { // add options discord.js needs var options = ffmpegOptions.concat([ - '-hide_banner', '-f', 's16le', '-ar', '48000', '-ac', 2,