Fixed awaiting

This commit is contained in:
hydrabolt
2015-11-21 20:59:33 +00:00
parent ddfed4da6c
commit d916e5719b
5 changed files with 58 additions and 9 deletions

View File

@@ -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() { Client.prototype.setStatusIdle = function setStatusIdle() {
this.setStatus("idle"); this.setStatus("idle");
}; };

View File

@@ -83,7 +83,7 @@ var InternalClient = (function () {
return; return;
} }
var awaitID = msg.channel.id + msg.id; var awaitID = msg.channel.id + msg.author.id;
if (!_this.messageAwaits[awaitID]) { if (!_this.messageAwaits[awaitID]) {
_this.messageAwaits[awaitID] = []; _this.messageAwaits[awaitID] = [];
@@ -1274,11 +1274,11 @@ var InternalClient = (function () {
if (channel) { if (channel) {
var msg = channel.messages.add(new Message(data, channel, client)); var msg = channel.messages.add(new Message(data, channel, client));
if (self.messageAwaits[channel.id + msg.id]) { if (self.messageAwaits[channel.id + msg.author.id]) {
self.messageAwaits[channel.id + msg.id].map(function (fn) { self.messageAwaits[channel.id + msg.author.id].map(function (fn) {
return 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 client.emit("message", msg, true); //2nd param is isAwaitedMessage
} else { } else {
client.emit("message", msg); client.emit("message", msg);

View File

@@ -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() { setStatusIdle() {
this.setStatus("idle"); this.setStatus("idle");
} }

View File

@@ -77,13 +77,14 @@ class InternalClient {
return; return;
} }
var awaitID = msg.channel.id + msg.id; var awaitID = msg.channel.id + msg.author.id;
if( !this.messageAwaits[awaitID] ){ if( !this.messageAwaits[awaitID] ){
this.messageAwaits[awaitID] = []; this.messageAwaits[awaitID] = [];
} }
this.messageAwaits[awaitID].push(resolve); this.messageAwaits[awaitID].push(resolve);
}); });
} }
@@ -1350,9 +1351,9 @@ class InternalClient {
if (channel) { if (channel) {
var msg = channel.messages.add(new Message(data, channel, client)); var msg = channel.messages.add(new Message(data, channel, client));
if(self.messageAwaits[channel.id + msg.id]){ if(self.messageAwaits[channel.id + msg.author.id]){
self.messageAwaits[channel.id + msg.id].map( fn => fn() ); self.messageAwaits[channel.id + msg.author.id].map( fn => 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 client.emit("message", msg, true); //2nd param is isAwaitedMessage
}else{ }else{
client.emit("message", msg); client.emit("message", msg);

View File

@@ -23,6 +23,16 @@ client.on("message", m => {
var game = m.content.split(" ").slice(1).join(" "); var game = m.content.split(" ").slice(1).join(" ");
client.setStatus(game); 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);
});
}
}); });