diff --git a/lib/Client.js b/lib/Client.js index b57a5f31e..47d63ee49 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -9,6 +9,7 @@ var Endpoints = require("./Endpoints.js"); var User = require("./User.js"); var Server = require("./Server.js"); var Channel = require("./Channel.js"); +var Message = require("./Message.js"); //node modules var request = require("superagent"); @@ -237,6 +238,53 @@ var Client = (function () { break; case "MESSAGE_CREATE": + self.debug("received message"); + + var mentions = []; + 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); + var msg = channel.addMessage(new Message(data, channel, mentions, self.addUser(data.author))); + + self.trigger("message", msg); + + break; + case "MESSAGE_DELETE": + self.debug("message deleted"); + + var channel = self.getChannel("id", data.channel_id); + var message = channel.getMessage("id", data.id); + if (message) { + self.trigger("messageDelete", channel, message); + channel.messages.splice(channel.messages.indexOf(message), 1); + } else { + //don't have the cache of that message ;( + self.trigger("messageDelete", channel); + } + break; default: self.debug("received unknown packet"); @@ -281,50 +329,16 @@ var Client = (function () { }, { key: "getUser", value: function getUser(key, value) { - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = this.userCache[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var user = _step3.value; - - if (user[key] === value) { - return user; - } - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3["return"]) { - _iterator3["return"](); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } - - return null; - } - - //def getChannel - }, { - key: "getChannel", - value: function getChannel(key, value) { var _iteratorNormalCompletion4 = true; var _didIteratorError4 = false; var _iteratorError4 = undefined; try { - for (var _iterator4 = this.channelCache[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { - var channel = _step4.value; + for (var _iterator4 = this.userCache[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + var user = _step4.value; - if (channel[key] === value) { - return channel; + if (user[key] === value) { + return user; } } } catch (err) { @@ -345,22 +359,20 @@ var Client = (function () { return null; } - //def getServer + //def getChannel }, { - key: "getServer", - value: function getServer() { - var key = arguments.length <= 0 || arguments[0] === undefined ? "id" : arguments[0]; - var value = arguments.length <= 1 || arguments[1] === undefined ? "abc123" : arguments[1]; + key: "getChannel", + value: function getChannel(key, value) { var _iteratorNormalCompletion5 = true; var _didIteratorError5 = false; var _iteratorError5 = undefined; try { - for (var _iterator5 = this.serverCache[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { - var server = _step5.value; + for (var _iterator5 = this.channelCache[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { + var channel = _step5.value; - if (server[key] === value) { - return server; + if (channel[key] === value) { + return channel; } } } catch (err) { @@ -381,6 +393,42 @@ var Client = (function () { return null; } + //def getServer + }, { + key: "getServer", + value: function getServer() { + var key = arguments.length <= 0 || arguments[0] === undefined ? "id" : arguments[0]; + var value = arguments.length <= 1 || arguments[1] === undefined ? "abc123" : arguments[1]; + var _iteratorNormalCompletion6 = true; + var _didIteratorError6 = false; + var _iteratorError6 = undefined; + + try { + for (var _iterator6 = this.serverCache[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { + var server = _step6.value; + + if (server[key] === value) { + return server; + } + } + } catch (err) { + _didIteratorError6 = true; + _iteratorError6 = err; + } finally { + try { + if (!_iteratorNormalCompletion6 && _iterator6["return"]) { + _iterator6["return"](); + } + } finally { + if (_didIteratorError6) { + throw _iteratorError6; + } + } + } + + return null; + } + //def trySendConnData }, { key: "trySendConnData", @@ -427,6 +475,38 @@ var Client = (function () { get: function get() { return this.userCache; } + }, { + key: "messages", + get: function get() { + + var msgs = []; + var _iteratorNormalCompletion7 = true; + var _didIteratorError7 = false; + var _iteratorError7 = undefined; + + try { + for (var _iterator7 = this.channelCache[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { + var channel = _step7.value; + + msgs = msgs.concat(channel.messages); + } + } catch (err) { + _didIteratorError7 = true; + _iteratorError7 = err; + } finally { + try { + if (!_iteratorNormalCompletion7 && _iterator7["return"]) { + _iterator7["return"](); + } + } finally { + if (_didIteratorError7) { + throw _iteratorError7; + } + } + } + + return msgs; + } }]); return Client; diff --git a/lib/message.js b/lib/message.js index af9ce1f4b..f4b937f02 100644 --- a/lib/message.js +++ b/lib/message.js @@ -1,41 +1,76 @@ "use strict"; +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + var User = require("./user.js").User; var List = require("./list.js").List; var PMChannel = require("./PMChannel.js").PMChannel; -exports.Message = function (time, author, content, channel, id, mentions, everyoneMentioned, embeds) { +var Message = (function () { + function Message(data, channel, mentions, author) { + _classCallCheck(this, Message); - if (!content) { - message = time; - channel = author; - time = message.timestamp; - author = message.author; - content = message.content; - id = message.id; - mentions = message.mentions; - everyoneMentioned = message.mention_everyone; - embeds = message.embeds; + this.tts = data.tts; + this.timestamp = Date.parse(data.timestamp); + this.nonce = data.nonce; + this.mentions = mentions; + this.everyoneMentioned = data.mention_everyone; + this.id = data.id; + this.embeds = data.embeds; + this.editedTimestamp = data.edited_timestamp; + this.content = data.content.trim(); + this.channel = channel; + this.author = author; + this.attachments = data.attachments; } - this.time = Date.parse(time); - this.author = new User(author); - this.content = content.replace(/\s+/g, ' ').trim(); //content.replace(/<[^>]*>/g, "").replace(/\s+/g, ' ').trim(); - this.channel = channel; - this.id = id; - this.mentions = new List("id"); - this.everyoneMentioned = everyoneMentioned; - this.embeds = embeds; - for (x in mentions) { - var _mention = mentions[x]; - this.mentions.add(new User(_mention)); - } -}; + /*exports.Message.prototype.isPM = function() { + return ( this.channel instanceof PMChannel ); + }*/ -exports.Message.prototype.isPM = function () { - return this.channel instanceof PMChannel; -}; + _createClass(Message, [{ + key: "isMentioned", + value: function isMentioned(user) { + var id = user.id ? user.id : user; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; -exports.Message.prototype.isMentioned = function (user) { - return this.mentions.filter("id", user.id).length > 0; -}; \ No newline at end of file + try { + for (var _iterator = this.mentions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var mention = _step.value; + + if (mention.id === id) { + return true; + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return false; + } + }, { + key: "sender", + get: function get() { + return this.author; + } + }]); + + return Message; +})(); + +module.exports = Message; \ No newline at end of file diff --git a/src/Client.js b/src/Client.js index ac3511461..df79c64e8 100644 --- a/src/Client.js +++ b/src/Client.js @@ -3,6 +3,7 @@ var Endpoints = require("./Endpoints.js"); var User = require("./User.js"); var Server = require("./Server.js"); var Channel = require("./Channel.js"); +var Message = require("./Message.js"); //node modules var request = require("superagent"); @@ -57,6 +58,16 @@ class Client { return this.userCache; } + get messages() { + + var msgs = []; + for (var channel of this.channelCache) { + msgs = msgs.concat(channel.messages); + } + return msgs; + + } + sendPacket(JSONObject) { if (this.websocket.readyState === 1) { this.websocket.send(JSON.stringify(JSONObject)); @@ -191,6 +202,32 @@ class Client { break; case "MESSAGE_CREATE": + self.debug("received message"); + + var mentions = []; + for (var mention of data.mentions) { + mentions.push(self.addUser(mention)); + } + + var channel = self.getChannel("id", data.channel_id); + var msg = channel.addMessage(new Message(data, channel, mentions, self.addUser(data.author))); + + self.trigger("message", msg); + + break; + case "MESSAGE_DELETE": + self.debug("message deleted"); + + var channel = self.getChannel("id", data.channel_id); + var message = channel.getMessage("id", data.id); + if (message) { + self.trigger("messageDelete", channel, message); + channel.messages.splice(channel.messages.indexOf(message), 1); + }else{ + //don't have the cache of that message ;( + self.trigger("messageDelete", channel); + } + break; default: self.debug("received unknown packet"); diff --git a/src/message.js b/src/message.js index 121bbf5dd..ba869c1e1 100644 --- a/src/message.js +++ b/src/message.js @@ -2,38 +2,39 @@ var User = require( "./user.js" ).User; var List = require( "./list.js" ).List; var PMChannel = require( "./PMChannel.js" ).PMChannel; -exports.Message = function( time, author, content, channel, id, mentions, everyoneMentioned, embeds ) { - - if ( !content ) { - message = time; - channel = author; - time = message.timestamp; - author = message.author; - content = message.content; - id = message.id; - mentions = message.mentions; - everyoneMentioned = message.mention_everyone; - embeds = message.embeds; +class Message{ + constructor(data, channel, mentions, author){ + this.tts = data.tts; + this.timestamp = Date.parse(data.timestamp); + this.nonce = data.nonce; + this.mentions = mentions; + this.everyoneMentioned = data.mention_everyone; + this.id = data.id; + this.embeds = data.embeds; + this.editedTimestamp = data.edited_timestamp; + this.content = data.content.trim(); + this.channel = channel; + this.author = author; + this.attachments = data.attachments; } - - this.time = Date.parse( time ); - this.author = new User( author ); - this.content = content.replace( /\s+/g, ' ' ).trim(); //content.replace(/<[^>]*>/g, "").replace(/\s+/g, ' ').trim(); - this.channel = channel; - this.id = id; - this.mentions = new List( "id" ); - this.everyoneMentioned = everyoneMentioned; - this.embeds = embeds; - for ( x in mentions ) { - var _mention = mentions[ x ]; - this.mentions.add( new User( _mention ) ); + + isMentioned( user ){ + var id = (user.id ? user.id : user); + for(var mention of this.mentions){ + if(mention.id === id){ + return true; + } + } + return false; + } + + get sender(){ + return this.author; } } -exports.Message.prototype.isPM = function() { +/*exports.Message.prototype.isPM = function() { return ( this.channel instanceof PMChannel ); -} +}*/ -exports.Message.prototype.isMentioned = function( user ) { - return ( this.mentions.filter( "id", user.id ).length > 0 ); -} +module.exports = Message; \ No newline at end of file diff --git a/test/bot.js b/test/bot.js index 8df078e92..2adab326e 100644 --- a/test/bot.js +++ b/test/bot.js @@ -8,4 +8,14 @@ mybot.login(Auth.email, Auth.password, function(err, res){ mybot.on("ready", function(){ console.log("Ready!"); -}) \ No newline at end of file +}) + +mybot.on("message", function(msg){ + console.log("Another message by "+msg.author.username+"... now I have "+mybot.messages.length); +}) + +mybot.on("messageDelete", function(channel, message){ + + console.log("MESSAGE WAS DELETED BY " + ( message ? message.author.username : channel.name )); + +}); \ No newline at end of file