From 0938382e51355a98ffae588808fd98b15bea4043 Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Thu, 29 Oct 2015 14:48:39 +0000 Subject: [PATCH] Finished embeds --- lib/Client.js | 1 + lib/Embeds/Embed.js | 16 ++++++++++++++++ lib/Embeds/IEmbed.js | 19 +++++++++++++++++++ lib/Embeds/VideoEmbed.js | 4 ++++ lib/index.js | 6 +++++- lib/message.js | 41 ++++++++++++++++++++++++++++++---------- src/Client.js | 1 + src/Embeds/Embed.js | 16 +++++++++++++++- src/Embeds/IEmbed.js | 17 +++++++++++++++++ src/Embeds/VideoEmbed.js | 4 ++++ src/index.js | 6 +++++- src/message.js | 38 ++++++++++++++++++++++--------------- test/bot.1.js | 5 +++++ 13 files changed, 146 insertions(+), 28 deletions(-) create mode 100644 lib/Embeds/IEmbed.js create mode 100644 src/Embeds/IEmbed.js diff --git a/lib/Client.js b/lib/Client.js index 73aa4435c..896f8a630 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -17,6 +17,7 @@ var PMChannel = require("./PMChannel.js"); var ServerPermissions = require("./ServerPermissions.js"); var gameMap = require("../ref/gameMap.json"); var Color = require("../ref/colours.js"); +var Embeddable = require("./Embeds/IEmbed.js"); var zlib; var EventEmitter = require('events'); diff --git a/lib/Embeds/Embed.js b/lib/Embeds/Embed.js index a661b5eae..35909860b 100644 --- a/lib/Embeds/Embed.js +++ b/lib/Embeds/Embed.js @@ -4,6 +4,22 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var Embed = function Embed(data) { _classCallCheck(this, Embed); + + this.url = data.url; + this.type = data.type; + this.title = data.title; + this.thumbnail = data.thumbnail; + //width + //height + //url + //proxy_url + this.provider = data.provider; + //url + //name + this.description = data.description; + this.author = data.author; + //url + //name }; module.exports = Embed; \ No newline at end of file diff --git a/lib/Embeds/IEmbed.js b/lib/Embeds/IEmbed.js new file mode 100644 index 000000000..a4ceae5a4 --- /dev/null +++ b/lib/Embeds/IEmbed.js @@ -0,0 +1,19 @@ +"use strict"; + +var ImageEmbed = require("./ImageEmbed.js"), + VideoEmbed = require("./VideoEmbed.js"), + LinkEmbed = require("./LinkEmbed.js"); + +exports.createEmbed = function (data) { + switch (data.type) { + case "image": + return new ImageEmbed(data); + break; + case "video": + return new VideoEmbed(data); + break; + case "link": + return new LinkEmbed(data); + break; + } +}; \ No newline at end of file diff --git a/lib/Embeds/VideoEmbed.js b/lib/Embeds/VideoEmbed.js index 3c1be1715..23e366e5a 100644 --- a/lib/Embeds/VideoEmbed.js +++ b/lib/Embeds/VideoEmbed.js @@ -13,6 +13,10 @@ var VideoEmbed = (function (_Embed) { _classCallCheck(this, VideoEmbed); _Embed.call(this, data); + this.video = data.video; + //width + //height + //url } return VideoEmbed; diff --git a/lib/index.js b/lib/index.js index 337bc2b7b..156dcec9c 100644 --- a/lib/index.js +++ b/lib/index.js @@ -19,7 +19,11 @@ var Discord = { ChannelPermissions: require("./ChannelPermissions.js"), EvaluatedPermissiosn: require("./EvaluatedPermissions.js"), VoiceChannel: require("./VoiceChannel.js"), - gameMap: require("../ref/gameMap.json") + gameMap: require("../ref/gameMap.json"), + Embed: require("./Embeds/Embed.js"), + LinkEmbed: require("./Embeds/LinkEmbed.js"), + VideoEmbed: require("./Embeds/VideoEmbed.js"), + ImageEmbed: require("./Embeds/ImageEmbed.js") }; Discord.patchStrings = function () { diff --git a/lib/message.js b/lib/message.js index 8d221cb8c..862794826 100644 --- a/lib/message.js +++ b/lib/message.js @@ -5,6 +5,7 @@ var _createClass = (function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var PMChannel = require("./PMChannel.js"); +var Embeddable = require("./Embeds/IEmbed.js"); var Message = (function () { function Message(data, channel, mentions, author) { @@ -16,7 +17,27 @@ var Message = (function () { this.mentions = mentions; this.everyoneMentioned = data.mention_everyone; this.id = data.id; - this.embeds = data.embeds; + this.embeds = []; + + if (data.embeds) { + for (var _iterator = data.embeds, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { + var _ref; + + if (_isArray) { + if (_i >= _iterator.length) break; + _ref = _iterator[_i++]; + } else { + _i = _iterator.next(); + if (_i.done) break; + _ref = _i.value; + } + + var embed = _ref; + + this.embeds.push(Embeddable.createEmbed(embed)); + } + } + this.editedTimestamp = data.edited_timestamp; this.content = data.content.trim(); this.channel = channel; @@ -36,19 +57,19 @@ var Message = (function () { Message.prototype.isMentioned = function isMentioned(user) { var id = user.id ? user.id : user; - for (var _iterator = this.mentions, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { - var _ref; + for (var _iterator2 = this.mentions, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { + var _ref2; - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; + if (_isArray2) { + if (_i2 >= _iterator2.length) break; + _ref2 = _iterator2[_i2++]; } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; + _i2 = _iterator2.next(); + if (_i2.done) break; + _ref2 = _i2.value; } - var mention = _ref; + var mention = _ref2; if (mention.id === id) { return true; diff --git a/src/Client.js b/src/Client.js index a43a75d4c..35806bbf8 100644 --- a/src/Client.js +++ b/src/Client.js @@ -9,6 +9,7 @@ var PMChannel = require("./PMChannel.js"); var ServerPermissions = require("./ServerPermissions.js"); var gameMap = require("../ref/gameMap.json"); var Color = require("../ref/colours.js"); +var Embeddable = require("./Embeds/IEmbed.js"); var zlib; var EventEmitter = require('events'); diff --git a/src/Embeds/Embed.js b/src/Embeds/Embed.js index 4777e3ed5..fc29ac605 100644 --- a/src/Embeds/Embed.js +++ b/src/Embeds/Embed.js @@ -1,6 +1,20 @@ class Embed{ constructor(data){ - + this.url = data.url; + this.type = data.type; + this.title = data.title; + this.thumbnail = data.thumbnail; + //width + //height + //url + //proxy_url + this.provider = data.provider; + //url + //name + this.description = data.description; + this.author = data.author; + //url + //name } } diff --git a/src/Embeds/IEmbed.js b/src/Embeds/IEmbed.js new file mode 100644 index 000000000..54ef486cb --- /dev/null +++ b/src/Embeds/IEmbed.js @@ -0,0 +1,17 @@ +var ImageEmbed = require("./ImageEmbed.js"), + VideoEmbed = require("./VideoEmbed.js"), + LinkEmbed = require("./LinkEmbed.js"); + +exports.createEmbed = function(data){ + switch(data.type){ + case "image": + return new ImageEmbed(data); + break; + case "video": + return new VideoEmbed(data); + break; + case "link": + return new LinkEmbed(data); + break; + } +} \ No newline at end of file diff --git a/src/Embeds/VideoEmbed.js b/src/Embeds/VideoEmbed.js index ffa968669..e3f1ce42c 100644 --- a/src/Embeds/VideoEmbed.js +++ b/src/Embeds/VideoEmbed.js @@ -3,6 +3,10 @@ var Embed = require("./Embed.js"); class VideoEmbed extends Embed{ constructor(data){ super(data); + this.video = data.video; + //width + //height + //url } } diff --git a/src/index.js b/src/index.js index 062ea94df..faeb7b660 100644 --- a/src/index.js +++ b/src/index.js @@ -17,7 +17,11 @@ var Discord = { ChannelPermissions : require("./ChannelPermissions.js"), EvaluatedPermissiosn : require("./EvaluatedPermissions.js"), VoiceChannel : require("./VoiceChannel.js"), - gameMap : require("../ref/gameMap.json") + gameMap : require("../ref/gameMap.json"), + Embed : require("./Embeds/Embed.js"), + LinkEmbed : require("./Embeds/LinkEmbed.js"), + VideoEmbed : require("./Embeds/VideoEmbed.js"), + ImageEmbed : require("./Embeds/ImageEmbed.js"), } Discord.patchStrings = function () { diff --git a/src/message.js b/src/message.js index 991ae7677..df3820d53 100644 --- a/src/message.js +++ b/src/message.js @@ -1,42 +1,50 @@ var PMChannel = require("./PMChannel.js"); +var Embeddable = require("./Embeds/IEmbed.js"); -class Message{ - constructor(data, channel, mentions, author){ +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.embeds = []; + + if (data.embeds) { + for (var embed of data.embeds) { + this.embeds.push( Embeddable.createEmbed(embed) ); + } + } + this.editedTimestamp = data.edited_timestamp; this.content = data.content.trim(); this.channel = channel; - - if(this.isPrivate){ + + if (this.isPrivate) { this.author = this.channel.client.getUser("id", author.id); - }else{ + } else { this.author = this.channel.server.getMember("id", author.id) || this.channel.client.getUser("id", author.id); } - + this.attachments = data.attachments; } - - isMentioned( user ){ + + isMentioned(user) { var id = (user.id ? user.id : user); - for(var mention of this.mentions){ - if(mention.id === id){ + for (var mention of this.mentions) { + if (mention.id === id) { return true; } } return false; } - - get sender(){ + + get sender() { return this.author; } - - get isPrivate(){ + + get isPrivate() { return this.channel.isPrivate; } } diff --git a/test/bot.1.js b/test/bot.1.js index f1a97dad9..7a898f429 100644 --- a/test/bot.1.js +++ b/test/bot.1.js @@ -40,6 +40,11 @@ mybot.once("ready", function () { }); +mybot.on("messageUpdate", function(newMessage, oldMessage){ + // links and videos will create a loop + mybot.reply(newMessage, JSON.stringify(newMessage.embeds, null, 4)); +}) + mybot.on("serverUpdate", function (oldserver, newserver) { console.log("server changed! " + mybot.servers.length); })