From d916e5719b376e66d8cb3820dc4b9b19d62d3df6 Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Sat, 21 Nov 2015 20:59:33 +0000 Subject: [PATCH] Fixed awaiting --- lib/Client/Client.js | 19 +++++++++++++++++++ lib/Client/InternalClient.js | 10 +++++----- src/Client/Client.js | 19 +++++++++++++++++++ src/Client/InternalClient.js | 9 +++++---- test/bot.1.js | 10 ++++++++++ 5 files changed, 58 insertions(+), 9 deletions(-) diff --git a/lib/Client/Client.js b/lib/Client/Client.js index e38a3323d..71a2bb11f 100644 --- a/lib/Client/Client.js +++ b/lib/Client/Client.js @@ -804,6 +804,25 @@ var Client = (function (_EventEmitter) { }); }; + // def awaitResponse + + Client.prototype.awaitResponse = function awaitResponse(msg) { + var _this = this; + + var callback = arguments.length <= 1 || arguments[1] === undefined ? function (e, newMsg) {} : arguments[1]; + + return new Promise(function (resolve, reject) { + + _this.internal.awaitResponse(msg).then(function (newMsg) { + resolve(newMsg); + callback(null, newMsg); + })["catch"](function (e) { + callback(e); + reject(e); + }); + }); + }; + Client.prototype.setStatusIdle = function setStatusIdle() { this.setStatus("idle"); }; diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index 36bf2fe28..0282ae76c 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -83,7 +83,7 @@ var InternalClient = (function () { return; } - var awaitID = msg.channel.id + msg.id; + var awaitID = msg.channel.id + msg.author.id; if (!_this.messageAwaits[awaitID]) { _this.messageAwaits[awaitID] = []; @@ -1274,11 +1274,11 @@ var InternalClient = (function () { if (channel) { var msg = channel.messages.add(new Message(data, channel, client)); - if (self.messageAwaits[channel.id + msg.id]) { - self.messageAwaits[channel.id + msg.id].map(function (fn) { - return fn(); + if (self.messageAwaits[channel.id + msg.author.id]) { + self.messageAwaits[channel.id + msg.author.id].map(function (fn) { + return fn(msg); }); - self.messageAwaits[channel.id + msg.id] = null; + self.messageAwaits[channel.id + msg.author.id] = null; client.emit("message", msg, true); //2nd param is isAwaitedMessage } else { client.emit("message", msg); diff --git a/src/Client/Client.js b/src/Client/Client.js index 65671f878..85b8c45fc 100644 --- a/src/Client/Client.js +++ b/src/Client/Client.js @@ -797,6 +797,25 @@ class Client extends EventEmitter { }); } + // def awaitResponse + awaitResponse(msg, callback = function (e, newMsg) { }) { + + return new Promise((resolve, reject) => { + + this.internal.awaitResponse(msg) + .then(newMsg => { + resolve(newMsg); + callback(null, newMsg); + }) + .catch(e => { + callback(e); + reject(e); + }); + + }) + + } + setStatusIdle() { this.setStatus("idle"); } diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index 575e07b1b..45b7461a3 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -77,13 +77,14 @@ class InternalClient { return; } - var awaitID = msg.channel.id + msg.id; + var awaitID = msg.channel.id + msg.author.id; if( !this.messageAwaits[awaitID] ){ this.messageAwaits[awaitID] = []; } this.messageAwaits[awaitID].push(resolve); + }); } @@ -1350,9 +1351,9 @@ class InternalClient { if (channel) { var msg = channel.messages.add(new Message(data, channel, client)); - if(self.messageAwaits[channel.id + msg.id]){ - self.messageAwaits[channel.id + msg.id].map( fn => fn() ); - self.messageAwaits[channel.id + msg.id] = null; + if(self.messageAwaits[channel.id + msg.author.id]){ + self.messageAwaits[channel.id + msg.author.id].map( fn => fn(msg) ); + self.messageAwaits[channel.id + msg.author.id] = null; client.emit("message", msg, true); //2nd param is isAwaitedMessage }else{ client.emit("message", msg); diff --git a/test/bot.1.js b/test/bot.1.js index 5b48c9ac9..5b812bcab 100644 --- a/test/bot.1.js +++ b/test/bot.1.js @@ -23,6 +23,16 @@ client.on("message", m => { var game = m.content.split(" ").slice(1).join(" "); client.setStatus(game); } + + if (m.content === "ask me a question") { + + m.reply("do you like polar bears?"); + + client.awaitResponse(m).then(newMsg => { + newMsg.reply("I see! you said " + newMsg.content); + }); + + } });