From dd941ab604ba3fbdbb0156fd71a74343a568eb42 Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Tue, 25 Aug 2015 14:30:03 +0100 Subject: [PATCH] Fixed invites --- lib/Client.js | 202 ++++++++++++++++++++++++++++++++----------------- lib/channel.js | 114 ++++++++++++++-------------- lib/invite.js | 48 +++++++----- lib/server.js | 2 +- src/Client.js | 51 ++++++++++++- src/invite.js | 35 +++++---- src/server.js | 5 +- test/bot.js | 9 --- 8 files changed, 294 insertions(+), 172 deletions(-) diff --git a/lib/Client.js b/lib/Client.js index 97c8a52f6..6ff83fec1 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -10,6 +10,7 @@ var User = require("./User.js"); var Server = require("./Server.js"); var Channel = require("./Channel.js"); var Message = require("./Message.js"); +var Invite = require("./Invite.js"); //node modules var request = require("superagent"); @@ -235,6 +236,43 @@ var Client = (function () { }); }); } + }, { + key: "createInvite", + value: function createInvite(serverOrChannel, options) { + var callback = arguments.length <= 2 || arguments[2] === undefined ? function (err, invite) {} : arguments[2]; + + var self = this; + + return new Promise(function (resolve, reject) { + + var destination; + + if (serverOrChannel instanceof Server) { + destination = serverOrChannel.id; + } else if (serverOrChannel instanceof Channel) { + destination = serverOrChannel.id; + } else { + destination = serverOrChannel; + } + + options = options || {}; + options.max_age = options.maxAge || 0; + options.max_uses = options.maxUses || 0; + options.temporary = options.temporary || false; + options.xkcdpass = options.xkcd || false; + + request.post(Endpoints.CHANNELS + "/" + destination + "/invites").set("authorization", self.token).send(options).end(function (err, res) { + if (err) { + callback(err); + reject(err); + } else { + var inv = new Invite(res.body, self); + callback(null, inv); + resolve(inv); + } + }); + }); + } //def createws }, { @@ -457,8 +495,36 @@ var Client = (function () { if (!server) { //if server doesn't already exist because duh - var serv = self.addServer(data); + } else if (server.channels.length === 0) { + + var srv = new Server(data, self); + var _iteratorNormalCompletion4 = true; + var _didIteratorError4 = false; + var _iteratorError4 = undefined; + + try { + for (var _iterator4 = data.channels[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + channel = _step4.value; + + srv.channels.push(new Channel(channel, data.id)); + } + } catch (err) { + _didIteratorError4 = true; + _iteratorError4 = err; + } finally { + try { + if (!_iteratorNormalCompletion4 && _iterator4["return"]) { + _iterator4["return"](); + } + } finally { + if (_didIteratorError4) { + throw _iteratorError4; + } + } + } + + self.serverCache[self.serverCache.indexOf(server)] = srv; } self.trigger("serverCreate", server); @@ -595,27 +661,27 @@ var Client = (function () { if (!server) { server = new Server(data, this); if (data.channels) { - var _iteratorNormalCompletion4 = true; - var _didIteratorError4 = false; - var _iteratorError4 = undefined; + var _iteratorNormalCompletion5 = true; + var _didIteratorError5 = false; + var _iteratorError5 = undefined; try { - for (var _iterator4 = data.channels[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { - var channel = _step4.value; + for (var _iterator5 = data.channels[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { + var channel = _step5.value; server.channels.push(this.addChannel(channel, server.id)); } } catch (err) { - _didIteratorError4 = true; - _iteratorError4 = err; + _didIteratorError5 = true; + _iteratorError5 = err; } finally { try { - if (!_iteratorNormalCompletion4 && _iterator4["return"]) { - _iterator4["return"](); + if (!_iteratorNormalCompletion5 && _iterator5["return"]) { + _iterator5["return"](); } } finally { - if (_didIteratorError4) { - throw _iteratorError4; + if (_didIteratorError5) { + throw _iteratorError5; } } } @@ -630,50 +696,16 @@ var Client = (function () { }, { key: "getUser", value: function getUser(key, value) { - var _iteratorNormalCompletion5 = true; - var _didIteratorError5 = false; - var _iteratorError5 = undefined; - - try { - for (var _iterator5 = this.userCache[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { - var user = _step5.value; - - if (user[key] === value) { - return user; - } - } - } catch (err) { - _didIteratorError5 = true; - _iteratorError5 = err; - } finally { - try { - if (!_iteratorNormalCompletion5 && _iterator5["return"]) { - _iterator5["return"](); - } - } finally { - if (_didIteratorError5) { - throw _iteratorError5; - } - } - } - - return null; - } - - //def getChannel - }, { - key: "getChannel", - value: function getChannel(key, value) { var _iteratorNormalCompletion6 = true; var _didIteratorError6 = false; var _iteratorError6 = undefined; try { - for (var _iterator6 = this.channelCache[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { - var channel = _step6.value; + for (var _iterator6 = this.userCache[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { + var user = _step6.value; - if (channel[key] === value) { - return channel; + if (user[key] === value) { + return user; } } } catch (err) { @@ -694,20 +726,20 @@ var Client = (function () { return null; } - //def getServer + //def getChannel }, { - key: "getServer", - value: function getServer(key, value) { + key: "getChannel", + value: function getChannel(key, value) { var _iteratorNormalCompletion7 = true; var _didIteratorError7 = false; var _iteratorError7 = undefined; try { - for (var _iterator7 = this.serverCache[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { - var server = _step7.value; + for (var _iterator7 = this.channelCache[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { + var channel = _step7.value; - if (server[key] === value) { - return server; + if (channel[key] === value) { + return channel; } } } catch (err) { @@ -728,6 +760,40 @@ var Client = (function () { return null; } + //def getServer + }, { + key: "getServer", + value: function getServer(key, value) { + var _iteratorNormalCompletion8 = true; + var _didIteratorError8 = false; + var _iteratorError8 = undefined; + + try { + for (var _iterator8 = this.serverCache[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) { + var server = _step8.value; + + if (server[key] === value) { + return server; + } + } + } catch (err) { + _didIteratorError8 = true; + _iteratorError8 = err; + } finally { + try { + if (!_iteratorNormalCompletion8 && _iterator8["return"]) { + _iterator8["return"](); + } + } finally { + if (_didIteratorError8) { + throw _iteratorError8; + } + } + } + + return null; + } + //def trySendConnData }, { key: "trySendConnData", @@ -795,27 +861,27 @@ var Client = (function () { get: function get() { var msgs = []; - var _iteratorNormalCompletion8 = true; - var _didIteratorError8 = false; - var _iteratorError8 = undefined; + var _iteratorNormalCompletion9 = true; + var _didIteratorError9 = false; + var _iteratorError9 = undefined; try { - for (var _iterator8 = this.channelCache[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) { - var channel = _step8.value; + for (var _iterator9 = this.channelCache[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) { + var channel = _step9.value; msgs = msgs.concat(channel.messages); } } catch (err) { - _didIteratorError8 = true; - _iteratorError8 = err; + _didIteratorError9 = true; + _iteratorError9 = err; } finally { try { - if (!_iteratorNormalCompletion8 && _iterator8["return"]) { - _iterator8["return"](); + if (!_iteratorNormalCompletion9 && _iterator9["return"]) { + _iterator9["return"](); } } finally { - if (_didIteratorError8) { - throw _iteratorError8; + if (_didIteratorError9) { + throw _iteratorError9; } } } diff --git a/lib/channel.js b/lib/channel.js index 8938e594a..d3c3d2dc7 100644 --- a/lib/channel.js +++ b/lib/channel.js @@ -5,70 +5,70 @@ 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 Channel = (function () { - function Channel(data, server) { - _classCallCheck(this, Channel); + function Channel(data, server) { + _classCallCheck(this, Channel); - this.server = server; - this.name = data.name; - this.type = data.type; - this.id = data.id; - this.messages = []; - //this.isPrivate = isPrivate; //not sure about the implementation of this... - } - - _createClass(Channel, [{ - key: "equals", - value: function equals(object) { - return object.id === this.id; + this.server = server; + this.name = data.name; + this.type = data.type; + this.id = data.id; + this.messages = []; + //this.isPrivate = isPrivate; //not sure about the implementation of this... } - }, { - key: "addMessage", - value: function addMessage(data) { - if (!this.getMessage("id", data.id)) { - this.messages.push(data); - } - return this.getMessage("id", data.id); - } - }, { - key: "getMessage", - value: function getMessage(key, value) { - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - try { - for (var _iterator = this.messages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var message = _step.value; - - if (message[key] === value) { - return message; - } + _createClass(Channel, [{ + key: "equals", + value: function equals(object) { + return object.id === this.id; } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator["return"]) { - _iterator["return"](); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } + }, { + key: "addMessage", + value: function addMessage(data) { + if (!this.getMessage("id", data.id)) { + this.messages.push(data); + } + return this.getMessage("id", data.id); } - } + }, { + key: "getMessage", + value: function getMessage(key, value) { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; - return null; - } - }, { - key: "client", - get: function get() { - return this.server.client; - } - }]); + try { + for (var _iterator = this.messages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var message = _step.value; - return Channel; + if (message[key] === value) { + return message; + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator["return"]) { + _iterator["return"](); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return null; + } + }, { + key: "client", + get: function get() { + return this.server.client; + } + }]); + + return Channel; })(); module.exports = Channel; \ No newline at end of file diff --git a/lib/invite.js b/lib/invite.js index 359ac512b..cb8594af1 100644 --- a/lib/invite.js +++ b/lib/invite.js @@ -1,23 +1,37 @@ "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; -exports.Invite = function (json) { +var Invite = (function () { + function Invite(data, client) { + _classCallCheck(this, Invite); - this.max_age = json.max_age; - this.code = json.code; - this.server = json.guild; - this.revoked = json.revoked; - this.created_at = Date.parse(json.created_at); - this.temporary = json.temporary; - this.uses = json.uses; - this.max_uses = json.uses; - this.inviter = new User(json.inviter); - this.xkcdpass = json.xkcdpass; - this.channel = json.channel; -}; + this.max_age = data.max_age; + this.code = data.code; + this.server = client.getServer("id", data.guild.id); + this.revoked = data.revoked; + this.created_at = Date.parse(data.created_at); + this.temporary = data.temporary; + this.uses = data.uses; + this.max_uses = data.uses; + this.inviter = client.addUser(data.inviter); + this.xkcd = data.xkcdpass; + this.channel = client.getChannel("id", data.channel.id); + } -exports.Invite.prototype.generateInviteURL = function (xkcd) { - var code = xkcd ? this.xkcdpass : this.code; - return "https://discord.gg/" + code; -}; \ No newline at end of file + _createClass(Invite, [{ + key: "inviteURL", + get: function get() { + var code = this.xkcd ? this.xkcdpass : this.code; + return "https://discord.gg/" + code; + } + }]); + + return Invite; +})(); + +module.exports = Invite; \ No newline at end of file diff --git a/lib/server.js b/lib/server.js index fe02e7256..9c9903843 100644 --- a/lib/server.js +++ b/lib/server.js @@ -37,7 +37,7 @@ var Server = (function () { // get a user from this server's member list, // it will be identical (unless an async change occurred) // to the client's cache. - this.members.push(client.addUser(member.user)); + if (member.user) this.members.push(client.addUser(member.user)); } } catch (err) { _didIteratorError = true; diff --git a/src/Client.js b/src/Client.js index 9cb558cee..f59ff9dab 100644 --- a/src/Client.js +++ b/src/Client.js @@ -4,6 +4,7 @@ var User = require("./User.js"); var Server = require("./Server.js"); var Channel = require("./Channel.js"); var Message = require("./Message.js"); +var Invite = require("./Invite.js"); //node modules var request = require("superagent"); @@ -262,6 +263,46 @@ class Client { }); } + + createInvite(serverOrChannel, options, callback = function (err, invite) { }) { + + var self = this; + + return new Promise(function (resolve, reject) { + + var destination; + + if (serverOrChannel instanceof Server) { + destination = serverOrChannel.id; + } else if (serverOrChannel instanceof Channel) { + destination = serverOrChannel.id; + } else { + destination = serverOrChannel; + } + + options = options || {}; + options.max_age = options.maxAge || 0; + options.max_uses = options.maxUses || 0; + options.temporary = options.temporary || false; + options.xkcdpass = options.xkcd || false; + + request + .post(`${Endpoints.CHANNELS}/${destination}/invites`) + .set("authorization", self.token) + .send(options) + .end(function (err, res) { + if(err){ + callback(err); + reject(err); + }else{ + var inv = new Invite(res.body, self); + callback(null, inv); + resolve(inv); + } + }); + }); + + } //def createws createws() { @@ -423,9 +464,15 @@ class Client { if (!server) { //if server doesn't already exist because duh - var serv = self.addServer(data); - + }else if(server.channels.length === 0){ + + var srv = new Server(data, self); + for(channel of data.channels){ + srv.channels.push(new Channel(channel, data.id)); + } + self.serverCache[self.serverCache.indexOf(server)] = srv; + } self.trigger("serverCreate", server); diff --git a/src/invite.js b/src/invite.js index f2e10077a..08d414062 100644 --- a/src/invite.js +++ b/src/invite.js @@ -1,21 +1,24 @@ var User = require("./user.js").User; -exports.Invite = function(json){ +class Invite { + constructor(data, client) { + this.max_age = data.max_age; + this.code = data.code; + this.server = client.getServer("id", data.guild.id); + this.revoked = data.revoked; + this.created_at = Date.parse(data.created_at); + this.temporary = data.temporary; + this.uses = data.uses; + this.max_uses = data.uses; + this.inviter = client.addUser(data.inviter); + this.xkcd = data.xkcdpass; + this.channel = client.getChannel("id", data.channel.id); + } - this.max_age = json.max_age; - this.code = json.code; - this.server = json.guild; - this.revoked = json.revoked; - this.created_at = Date.parse(json.created_at); - this.temporary = json.temporary; - this.uses = json.uses; - this.max_uses = json.uses; - this.inviter = new User(json.inviter); - this.xkcdpass = json.xkcdpass; - this.channel = json.channel; + get inviteURL() { + var code = (this.xkcd ? this.xkcdpass : this.code); + return "https://discord.gg/" + code; + } } -exports.Invite.prototype.generateInviteURL = function(xkcd){ - var code = (xkcd ? this.xkcdpass : this.code); - return "https://discord.gg/"+code; -} +module.exports = Invite; \ No newline at end of file diff --git a/src/server.js b/src/server.js index 259fe9bb5..eba1b2e14 100644 --- a/src/server.js +++ b/src/server.js @@ -17,13 +17,14 @@ class Server { } for (var member of data.members) { - + // first we cache the user in our Discord Client, // then we add it to our list. This way when we // get a user from this server's member list, // it will be identical (unless an async change occurred) // to the client's cache. - this.members.push(client.addUser(member.user)); + if(member.user) + this.members.push(client.addUser(member.user)); } } diff --git a/test/bot.js b/test/bot.js index 89c1ed2ef..4a6de2d55 100644 --- a/test/bot.js +++ b/test/bot.js @@ -12,15 +12,6 @@ mybot.login(Auth.email, Auth.password) mybot.on("ready", function () { console.log("Ready!"); - - mybot.createServer("myServer", "london").then(function(server){ - console.log("New server! Based in "+server.region+" and is called "+server.name); - - mybot.createChannel(server, "wooof", "text", function(err, chann){ - console.log(chann.name); - }); - - }); }) mybot.on("message", function (msg) {