From 8a1f99b049f0ff7b38e72e10e0a9ae2587c88df8 Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Sat, 29 Aug 2015 16:19:53 +0100 Subject: [PATCH 1/8] Added queue as a setup option --- lib/Client.js | 7 ++++++- src/Client.js | 9 +++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/Client.js b/lib/Client.js index 6f9ffb851..fa15db196 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -19,7 +19,7 @@ var WebSocket = require("ws"); var fs = require("fs"); var defaultOptions = { - cache_tokens: false + queue: false }; var Client = (function () { @@ -35,6 +35,7 @@ var Client = (function () { further efforts will be made to connect. */ this.options = options; + this.options.queue = this.options.queue || false; this.token = token; this.state = 0; this.websocket = null; @@ -60,6 +61,7 @@ var Client = (function () { this.serverCache = []; this.pmChannelCache = []; this.readyTime = null; + this.optionsQueue = {}; } _createClass(Client, [{ @@ -603,6 +605,9 @@ var Client = (function () { function send(destination) { + if (self.options.queue) { + //we're QUEUEING messages, so sending them sequentially based on servers. + } request.post(Endpoints.CHANNELS + "/" + destination + "/messages").set("authorization", self.token).send({ content: message, mentions: mentions diff --git a/src/Client.js b/src/Client.js index 21f5caa60..ff8057340 100644 --- a/src/Client.js +++ b/src/Client.js @@ -13,7 +13,7 @@ var WebSocket = require("ws"); var fs = require("fs"); var defaultOptions = { - cache_tokens: false + queue: false } class Client { @@ -25,6 +25,7 @@ class Client { further efforts will be made to connect. */ this.options = options; + this.options.queue = this.options.queue || false; this.token = token; this.state = 0; this.websocket = null; @@ -50,6 +51,7 @@ class Client { this.serverCache = []; this.pmChannelCache = []; this.readyTime = null; + this.optionsQueue = {}; } get uptime() { @@ -620,7 +622,10 @@ class Client { } function send(destination) { - + + if(self.options.queue){ + //we're QUEUEING messages, so sending them sequentially based on servers. + } request .post(`${Endpoints.CHANNELS}/${destination}/messages`) .set("authorization", self.token) From c14b2fafb6ab16205819a88e17bee9d412d9a2c8 Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Sat, 29 Aug 2015 16:30:25 +0100 Subject: [PATCH 2/8] Beginning to move send message functions to unified function --- lib/Client.js | 349 ++++++++++++++++++++++---------------------------- src/Client.js | 47 ++----- 2 files changed, 170 insertions(+), 226 deletions(-) diff --git a/lib/Client.js b/lib/Client.js index fa15db196..f832da526 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -607,55 +607,10 @@ var Client = (function () { if (self.options.queue) { //we're QUEUEING messages, so sending them sequentially based on servers. + self.addMessageQueue(destination); + } else { + self._sendMessage("text", destination, message, mentions); } - request.post(Endpoints.CHANNELS + "/" + destination + "/messages").set("authorization", self.token).send({ - content: message, - mentions: mentions - }).end(function (err, res) { - - if (err) { - callback(err); - reject(err); - } else { - var data = res.body; - - var mentions = []; - - data.mentions = data.mentions || []; //for some reason this was not defined at some point? - - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = data.mentions[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var mention = _step3.value; - - mentions.push(self.addUser(mention)); - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3["return"]) { - _iterator3["return"](); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } - - var channel = self.getChannel("id", data.channel_id); - if (channel) { - var msg = channel.addMessage(new Message(data, channel, mentions, self.addUser(data.author))); - callback(null, msg); - resolve(msg); - } - } - }); } function resolveMessage() { @@ -668,27 +623,27 @@ var Client = (function () { function resolveMentions() { var _mentions = []; - var _iteratorNormalCompletion4 = true; - var _didIteratorError4 = false; - var _iteratorError4 = undefined; + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; try { - for (var _iterator4 = (message.match(/<@[^>]*>/g) || [])[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { - var mention = _step4.value; + for (var _iterator3 = (message.match(/<@[^>]*>/g) || [])[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var mention = _step3.value; _mentions.push(mention.substring(2, mention.length - 1)); } } catch (err) { - _didIteratorError4 = true; - _iteratorError4 = err; + _didIteratorError3 = true; + _iteratorError3 = err; } finally { try { - if (!_iteratorNormalCompletion4 && _iterator4["return"]) { - _iterator4["return"](); + if (!_iteratorNormalCompletion3 && _iterator3["return"]) { + _iterator3["return"](); } } finally { - if (_didIteratorError4) { - throw _iteratorError4; + if (_didIteratorError3) { + throw _iteratorError3; } } } @@ -741,15 +696,40 @@ var Client = (function () { self.user = self.addUser(data.user); + var _iteratorNormalCompletion4 = true; + var _didIteratorError4 = false; + var _iteratorError4 = undefined; + + try { + for (var _iterator4 = data.guilds[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + var _server = _step4.value; + + var server = self.addServer(_server); + } + } catch (err) { + _didIteratorError4 = true; + _iteratorError4 = err; + } finally { + try { + if (!_iteratorNormalCompletion4 && _iterator4["return"]) { + _iterator4["return"](); + } + } finally { + if (_didIteratorError4) { + throw _iteratorError4; + } + } + } + var _iteratorNormalCompletion5 = true; var _didIteratorError5 = false; var _iteratorError5 = undefined; try { - for (var _iterator5 = data.guilds[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { - var _server = _step5.value; + for (var _iterator5 = data.private_channels[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { + var _pmc = _step5.value; - var server = self.addServer(_server); + var pmc = self.addPMChannel(_pmc); } } catch (err) { _didIteratorError5 = true; @@ -766,31 +746,6 @@ var Client = (function () { } } - var _iteratorNormalCompletion6 = true; - var _didIteratorError6 = false; - var _iteratorError6 = undefined; - - try { - for (var _iterator6 = data.private_channels[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { - var _pmc = _step6.value; - - var pmc = self.addPMChannel(_pmc); - } - } catch (err) { - _didIteratorError6 = true; - _iteratorError6 = err; - } finally { - try { - if (!_iteratorNormalCompletion6 && _iterator6["return"]) { - _iterator6["return"](); - } - } finally { - if (_didIteratorError6) { - throw _iteratorError6; - } - } - } - self.trigger("ready"); self.readyTime = Date.now(); self.debug("cached " + self.serverCache.length + " servers, " + self.channelCache.length + " channels, " + self.pmChannelCache.length + " PMs and " + self.userCache.length + " users."); @@ -805,27 +760,27 @@ var Client = (function () { var mentions = []; data.mentions = data.mentions || []; //for some reason this was not defined at some point? - var _iteratorNormalCompletion7 = true; - var _didIteratorError7 = false; - var _iteratorError7 = undefined; + var _iteratorNormalCompletion6 = true; + var _didIteratorError6 = false; + var _iteratorError6 = undefined; try { - for (var _iterator7 = data.mentions[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { - var mention = _step7.value; + for (var _iterator6 = data.mentions[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { + var mention = _step6.value; mentions.push(self.addUser(mention)); } } catch (err) { - _didIteratorError7 = true; - _iteratorError7 = err; + _didIteratorError6 = true; + _iteratorError6 = err; } finally { try { - if (!_iteratorNormalCompletion7 && _iterator7["return"]) { - _iterator7["return"](); + if (!_iteratorNormalCompletion6 && _iterator6["return"]) { + _iterator6["return"](); } } finally { - if (_didIteratorError7) { - throw _iteratorError7; + if (_didIteratorError6) { + throw _iteratorError6; } } } @@ -870,27 +825,27 @@ var Client = (function () { } var mentions = []; - var _iteratorNormalCompletion8 = true; - var _didIteratorError8 = false; - var _iteratorError8 = undefined; + var _iteratorNormalCompletion7 = true; + var _didIteratorError7 = false; + var _iteratorError7 = undefined; try { - for (var _iterator8 = info.mentions[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) { - var mention = _step8.value; + for (var _iterator7 = info.mentions[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { + var mention = _step7.value; mentions.push(self.addUser(mention)); } } catch (err) { - _didIteratorError8 = true; - _iteratorError8 = err; + _didIteratorError7 = true; + _iteratorError7 = err; } finally { try { - if (!_iteratorNormalCompletion8 && _iterator8["return"]) { - _iterator8["return"](); + if (!_iteratorNormalCompletion7 && _iterator7["return"]) { + _iterator7["return"](); } } finally { - if (_didIteratorError8) { - throw _iteratorError8; + if (_didIteratorError7) { + throw _iteratorError7; } } } @@ -1105,27 +1060,27 @@ var Client = (function () { server = new Server(data, this); this.serverCache.push(server); if (data.channels) { - var _iteratorNormalCompletion9 = true; - var _didIteratorError9 = false; - var _iteratorError9 = undefined; + var _iteratorNormalCompletion8 = true; + var _didIteratorError8 = false; + var _iteratorError8 = undefined; try { - for (var _iterator9 = data.channels[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) { - var channel = _step9.value; + for (var _iterator8 = data.channels[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) { + var channel = _step8.value; server.channels.push(this.addChannel(channel, server.id)); } } catch (err) { - _didIteratorError9 = true; - _iteratorError9 = err; + _didIteratorError8 = true; + _iteratorError8 = err; } finally { try { - if (!_iteratorNormalCompletion9 && _iterator9["return"]) { - _iterator9["return"](); + if (!_iteratorNormalCompletion8 && _iterator8["return"]) { + _iterator8["return"](); } } finally { - if (_didIteratorError9) { - throw _iteratorError9; + if (_didIteratorError8) { + throw _iteratorError8; } } } @@ -1139,16 +1094,50 @@ var Client = (function () { }, { key: "getUser", value: function getUser(key, value) { + var _iteratorNormalCompletion9 = true; + var _didIteratorError9 = false; + var _iteratorError9 = undefined; + + try { + for (var _iterator9 = this.userCache[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) { + var user = _step9.value; + + if (user[key] === value) { + return user; + } + } + } catch (err) { + _didIteratorError9 = true; + _iteratorError9 = err; + } finally { + try { + if (!_iteratorNormalCompletion9 && _iterator9["return"]) { + _iterator9["return"](); + } + } finally { + if (_didIteratorError9) { + throw _iteratorError9; + } + } + } + + return null; + } + + //def getChannel + }, { + key: "getChannel", + value: function getChannel(key, value) { var _iteratorNormalCompletion10 = true; var _didIteratorError10 = false; var _iteratorError10 = undefined; try { - for (var _iterator10 = this.userCache[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) { - var user = _step10.value; + for (var _iterator10 = this.channelCache[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) { + var channel = _step10.value; - if (user[key] === value) { - return user; + if (channel[key] === value) { + return channel; } } } catch (err) { @@ -1166,19 +1155,17 @@ var Client = (function () { } } - return null; + return this.getPMChannel(key, value); //might be a PM } - - //def getChannel }, { - key: "getChannel", - value: function getChannel(key, value) { + key: "getPMChannel", + value: function getPMChannel(key, value) { var _iteratorNormalCompletion11 = true; var _didIteratorError11 = false; var _iteratorError11 = undefined; try { - for (var _iterator11 = this.channelCache[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) { + for (var _iterator11 = this.pmChannelCache[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) { var channel = _step11.value; if (channel[key] === value) { @@ -1200,21 +1187,23 @@ var Client = (function () { } } - return this.getPMChannel(key, value); //might be a PM + return null; } + + //def getServer }, { - key: "getPMChannel", - value: function getPMChannel(key, value) { + key: "getServer", + value: function getServer(key, value) { var _iteratorNormalCompletion12 = true; var _didIteratorError12 = false; var _iteratorError12 = undefined; try { - for (var _iterator12 = this.pmChannelCache[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) { - var channel = _step12.value; + for (var _iterator12 = this.serverCache[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) { + var server = _step12.value; - if (channel[key] === value) { - return channel; + if (server[key] === value) { + return server; } } } catch (err) { @@ -1235,40 +1224,6 @@ var Client = (function () { return null; } - //def getServer - }, { - key: "getServer", - value: function getServer(key, value) { - var _iteratorNormalCompletion13 = true; - var _didIteratorError13 = false; - var _iteratorError13 = undefined; - - try { - for (var _iterator13 = this.serverCache[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) { - var server = _step13.value; - - if (server[key] === value) { - return server; - } - } - } catch (err) { - _didIteratorError13 = true; - _iteratorError13 = err; - } finally { - try { - if (!_iteratorNormalCompletion13 && _iterator13["return"]) { - _iterator13["return"](); - } - } finally { - if (_didIteratorError13) { - throw _iteratorError13; - } - } - } - - return null; - } - //def trySendConnData }, { key: "trySendConnData", @@ -1321,13 +1276,13 @@ var Client = (function () { } else if (destination instanceof User) { //check if we have a PM - var _iteratorNormalCompletion14 = true; - var _didIteratorError14 = false; - var _iteratorError14 = undefined; + var _iteratorNormalCompletion13 = true; + var _didIteratorError13 = false; + var _iteratorError13 = undefined; try { - for (var _iterator14 = self.pmChannelCache[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) { - var pmc = _step14.value; + for (var _iterator13 = self.pmChannelCache[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) { + var pmc = _step13.value; if (pmc.user.equals(destination)) { return pmc.id; @@ -1336,16 +1291,16 @@ var Client = (function () { //we don't, at this point we're late } catch (err) { - _didIteratorError14 = true; - _iteratorError14 = err; + _didIteratorError13 = true; + _iteratorError13 = err; } finally { try { - if (!_iteratorNormalCompletion14 && _iterator14["return"]) { - _iterator14["return"](); + if (!_iteratorNormalCompletion13 && _iterator13["return"]) { + _iterator13["return"](); } } finally { - if (_didIteratorError14) { - throw _iteratorError14; + if (_didIteratorError13) { + throw _iteratorError13; } } } @@ -1359,6 +1314,14 @@ var Client = (function () { if (channId) resolve(channId); }); } + }, { + key: "_sendMessage", + value: function _sendMessage(messageType, destination, content, mentions) { + + var self = this; + + return new Promise(function (resolve, reject) {}); + } }, { key: "uptime", get: function get() { @@ -1395,27 +1358,27 @@ var Client = (function () { get: function get() { var msgs = []; - var _iteratorNormalCompletion15 = true; - var _didIteratorError15 = false; - var _iteratorError15 = undefined; + var _iteratorNormalCompletion14 = true; + var _didIteratorError14 = false; + var _iteratorError14 = undefined; try { - for (var _iterator15 = this.channelCache[Symbol.iterator](), _step15; !(_iteratorNormalCompletion15 = (_step15 = _iterator15.next()).done); _iteratorNormalCompletion15 = true) { - var channel = _step15.value; + for (var _iterator14 = this.channelCache[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) { + var channel = _step14.value; msgs = msgs.concat(channel.messages); } } catch (err) { - _didIteratorError15 = true; - _iteratorError15 = err; + _didIteratorError14 = true; + _iteratorError14 = err; } finally { try { - if (!_iteratorNormalCompletion15 && _iterator15["return"]) { - _iterator15["return"](); + if (!_iteratorNormalCompletion14 && _iterator14["return"]) { + _iterator14["return"](); } } finally { - if (_didIteratorError15) { - throw _iteratorError15; + if (_didIteratorError14) { + throw _iteratorError14; } } } diff --git a/src/Client.js b/src/Client.js index ff8057340..4a7e86571 100644 --- a/src/Client.js +++ b/src/Client.js @@ -625,40 +625,11 @@ class Client { if(self.options.queue){ //we're QUEUEING messages, so sending them sequentially based on servers. + self.addMessageQueue(destination); + }else{ + self._sendMessage("text", destination, message, mentions); } - request - .post(`${Endpoints.CHANNELS}/${destination}/messages`) - .set("authorization", self.token) - .send({ - content: message, - mentions: mentions - }) - .end(function (err, res) { - - if (err) { - callback(err); - reject(err); - } else { - var data = res.body; - - var mentions = []; - - data.mentions = data.mentions || []; //for some reason this was not defined at some point? - - for (var mention of data.mentions) { - mentions.push(self.addUser(mention)); - } - - var channel = self.getChannel("id", data.channel_id); - if (channel) { - var msg = channel.addMessage(new Message(data, channel, mentions, self.addUser(data.author))); - callback(null, msg); - resolve(msg); - } - } - - }); - + } function resolveMessage() { @@ -1118,6 +1089,16 @@ class Client { resolve(channId); }); } + + _sendMessage(messageType, destination, content, mentions){ + + var self = this; + + return new Promise(function(resolve, reject){ + + }); + + } } From 7b124901c6e0ce47f2a65e9be725e30f8ead7d44 Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Sat, 29 Aug 2015 16:48:25 +0100 Subject: [PATCH 3/8] Delocalised message sending, moved to one uniform function --- lib/Client.js | 85 ++++++++++++++++++++++++++++++++++++++++++--------- src/Client.js | 45 +++++++++++++++++++++++++-- 2 files changed, 113 insertions(+), 17 deletions(-) diff --git a/lib/Client.js b/lib/Client.js index f832da526..40a50d048 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -609,10 +609,20 @@ var Client = (function () { //we're QUEUEING messages, so sending them sequentially based on servers. self.addMessageQueue(destination); } else { - self._sendMessage("text", destination, message, mentions); + self._sendMessage(destination, message, mentions).then(mgood)["catch"](mbad); } } + function mgood(msg) { + callback(null, msg); + resolve(msg); + } + + function mbad(error) { + callback(error); + reject(error); + } + function resolveMessage() { var msg = message; if (message instanceof Array) { @@ -1316,11 +1326,58 @@ var Client = (function () { } }, { key: "_sendMessage", - value: function _sendMessage(messageType, destination, content, mentions) { + value: function _sendMessage(destination, content, mentions) { var self = this; - return new Promise(function (resolve, reject) {}); + return new Promise(function (resolve, reject) { + request.post(Endpoints.CHANNELS + "/" + destination + "/messages").set("authorization", self.token).send({ + content: content, + mentions: mentions + }).end(function (err, res) { + + if (err) { + reject(err); + } else { + var data = res.body; + + var mentions = []; + + data.mentions = data.mentions || []; //for some reason this was not defined at some point? + + var _iteratorNormalCompletion14 = true; + var _didIteratorError14 = false; + var _iteratorError14 = undefined; + + try { + for (var _iterator14 = data.mentions[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) { + var mention = _step14.value; + + mentions.push(self.addUser(mention)); + } + } catch (err) { + _didIteratorError14 = true; + _iteratorError14 = err; + } finally { + try { + if (!_iteratorNormalCompletion14 && _iterator14["return"]) { + _iterator14["return"](); + } + } finally { + if (_didIteratorError14) { + throw _iteratorError14; + } + } + } + + var channel = self.getChannel("id", data.channel_id); + if (channel) { + var msg = channel.addMessage(new Message(data, channel, mentions, self.addUser(data.author))); + resolve(msg); + } + } + }); + }); } }, { key: "uptime", @@ -1358,27 +1415,27 @@ var Client = (function () { get: function get() { var msgs = []; - var _iteratorNormalCompletion14 = true; - var _didIteratorError14 = false; - var _iteratorError14 = undefined; + var _iteratorNormalCompletion15 = true; + var _didIteratorError15 = false; + var _iteratorError15 = undefined; try { - for (var _iterator14 = this.channelCache[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) { - var channel = _step14.value; + for (var _iterator15 = this.channelCache[Symbol.iterator](), _step15; !(_iteratorNormalCompletion15 = (_step15 = _iterator15.next()).done); _iteratorNormalCompletion15 = true) { + var channel = _step15.value; msgs = msgs.concat(channel.messages); } } catch (err) { - _didIteratorError14 = true; - _iteratorError14 = err; + _didIteratorError15 = true; + _iteratorError15 = err; } finally { try { - if (!_iteratorNormalCompletion14 && _iterator14["return"]) { - _iterator14["return"](); + if (!_iteratorNormalCompletion15 && _iterator15["return"]) { + _iterator15["return"](); } } finally { - if (_didIteratorError14) { - throw _iteratorError14; + if (_didIteratorError15) { + throw _iteratorError15; } } } diff --git a/src/Client.js b/src/Client.js index 4a7e86571..d0aa5d768 100644 --- a/src/Client.js +++ b/src/Client.js @@ -627,10 +627,20 @@ class Client { //we're QUEUEING messages, so sending them sequentially based on servers. self.addMessageQueue(destination); }else{ - self._sendMessage("text", destination, message, mentions); + self._sendMessage(destination, message, mentions).then(mgood).catch(mbad); } } + + function mgood(msg){ + callback(null, msg); + resolve(msg); + } + + function mbad(error){ + callback(error); + reject(error); + } function resolveMessage() { var msg = message; @@ -1090,12 +1100,41 @@ class Client { }); } - _sendMessage(messageType, destination, content, mentions){ + _sendMessage(destination, content, mentions){ var self = this; return new Promise(function(resolve, reject){ - + request + .post(`${Endpoints.CHANNELS}/${destination}/messages`) + .set("authorization", self.token) + .send({ + content: content, + mentions: mentions + }) + .end(function (err, res) { + + if (err) { + reject(err); + } else { + var data = res.body; + + var mentions = []; + + data.mentions = data.mentions || []; //for some reason this was not defined at some point? + + for (var mention of data.mentions) { + mentions.push(self.addUser(mention)); + } + + var channel = self.getChannel("id", data.channel_id); + if (channel) { + var msg = channel.addMessage(new Message(data, channel, mentions, self.addUser(data.author))); + resolve(msg); + } + } + + }); }); } From b45d60eee8f237835a30b6edd8444cece4c53909 Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Sat, 29 Aug 2015 17:22:17 +0100 Subject: [PATCH 4/8] Added message queue handling --- lib/Client.js | 55 ++++++++++++++++++++++++++++++++++++++++++++++++-- src/Client.js | 54 ++++++++++++++++++++++++++++++++++++++++++++++--- test/bot.1.js | 27 +++++++++++++++++++++++++ test/msgbot.js | 0 4 files changed, 131 insertions(+), 5 deletions(-) create mode 100644 test/bot.1.js create mode 100644 test/msgbot.js diff --git a/lib/Client.js b/lib/Client.js index 40a50d048..1eb4e953b 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -61,7 +61,8 @@ var Client = (function () { this.serverCache = []; this.pmChannelCache = []; this.readyTime = null; - this.optionsQueue = {}; + this.checkingQueue = {}; + this.messageQueue = {}; } _createClass(Client, [{ @@ -607,7 +608,18 @@ var Client = (function () { if (self.options.queue) { //we're QUEUEING messages, so sending them sequentially based on servers. - self.addMessageQueue(destination); + if (!self.messageQueue[destination]) { + self.messageQueue[destination] = []; + } + + self.messageQueue[destination].push({ + content: message, + mentions: mentions, + then: [resolve, callback], + error: [reject, callback] + }); + + self.checkQueue(destination); } else { self._sendMessage(destination, message, mentions).then(mgood)["catch"](mbad); } @@ -1379,6 +1391,45 @@ var Client = (function () { }); }); } + }, { + key: "checkQueue", + value: function checkQueue(channelID) { + var _this = this; + + var self = this; + + if (!this.checkingQueue[channelID]) { + (function () { + var doNext = function doNext() { + if (self.messageQueue[channelID].length === 0) { + done(); + return; + } + var msgToSend = self.messageQueue[channelID][0]; + self._sendMessage(channelID, msgToSend.content, msgToSend.mentions).then(function (msg) { + msgToSend.then[0](msg); + msgToSend.then[1](null, msg); + self.messageQueue[channelID].shift(); + doNext(); + })["catch"](function (err) { + msgToSend["catch"][0](err); + msgToSend["catch"][1](err); + self.messageQueue[channelID].shift(); + doNext(); + }); + }; + + var done = function done() { + self.checkingQueue[channelID] = false; + return; + }; + + //if we aren't already checking this queue. + _this.checkingQueue[channelID] = true; + doNext(); + })(); + } + } }, { key: "uptime", get: function get() { diff --git a/src/Client.js b/src/Client.js index d0aa5d768..c58cdc2ab 100644 --- a/src/Client.js +++ b/src/Client.js @@ -51,7 +51,8 @@ class Client { this.serverCache = []; this.pmChannelCache = []; this.readyTime = null; - this.optionsQueue = {}; + this.checkingQueue = {}; + this.messageQueue = {}; } get uptime() { @@ -625,7 +626,18 @@ class Client { if(self.options.queue){ //we're QUEUEING messages, so sending them sequentially based on servers. - self.addMessageQueue(destination); + if(!self.messageQueue[destination]){ + self.messageQueue[destination] = []; + } + + self.messageQueue[destination].push({ + content : message, + mentions : mentions, + then : [resolve, callback], + error : [reject, callback] + }); + + self.checkQueue(destination); }else{ self._sendMessage(destination, message, mentions).then(mgood).catch(mbad); } @@ -1138,7 +1150,43 @@ class Client { }); } - + + checkQueue(channelID){ + + var self = this; + + if(!this.checkingQueue[channelID]){ + //if we aren't already checking this queue. + this.checkingQueue[channelID] = true; + doNext(); + + function doNext(){ + if(self.messageQueue[channelID].length === 0){ + done(); + return; + } + var msgToSend = self.messageQueue[channelID][0]; + self._sendMessage(channelID, msgToSend.content, msgToSend.mentions) + .then(function(msg){ + msgToSend.then[0](msg); + msgToSend.then[1](null, msg); + self.messageQueue[channelID].shift(); + doNext(); + }) + .catch(function(err){ + msgToSend.catch[0](err); + msgToSend.catch[1](err); + self.messageQueue[channelID].shift(); + doNext(); + }); + } + + function done(){ + self.checkingQueue[channelID] = false; + return; + } + } + } } function getGateway() { diff --git a/test/bot.1.js b/test/bot.1.js new file mode 100644 index 000000000..046cdaa3b --- /dev/null +++ b/test/bot.1.js @@ -0,0 +1,27 @@ +var Discord = require("../"); +var mybot = new Discord.Client({ + queue : true +}); + +var server, channel, message, sentMessage = false; + +mybot.on("message", function(message){ + + if(message.content === "$$$"){ + mybot.sendMessage(message.channel, "this is part 1"); + mybot.sendMessage(message.channel, "this is part 2"); + mybot.sendMessage(message.channel, "this is part 3"); + mybot.sendMessage(message.channel, "this is part 4"); + mybot.sendMessage(message.channel, "this is part 5"); + mybot.sendMessage(message.channel, "this is part 6"); + mybot.sendMessage(message.channel, "this is part 7"); + mybot.sendMessage(message.channel, "this is part 8"); + } + +}); + +function error(err){ + console.log(err); +} + +mybot.login(process.env["ds_email"], process.env["ds_password"]).catch(error); \ No newline at end of file diff --git a/test/msgbot.js b/test/msgbot.js new file mode 100644 index 000000000..e69de29bb From bb53b65cf5bdb9395c4f43b2295386adb15c0a56 Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Sat, 29 Aug 2015 19:47:11 +0100 Subject: [PATCH 5/8] Implemented queuing --- lib/Client.js | 40 ++++++++------ src/Client.js | 148 ++++++++++++++++++++++++++------------------------ test/bot.1.js | 13 ++--- 3 files changed, 106 insertions(+), 95 deletions(-) diff --git a/lib/Client.js b/lib/Client.js index 1eb4e953b..7511a6d27 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -19,7 +19,7 @@ var WebSocket = require("ws"); var fs = require("fs"); var defaultOptions = { - queue: false + queue: [] }; var Client = (function () { @@ -35,7 +35,7 @@ var Client = (function () { further efforts will be made to connect. */ this.options = options; - this.options.queue = this.options.queue || false; + this.options.queue = this.options.queue || []; this.token = token; this.state = 0; this.websocket = null; @@ -605,14 +605,14 @@ var Client = (function () { } function send(destination) { - - if (self.options.queue) { + if (~self.options.queue.indexOf("sendMessage")) { //we're QUEUEING messages, so sending them sequentially based on servers. if (!self.messageQueue[destination]) { self.messageQueue[destination] = []; } self.messageQueue[destination].push({ + action: "sendMessage", content: message, mentions: mentions, then: [resolve, callback], @@ -1405,18 +1405,26 @@ var Client = (function () { done(); return; } - var msgToSend = self.messageQueue[channelID][0]; - self._sendMessage(channelID, msgToSend.content, msgToSend.mentions).then(function (msg) { - msgToSend.then[0](msg); - msgToSend.then[1](null, msg); - self.messageQueue[channelID].shift(); - doNext(); - })["catch"](function (err) { - msgToSend["catch"][0](err); - msgToSend["catch"][1](err); - self.messageQueue[channelID].shift(); - doNext(); - }); + var queuedEvent = self.messageQueue[channelID][0]; + switch (queuedEvent.action) { + case "sendMessage": + var msgToSend = queuedEvent; + self._sendMessage(channelID, msgToSend.content, msgToSend.mentions).then(function (msg) { + msgToSend.then[0](msg); + msgToSend.then[1](null, msg); + self.messageQueue[channelID].shift(); + doNext(); + })["catch"](function (err) { + msgToSend["catch"][0](err); + msgToSend["catch"][1](err); + self.messageQueue[channelID].shift(); + doNext(); + }); + break; + default: + done(); + break; + } }; var done = function done() { diff --git a/src/Client.js b/src/Client.js index c58cdc2ab..021b9d4e3 100644 --- a/src/Client.js +++ b/src/Client.js @@ -13,7 +13,7 @@ var WebSocket = require("ws"); var fs = require("fs"); var defaultOptions = { - queue: false + queue: [] } class Client { @@ -25,7 +25,7 @@ class Client { further efforts will be made to connect. */ this.options = options; - this.options.queue = this.options.queue || false; + this.options.queue = this.options.queue || []; this.token = token; this.state = 0; this.websocket = null; @@ -623,33 +623,33 @@ class Client { } function send(destination) { - - if(self.options.queue){ + if (~self.options.queue.indexOf("sendMessage")) { //we're QUEUEING messages, so sending them sequentially based on servers. - if(!self.messageQueue[destination]){ + if (!self.messageQueue[destination]) { self.messageQueue[destination] = []; } - + self.messageQueue[destination].push({ - content : message, - mentions : mentions, - then : [resolve, callback], - error : [reject, callback] + action: "sendMessage", + content: message, + mentions: mentions, + then: [resolve, callback], + error: [reject, callback] }); - + self.checkQueue(destination); - }else{ + } else { self._sendMessage(destination, message, mentions).then(mgood).catch(mbad); } - + } - - function mgood(msg){ + + function mgood(msg) { callback(null, msg); resolve(msg); } - - function mbad(error){ + + function mbad(error) { callback(error); reject(error); } @@ -1111,79 +1111,87 @@ class Client { resolve(channId); }); } - - _sendMessage(destination, content, mentions){ - + + _sendMessage(destination, content, mentions) { + var self = this; - - return new Promise(function(resolve, reject){ + + return new Promise(function (resolve, reject) { request - .post(`${Endpoints.CHANNELS}/${destination}/messages`) - .set("authorization", self.token) - .send({ - content: content, - mentions: mentions - }) - .end(function (err, res) { + .post(`${Endpoints.CHANNELS}/${destination}/messages`) + .set("authorization", self.token) + .send({ + content: content, + mentions: mentions + }) + .end(function (err, res) { - if (err) { - reject(err); - } else { - var data = res.body; + if (err) { + reject(err); + } else { + var data = res.body; - var mentions = []; + var mentions = []; - data.mentions = data.mentions || []; //for some reason this was not defined at some point? + data.mentions = data.mentions || []; //for some reason this was not defined at some point? - for (var mention of data.mentions) { - mentions.push(self.addUser(mention)); - } - - var channel = self.getChannel("id", data.channel_id); - if (channel) { - var msg = channel.addMessage(new Message(data, channel, mentions, self.addUser(data.author))); - resolve(msg); - } + for (var mention of data.mentions) { + mentions.push(self.addUser(mention)); } - }); + var channel = self.getChannel("id", data.channel_id); + if (channel) { + var msg = channel.addMessage(new Message(data, channel, mentions, self.addUser(data.author))); + resolve(msg); + } + } + + }); }); - + } - - checkQueue(channelID){ - + + checkQueue(channelID) { + var self = this; - if(!this.checkingQueue[channelID]){ + if (!this.checkingQueue[channelID]) { //if we aren't already checking this queue. this.checkingQueue[channelID] = true; doNext(); - - function doNext(){ - if(self.messageQueue[channelID].length === 0){ + + function doNext() { + if (self.messageQueue[channelID].length === 0) { done(); return; } - var msgToSend = self.messageQueue[channelID][0]; - self._sendMessage(channelID, msgToSend.content, msgToSend.mentions) - .then(function(msg){ - msgToSend.then[0](msg); - msgToSend.then[1](null, msg); - self.messageQueue[channelID].shift(); - doNext(); - }) - .catch(function(err){ - msgToSend.catch[0](err); - msgToSend.catch[1](err); - self.messageQueue[channelID].shift(); - doNext(); - }); + var queuedEvent = self.messageQueue[channelID][0]; + switch (queuedEvent.action) { + case "sendMessage": + var msgToSend = queuedEvent; + self._sendMessage(channelID, msgToSend.content, msgToSend.mentions) + .then(function (msg) { + msgToSend.then[0](msg); + msgToSend.then[1](null, msg); + self.messageQueue[channelID].shift(); + doNext(); + }) + .catch(function (err) { + msgToSend.catch[0](err); + msgToSend.catch[1](err); + self.messageQueue[channelID].shift(); + doNext(); + }); + break; + default: + done(); + break; + } } - - function done(){ + + function done() { self.checkingQueue[channelID] = false; - return; + return; } } } diff --git a/test/bot.1.js b/test/bot.1.js index 046cdaa3b..ad985f505 100644 --- a/test/bot.1.js +++ b/test/bot.1.js @@ -1,6 +1,6 @@ var Discord = require("../"); var mybot = new Discord.Client({ - queue : true + queue : ["sendMessage"] }); var server, channel, message, sentMessage = false; @@ -8,14 +8,9 @@ var server, channel, message, sentMessage = false; mybot.on("message", function(message){ if(message.content === "$$$"){ - mybot.sendMessage(message.channel, "this is part 1"); - mybot.sendMessage(message.channel, "this is part 2"); - mybot.sendMessage(message.channel, "this is part 3"); - mybot.sendMessage(message.channel, "this is part 4"); - mybot.sendMessage(message.channel, "this is part 5"); - mybot.sendMessage(message.channel, "this is part 6"); - mybot.sendMessage(message.channel, "this is part 7"); - mybot.sendMessage(message.channel, "this is part 8"); + for(var x=1;x<=10;x++){ + mybot.sendMessage(message.channel, "this is message " + x); + } } }); From c2e282c813e48568a07af3fccd05ca0dac3457ff Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Sun, 30 Aug 2015 16:25:42 +0100 Subject: [PATCH 6/8] Added result storing in promise - useful for queue code --- lib/Client.js | 12 +++++++----- src/Client.js | 12 +++++++----- test/bot.1.js | 13 +++++++++---- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/lib/Client.js b/lib/Client.js index 7511a6d27..2087799c0 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -593,7 +593,7 @@ var Client = (function () { var self = this; - return new Promise(function (resolve, reject) { + var prom = new Promise(function (resolve, reject) { message = premessage + resolveMessage(message); var mentions = resolveMentions(); @@ -615,8 +615,8 @@ var Client = (function () { action: "sendMessage", content: message, mentions: mentions, - then: [resolve, callback], - error: [reject, callback] + then: [mgood], + error: [mbad] }); self.checkQueue(destination); @@ -626,11 +626,13 @@ var Client = (function () { } function mgood(msg) { + prom.message = msg; callback(null, msg); resolve(msg); } function mbad(error) { + prom.error = error; callback(error); reject(error); } @@ -673,6 +675,8 @@ var Client = (function () { return _mentions; } }); + + return prom; } //def createws @@ -1411,12 +1415,10 @@ var Client = (function () { var msgToSend = queuedEvent; self._sendMessage(channelID, msgToSend.content, msgToSend.mentions).then(function (msg) { msgToSend.then[0](msg); - msgToSend.then[1](null, msg); self.messageQueue[channelID].shift(); doNext(); })["catch"](function (err) { msgToSend["catch"][0](err); - msgToSend["catch"][1](err); self.messageQueue[channelID].shift(); doNext(); }); diff --git a/src/Client.js b/src/Client.js index 021b9d4e3..382f0d4f3 100644 --- a/src/Client.js +++ b/src/Client.js @@ -611,7 +611,7 @@ class Client { var self = this; - return new Promise(function (resolve, reject) { + var prom = new Promise(function (resolve, reject) { message = premessage + resolveMessage(message); var mentions = resolveMentions(); @@ -633,8 +633,8 @@ class Client { action: "sendMessage", content: message, mentions: mentions, - then: [resolve, callback], - error: [reject, callback] + then: [mgood], + error: [mbad] }); self.checkQueue(destination); @@ -645,11 +645,13 @@ class Client { } function mgood(msg) { + prom.message = msg; callback(null, msg); resolve(msg); } function mbad(error) { + prom.error = error; callback(error); reject(error); } @@ -671,6 +673,8 @@ class Client { } }); + + return prom; } //def createws @@ -1172,13 +1176,11 @@ class Client { self._sendMessage(channelID, msgToSend.content, msgToSend.mentions) .then(function (msg) { msgToSend.then[0](msg); - msgToSend.then[1](null, msg); self.messageQueue[channelID].shift(); doNext(); }) .catch(function (err) { msgToSend.catch[0](err); - msgToSend.catch[1](err); self.messageQueue[channelID].shift(); doNext(); }); diff --git a/test/bot.1.js b/test/bot.1.js index ad985f505..6d4c5734d 100644 --- a/test/bot.1.js +++ b/test/bot.1.js @@ -7,10 +7,15 @@ var server, channel, message, sentMessage = false; mybot.on("message", function(message){ - if(message.content === "$$$"){ - for(var x=1;x<=10;x++){ - mybot.sendMessage(message.channel, "this is message " + x); - } + if( mybot.user.equals(message.sender) ){ + return; + } + + var action1 = mybot.sendMessage(message.channel, "this is message " + 1); + var action2 = mybot.sendMessage(message.channel, "this is message " + 2).then(log); + + function log(){ + mybot.sendMessage(message.channel, action1.message ? action1.message : action1.error); } }); From d8b7365e1fb6de98481a773c309a3222999c0c3f Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Sun, 30 Aug 2015 16:31:21 +0100 Subject: [PATCH 7/8] Added authentication for examples and moved promise --- examples/auth.json | 6 ++++++ src/Client.js | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 examples/auth.json diff --git a/examples/auth.json b/examples/auth.json new file mode 100644 index 000000000..ce847c692 --- /dev/null +++ b/examples/auth.json @@ -0,0 +1,6 @@ +{ + //this is an authentication file used for the examples, + //just add your email and password and the examples should work! + "email" : "discord@js.com", + "password" : "my discord password" +} \ No newline at end of file diff --git a/src/Client.js b/src/Client.js index 382f0d4f3..8e2159b1d 100644 --- a/src/Client.js +++ b/src/Client.js @@ -375,8 +375,8 @@ class Client { deleteMessage(message, timeout, callback = function (err, msg) { }) { var self = this; - - return new Promise(function (resolve, reject) { + + var prom = new Promise(function (resolve, reject) { if (timeout) { setTimeout(remove, timeout) } else { @@ -398,6 +398,8 @@ class Client { }); } }); + + return prom; } updateMessage(message, content, callback = function (err, msg) { }) { From b32d526937c9f4aa1924090b6a75a95ef79dddb7 Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Sun, 30 Aug 2015 16:42:15 +0100 Subject: [PATCH 8/8] ping pong example --- examples/auth.json | 6 ++---- examples/pingpong.js | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 examples/pingpong.js diff --git a/examples/auth.json b/examples/auth.json index ce847c692..32a7e16e6 100644 --- a/examples/auth.json +++ b/examples/auth.json @@ -1,6 +1,4 @@ { - //this is an authentication file used for the examples, - //just add your email and password and the examples should work! - "email" : "discord@js.com", - "password" : "my discord password" + "email" : "your discord email here", + "password" : "your discord password here" } \ No newline at end of file diff --git a/examples/pingpong.js b/examples/pingpong.js new file mode 100644 index 000000000..5a9ddc9ec --- /dev/null +++ b/examples/pingpong.js @@ -0,0 +1,34 @@ +/* + this bot is a ping pong bot, and every time a message + beginning with "ping" is sent, it will reply with + "pong". +*/ + +var Discord = require("../"); + +// Get the email and password +var AuthDetails = require("./auth.json"); + +var bot = new Discord.Client(); + +bot.on("ready", function(){ + console.log("Ready to begin! Serving in " + bot.channels.length + " channels"); +}); + +bot.on("disconnected", function(){ + + console.log("Disconnected!"); + process.exit(1); //exit node.js with an error + +}); + +bot.on("message", function(msg){ + if(msg.content.substring(0,4) === "ping"){ + + //send a message to the channel the ping message was sent in. + bot.sendMessage( msg.channel, "pong!" ); + + } +}); + +bot.login(AuthDetails.email, AuthDetails.password); \ No newline at end of file