diff --git a/lib/Client.js b/lib/Client.js index 64cc60127..8bb9e87ba 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -368,26 +368,41 @@ var Client = (function () { var self = this; - return new Promise(function (resolve, reject) { + var prom = new Promise(function (resolve, reject) { content = content instanceof Array ? content.join("\n") : content; - request.patch(Endpoints.CHANNELS + "/" + message.channel.id + "/messages/" + message.id).set("authorization", self.token).send({ - content: content, - mentions: [] - }).end(function (err, res) { - if (err) { - callback(err); - reject(err); - } else { - var msg = new Message(res.body, message.channel, message.mentions, message.sender); - callback(null, msg); - resolve(msg); - - message.channel.messages[message.channel.messages.indexOf(message)] = msg; + if (self.options.queue) { + if (!self.queue[message.channel.id]) { + self.queue[message.channel.id] = []; } - }); + self.queue[message.channel.id].push({ + action: "updateMessage", + message: message, + content: content, + then: good, + error: bad + }); + + self.checkQueue(message.channel.id); + } else { + self._updateMessage(message, content).then(good)["catch"](bad); + } + + function good(msg) { + prom.message = msg; + callback(null, msg); + resolve(msg); + } + + function bad(error) { + prom.error = error; + callback(error); + reject(error); + } }); + + return prom; } }, { key: "setUsername", @@ -551,7 +566,7 @@ var Client = (function () { var self = this; - return new Promise(function (resolve, reject) { + var prom = new Promise(function (resolve, reject) { var fstream; @@ -565,7 +580,7 @@ var Client = (function () { self.resolveDestination(destination).then(send)["catch"](error); function send(destination) { - if (~self.options.queue.indexOf("send")) { + if (self.options.queue) { //queue send file too if (!self.queue[destination]) { self.queue[destination] = []; @@ -587,15 +602,19 @@ var Client = (function () { } function good(msg) { + prom.message = msg; callback(null, msg); resolve(msg); } function bad(err) { + prom.error = err; callback(err); reject(err); } }); + + return prom; } }, { key: "sendMessage", @@ -617,7 +636,7 @@ var Client = (function () { } function send(destination) { - if (~self.options.queue.indexOf("send")) { + if (self.options.queue) { //we're QUEUEING messages, so sending them sequentially based on servers. if (!self.queue[destination]) { self.queue[destination] = []; @@ -1430,6 +1449,25 @@ var Client = (function () { }); }); } + }, { + key: "_updateMessage", + value: function _updateMessage(message, content) { + var self = this; + return new Promise(function (resolve, reject) { + request.patch(Endpoints.CHANNELS + "/" + message.channel.id + "/messages/" + message.id).set("authorization", self.token).send({ + content: content, + mentions: [] + }).end(function (err, res) { + if (err) { + reject(err); + } else { + var msg = new Message(res.body, message.channel, message.mentions, message.sender); + resolve(msg); + message.channel.messages[message.channel.messages.indexOf(message)] = msg; + } + }); + }); + } }, { key: "checkQueue", value: function checkQueue(channelID) { @@ -1453,7 +1491,7 @@ var Client = (function () { self.queue[channelID].shift(); doNext(); })["catch"](function (err) { - msgToSend["catch"](err); + msgToSend.error(err); self.queue[channelID].shift(); doNext(); }); @@ -1465,7 +1503,19 @@ var Client = (function () { self.queue[channelID].shift(); doNext(); })["catch"](function (err) { - fileToSend["catch"](err); + fileToSend.error(err); + self.queue[channelID].shift(); + doNext(); + }); + break; + case "updateMessage": + var msgToUpd = queuedEvent; + self._updateMessage(msgToUpd.message, msgToUpd.content).then(function (msg) { + msgToUpd.then(msg); + self.queue[channelID].shift(); + doNext(); + })["catch"](function (err) { + msgToUpd.error(err); self.queue[channelID].shift(); doNext(); }); diff --git a/src/Client.js b/src/Client.js index 46628e344..52ec644d9 100644 --- a/src/Client.js +++ b/src/Client.js @@ -406,31 +406,42 @@ class Client { var self = this; - return new Promise(function (resolve, reject) { + var prom = new Promise(function (resolve, reject) { content = (content instanceof Array ? content.join("\n") : content); - request - .patch(`${Endpoints.CHANNELS}/${message.channel.id}/messages/${message.id}`) - .set("authorization", self.token) - .send({ + if(self.options.queue){ + if (!self.queue[message.channel.id]) { + self.queue[message.channel.id] = []; + } + self.queue[message.channel.id].push({ + action: "updateMessage", + message: message, content: content, - mentions: [] - }) - .end(function (err, res) { - if (err) { - callback(err); - reject(err); - } else { - var msg = new Message(res.body, message.channel, message.mentions, message.sender); - callback(null, msg); - resolve(msg); - - message.channel.messages[message.channel.messages.indexOf(message)] = msg; - } + then: good, + error: bad }); + + self.checkQueue(message.channel.id); + }else{ + self._updateMessage(message, content).then(good).catch(bad); + } + + function good(msg){ + prom.message = msg; + callback(null, msg); + resolve(msg); + } + + function bad(error){ + prom.error = error; + callback(error); + reject(error); + } }); + + return prom; } setUsername(newName, callback = function (err) { }) { @@ -563,7 +574,7 @@ class Client { var self = this; - return new Promise(function (resolve, reject) { + var prom = new Promise(function (resolve, reject) { var fstream; @@ -577,7 +588,7 @@ class Client { self.resolveDestination(destination).then(send).catch(error); function send(destination) { - if(~self.options.queue.indexOf("send")){ + if(self.options.queue){ //queue send file too if (!self.queue[destination]) { self.queue[destination] = []; @@ -599,16 +610,20 @@ class Client { } function good(msg) { + prom.message = msg; callback(null, msg); resolve(msg); } function bad(err) { + prom.error = err; callback(err); reject(err); } }); + + return prom; } @@ -628,7 +643,7 @@ class Client { } function send(destination) { - if (~self.options.queue.indexOf("send")) { + if (self.options.queue) { //we're QUEUEING messages, so sending them sequentially based on servers. if (!self.queue[destination]) { self.queue[destination] = []; @@ -1188,6 +1203,28 @@ class Client { }); } + + _updateMessage(message, content){ + var self = this; + return new Promise(function(resolve, reject){ + request + .patch(`${Endpoints.CHANNELS}/${message.channel.id}/messages/${message.id}`) + .set("authorization", self.token) + .send({ + content: content, + mentions: [] + }) + .end(function (err, res) { + if (err) { + reject(err); + } else { + var msg = new Message(res.body, message.channel, message.mentions, message.sender); + resolve(msg); + message.channel.messages[message.channel.messages.indexOf(message)] = msg; + } + }); + }); + } checkQueue(channelID) { @@ -1214,7 +1251,7 @@ class Client { doNext(); }) .catch(function (err) { - msgToSend.catch(err); + msgToSend.error(err); self.queue[channelID].shift(); doNext(); }); @@ -1228,11 +1265,25 @@ class Client { doNext(); }) .catch(function(err){ - fileToSend.catch(err); + fileToSend.error(err); self.queue[channelID].shift(); doNext(); }); break; + case "updateMessage": + var msgToUpd = queuedEvent; + self._updateMessage(msgToUpd.message, msgToUpd.content) + .then(function(msg){ + msgToUpd.then(msg); + self.queue[channelID].shift(); + doNext(); + }) + .catch(function(err){ + msgToUpd.error(err); + self.queue[channelID].shift(); + doNext(); + }); + break; default: done(); break; diff --git a/test/bot.1.js b/test/bot.1.js index 472a22cf6..31f344fac 100644 --- a/test/bot.1.js +++ b/test/bot.1.js @@ -1,37 +1,37 @@ var Discord = require("../"); var mybot = new Discord.Client({ - queue : ["send"] + queue: ["send"] }); var fs = require("fs"); var server, channel, message, sentMessage = false; -mybot.on("message", function(message){ - - if( mybot.user.equals(message.sender) ){ +mybot.on("message", function (message) { + + if (mybot.user.equals(message.sender)) { return; } - - if( message.content !== "$$$" ){ + + if (message.content !== "$$$") { return; } - + var action1 = mybot.sendMessage(message.channel, "this is message " + 1); - var action1 = mybot.sendFile(message.channel, fs.createReadStream("./test/image.png")); var action2 = mybot.sendMessage(message.channel, "this is message " + 2).then(log); - var action1 = mybot.sendFile(message.channel, fs.createReadStream("./test/image.png")); - var action2 = mybot.sendMessage(message.channel, "this is message " + 3).then(log); - var action1 = mybot.sendFile(message.channel, fs.createReadStream("./test/image.png")); - var action2 = mybot.sendMessage(message.channel, "this is message " + 4).then(log); - var action1 = mybot.sendFile(message.channel, fs.createReadStream("./test/image.png")); - var action2 = mybot.sendMessage(message.channel, "this is message " + 5).then(log); - - function log(){ + + function log() { + console.log("w", action1.message); + mybot.updateMessage(action1.message, "blurg"); + mybot.sendMessage(message.channel, "This is message 3 million minus the million so basically just 3"); } - + }); -function error(err){ +function dump(msg) { + console.log(msg); +} + +function error(err) { console.log(err); }