From 4b4b7d6a4745396b401dea7c4506c9ae5d32f09f Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Sat, 31 Oct 2015 23:23:48 +0000 Subject: [PATCH] Added updateMessage --- lib/Client/Client.js | 25 +++++++++++++++ lib/Client/InternalClient.js | 34 ++++++++++++++++++++ lib/Util/Cache.js | 12 ++++++- lib/index.js | 4 ++- src/Client/Client.js | 23 ++++++++++++- src/Client/InternalClient.js | 52 ++++++++++++++++++++++++++---- src/Util/Cache.js | 62 +++++++++++++++++++++--------------- src/index.js | 4 ++- 8 files changed, 180 insertions(+), 36 deletions(-) diff --git a/lib/Client/Client.js b/lib/Client/Client.js index 012e66c6b..50def92c4 100644 --- a/lib/Client/Client.js +++ b/lib/Client/Client.js @@ -148,6 +148,8 @@ var Client = (function (_EventEmitter) { }); }; + // def deleteMessage + Client.prototype.deleteMessage = function deleteMessage(msg) { var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; var callback = arguments.length <= 2 || arguments[2] === undefined ? function (e) {} : arguments[2]; @@ -169,6 +171,29 @@ var Client = (function (_EventEmitter) { }); }; + //def updateMessage + + Client.prototype.updateMessage = function updateMessage(msg, content) { + var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; + var callback = arguments.length <= 3 || arguments[3] === undefined ? function (err, msg) {} : arguments[3]; + + var self = this; + return new Promise(function (resolve, reject) { + if (typeof options === "function") { + // options is the callback + callback = options; + } + + self.internal.updateMessage(msg, content, options).then(function (msg) { + callback(null, msg); + resolve(msg); + })["catch"](function (e) { + callback(e); + reject(e); + }); + }); + }; + return Client; })(EventEmitter); diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index aacca0c92..cda848a03 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -184,6 +184,8 @@ var InternalClient = (function () { }); }; + // def deleteMessage + InternalClient.prototype.deleteMessage = function deleteMessage(_message) { var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; @@ -215,6 +217,38 @@ var InternalClient = (function () { }); }; + // def updateMessage + + InternalClient.prototype.updateMessage = function updateMessage(msg, _content) { + var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; + + var self = this; + return new Promise(function (resolve, reject) { + + var message = self.resolver.resolveMessage(msg); + + if (message) { + + var content = self.resolver.resolveString(_content); + var mentions = self.resolver.resolveMentions(content); + + request.patch(Endpoints.CHANNEL_MESSAGE(message.channel.id, message.id)).set("authorization", self.token).send({ + content: content, + tts: options.tts, + mentions: mentions + }).end(function (err, res) { + if (err) { + reject(new Error(err.response.text)); + } else { + resolve(message.channel.messages.update(message, new Message(res.body, message.channel, self.client))); + } + }); + } else { + reject(new Error("Supplied message did not resolve to a message!")); + } + }); + }; + InternalClient.prototype.sendWS = function sendWS(object) { this.websocket.send(JSON.stringify(object)); }; diff --git a/lib/Util/Cache.js b/lib/Util/Cache.js index aadc4c46f..9eb847c04 100644 --- a/lib/Util/Cache.js +++ b/lib/Util/Cache.js @@ -68,12 +68,22 @@ var Cache = (function (_Array) { } }; + Cache.prototype.update = function update(old, data) { + var index = this.get(this.discrim, old); + if (~index) { + this[index] = data; + return this[index]; + } else { + return false; + } + }; + Cache.prototype.remove = function remove(data) { var index = this.indexOf(data); if (~index) { this.splice(index, 1); } else { - var item = this.get("id", data.id); + var item = this.get(this.discrim, data.id); if (item) { this.splice(this.indexOf(item), 1); } diff --git a/lib/index.js b/lib/index.js index 8651b3a75..bc9bb3d45 100644 --- a/lib/index.js +++ b/lib/index.js @@ -11,7 +11,9 @@ a.on("debug", function (m) { a.on("message", function (m) { if (m.content === "$$$") a.reply(m, "hi man!").then(function (m) { - a.deleteMessage(m); + a.updateMessage(m, "!!!").then(function (m) { + a.updateMessage(m, "the old content was " + m.content); + }); }); }); diff --git a/src/Client/Client.js b/src/Client/Client.js index 12a2e5b6d..8530ec1c7 100644 --- a/src/Client/Client.js +++ b/src/Client/Client.js @@ -129,7 +129,7 @@ class Client extends EventEmitter { }); }); } - + // def deleteMessage deleteMessage(msg, options = {}, callback = function (e) { }) { var self = this; return new Promise((resolve, reject) => { @@ -150,6 +150,27 @@ class Client extends EventEmitter { }); } + //def updateMessage + updateMessage(msg, content, options = {}, callback = function(err, msg){}) { + var self = this; + return new Promise((resolve, reject) => { + if (typeof options === "function") { + // options is the callback + callback = options; + } + + self.internal.updateMessage(msg, content, options) + .then(msg => { + callback(null, msg); + resolve(msg); + }) + .catch(e => { + callback(e); + reject(e); + }); + + }); + } } module.exports = Client; \ No newline at end of file diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index e59aa5a58..0e892aea0 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -202,7 +202,7 @@ class InternalClient { }); } - + // def deleteMessage deleteMessage(_message, options = {}) { var self = this; return new Promise((resolve, reject) => { @@ -211,13 +211,13 @@ class InternalClient { if (message) { - if(options.wait){ + if (options.wait) { setTimeout(deleteMsg, options.wait); - }else{ + } else { deleteMsg(); } - function deleteMsg(){ + function deleteMsg() { request .del(Endpoints.CHANNEL_MESSAGE(message.channel.id, message.id)) .set("authorization", self.token) @@ -230,13 +230,53 @@ class InternalClient { } }); } - - }else { + + } else { reject(new Error("Supplied message did not resolve to a message!")); } }); } + + // def updateMessage + updateMessage(msg, _content, options = {}) { + + var self = this; + return new Promise((resolve, reject) => { + + var message = self.resolver.resolveMessage(msg); + + if (message) { + + var content = self.resolver.resolveString(_content); + var mentions = self.resolver.resolveMentions(content); + + request + .patch(Endpoints.CHANNEL_MESSAGE(message.channel.id, message.id)) + .set("authorization", self.token) + .send({ + content: content, + tts: options.tts, + mentions: mentions + }) + .end((err, res) => { + if (err) { + reject(new Error(err.response.text)); + } else { + resolve( + message.channel.messages.update + (message, new Message(res.body, message.channel, self.client) + )); + } + }) + + } else { + reject(new Error("Supplied message did not resolve to a message!")); + } + + }); + + } sendWS(object) { this.websocket.send(JSON.stringify(object)); diff --git a/src/Util/Cache.js b/src/Util/Cache.js index 03909470a..d15f27cc2 100644 --- a/src/Util/Cache.js +++ b/src/Util/Cache.js @@ -1,61 +1,71 @@ "use strict"; -class Cache extends Array{ - constructor(discrim, limit){ +class Cache extends Array { + constructor(discrim, limit) { super(); this.discrim = discrim || "id"; } - - get(key, value){ + + get(key, value) { var found = null; - this.forEach( (val, index, array) => { - if(val.hasOwnProperty(key) && val[key] == value){ + this.forEach((val, index, array) => { + if (val.hasOwnProperty(key) && val[key] == value) { found = val; return; } - } ); + }); return found; } - - getAll(key, value){ + + getAll(key, value) { var found = []; - this.forEach( (val, index, array) => { - if(val.hasOwnProperty(key) && val[key] == value){ + this.forEach((val, index, array) => { + if (val.hasOwnProperty(key) && val[key] == value) { found.push(val); return; } - } ); + }); return found; } - - add(data){ + + add(data) { var exit = false; - for(var item of this){ - if(item[this.discrim] === data[this.discrim]){ + for (var item of this) { + if (item[this.discrim] === data[this.discrim]) { exit = item; break; } } - if(exit){ + if (exit) { return exit; - }else{ - if(this.limit && this.length >= this.limit){ + } else { + if (this.limit && this.length >= this.limit) { this.splice(0, 1); } this.push(data); return data; } } - - remove(data){ + + update(old, data) { + var index = this.get(this.discrim, old); + if (~index) { + this[index] = data; + return this[index]; + } else { + return false; + } + } + + remove(data) { var index = this.indexOf(data); - if(~index){ + if (~index) { this.splice(index, 1); - }else{ - var item = this.get("id", data.id); - if(item){ + } else { + var item = this.get(this.discrim, data.id); + if (item) { this.splice(this.indexOf(item), 1); - } + } } return false; } diff --git a/src/index.js b/src/index.js index 2494b680e..557cbff5d 100644 --- a/src/index.js +++ b/src/index.js @@ -9,7 +9,9 @@ a.on("message", m => { if(m.content === "$$$") a.reply(m, "hi man!") .then( m => { - a.deleteMessage(m); + a.updateMessage(m, "!!!").then( m => { + a.updateMessage(m, "the old content was " + m.content); + }); }); });