From fb3bdcf0793e86dc15f3bcefb002f2e200dab06d Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Tue, 25 Aug 2015 12:54:39 +0100 Subject: [PATCH] Added callback fallbacks, create server & channels --- lib/Client.js | 317 +++++++++++++++++++++++++++++--------------------- lib/server.js | 21 ++++ src/Client.js | 131 ++++++++++++++++----- src/server.js | 19 +++ test/bot.js | 17 ++- 5 files changed, 341 insertions(+), 164 deletions(-) diff --git a/lib/Client.js b/lib/Client.js index af1e651f1..4424c114b 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -107,6 +107,7 @@ var Client = (function () { value: function login() { var email = arguments.length <= 0 || arguments[0] === undefined ? "foo@bar.com" : arguments[0]; var password = arguments.length <= 1 || arguments[1] === undefined ? "pass1234" : arguments[1]; + var callback = arguments.length <= 2 || arguments[2] === undefined ? function (err, token) {} : arguments[2]; var self = this; @@ -125,11 +126,13 @@ var Client = (function () { self.state = 4; //set state to disconnected self.trigger("disconnected"); self.websocket.close(); + callback(err); reject(err); } else { self.state = 2; //set state to logged in (not yet ready) self.token = res.body.token; //set our token self.trySendConnData(); + callback(null, self.token); resolve(self.token); } }); @@ -141,6 +144,7 @@ var Client = (function () { }, { key: "logout", value: function logout() { + var callback = arguments.length <= 0 || arguments[0] === undefined ? function (err) {} : arguments[0]; var self = this; @@ -148,7 +152,63 @@ var Client = (function () { request.post(Endpoints.LOGOUT).set("authorization", self.token).end(function (err, res) { - if (err) reject(err);else resolve(); + if (err) { + callback(err); + reject(err); + } else { + callback(null); + resolve(); + } + }); + }); + } + }, { + key: "createServer", + value: function createServer(name, region) { + var callback = arguments.length <= 2 || arguments[2] === undefined ? function (err, server) {} : arguments[2]; + + var self = this; + return new Promise(function (resolve, reject) { + + request.post(Endpoints.SERVERS).set("authorization", self.token).send({ + name: name, + region: region + }).end(function (err, res) { + if (err) { + callback(err); + reject(err); + } else { + var srv = self.addServer(res.body); + callback(null, srv); + resolve(srv); + } + }); + }); + } + }, { + key: "createChannel", + value: function createChannel(server, channelName, channelType) { + var callback = arguments.length <= 3 || arguments[3] === undefined ? function (err, chann) {} : arguments[3]; + + var self = this; + + return new Promise(function (resolve, reject) { + + request.post(Endpoints.SERVERS + "/" + self.resolveServerID(server) + "/channels").set("authorization", self.token).send({ + name: channelName, + type: channelType + }).end(function (err, res) { + + if (err) { + callback(err); + reject(err); + } else { + var server = self.getServer("id", res.body.guild_id); + var chann = self.addChannel(res.body, res.body.guild_id); + server.addChannel(chann); + callback(null, chann); + resolve(chann); + } }); }); } @@ -205,31 +265,6 @@ var Client = (function () { var _server = _step.value; var server = self.addServer(_server); - - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = _server.channels[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var channel = _step2.value; - - server.channels.push(self.addChannel(channel, server.id)); - } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2["return"]) { - _iterator2["return"](); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } } } catch (err) { _didIteratorError = true; @@ -259,27 +294,27 @@ var Client = (function () { self.debug("received message"); var mentions = []; - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; try { - for (var _iterator3 = data.mentions[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var mention = _step3.value; + for (var _iterator2 = data.mentions[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var mention = _step2.value; mentions.push(self.addUser(mention)); } } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; + _didIteratorError2 = true; + _iteratorError2 = err; } finally { try { - if (!_iteratorNormalCompletion3 && _iterator3["return"]) { - _iterator3["return"](); + if (!_iteratorNormalCompletion2 && _iterator2["return"]) { + _iterator2["return"](); } } finally { - if (_didIteratorError3) { - throw _iteratorError3; + if (_didIteratorError2) { + throw _iteratorError2; } } } @@ -323,27 +358,27 @@ var Client = (function () { } var mentions = []; - var _iteratorNormalCompletion4 = true; - var _didIteratorError4 = false; - var _iteratorError4 = undefined; + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; try { - for (var _iterator4 = info.mentions[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { - var mention = _step4.value; + for (var _iterator3 = info.mentions[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var mention = _step3.value; mentions.push(self.addUser(mention)); } } catch (err) { - _didIteratorError4 = true; - _iteratorError4 = err; + _didIteratorError3 = true; + _iteratorError3 = err; } finally { try { - if (!_iteratorNormalCompletion4 && _iterator4["return"]) { - _iterator4["return"](); + if (!_iteratorNormalCompletion3 && _iterator3["return"]) { + _iterator3["return"](); } } finally { - if (_didIteratorError4) { - throw _iteratorError4; + if (_didIteratorError3) { + throw _iteratorError3; } } } @@ -399,31 +434,6 @@ var Client = (function () { //if server doesn't already exist because duh var serv = self.addServer(data); - - var _iteratorNormalCompletion5 = true; - var _didIteratorError5 = false; - var _iteratorError5 = undefined; - - try { - for (var _iterator5 = data.channels[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { - var channel = _step5.value; - - serv.channels.push(self.addChannel(channel, serv.id)); - } - } catch (err) { - _didIteratorError5 = true; - _iteratorError5 = err; - } finally { - try { - if (!_iteratorNormalCompletion5 && _iterator5["return"]) { - _iterator5["return"](); - } - } finally { - if (_didIteratorError5) { - throw _iteratorError5; - } - } - } } self.trigger("serverCreate", server); @@ -439,7 +449,7 @@ var Client = (function () { var chann = self.addChannel(data, data.guild_id); var srv = self.getServer("id", data.guild_id); if (srv) { - srv.channels.push(chann); + srv.addChannel(chann); } self.trigger("channelCreate", chann); } @@ -554,26 +564,91 @@ var Client = (function () { }, { key: "addServer", value: function addServer(data) { - if (!this.getServer("id", data.id)) { - this.serverCache.push(new Server(data, this)); + + var server = this.getServer("id", data.id); + + if (!server) { + server = new Server(data, this); + if (data.channels) { + 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) { + var channel = _step4.value; + + server.channels.push(this.addChannel(channel, server.id)); + } + } catch (err) { + _didIteratorError4 = true; + _iteratorError4 = err; + } finally { + try { + if (!_iteratorNormalCompletion4 && _iterator4["return"]) { + _iterator4["return"](); + } + } finally { + if (_didIteratorError4) { + throw _iteratorError4; + } + } + } + } + this.serverCache.push(server); } - return this.getServer("id", data.id); + + return server; } //def getUser }, { 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.userCache[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { - var user = _step6.value; + for (var _iterator6 = this.channelCache[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { + var channel = _step6.value; - if (user[key] === value) { - return user; + if (channel[key] === value) { + return channel; } } } catch (err) { @@ -594,20 +669,20 @@ var Client = (function () { return null; } - //def getChannel + //def getServer }, { - key: "getChannel", - value: function getChannel(key, value) { + key: "getServer", + value: function getServer(key, value) { 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; + for (var _iterator7 = this.serverCache[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { + var server = _step7.value; - if (channel[key] === value) { - return channel; + if (server[key] === value) { + return server; } } } catch (err) { @@ -628,40 +703,6 @@ 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", @@ -688,6 +729,16 @@ var Client = (function () { this.websocket.send(JSON.stringify(data)); } } + }, { + key: "resolveServerID", + value: function resolveServerID(resource) { + + if (resource instanceof Server) { + return resource.id; + } else if (!isNaN(resource) && resource.length && resource.length === 17) { + return resource; + } + } }, { key: "uptime", get: function get() { @@ -719,27 +770,27 @@ var Client = (function () { get: function get() { var msgs = []; - var _iteratorNormalCompletion9 = true; - var _didIteratorError9 = false; - var _iteratorError9 = undefined; + var _iteratorNormalCompletion8 = true; + var _didIteratorError8 = false; + var _iteratorError8 = undefined; try { - for (var _iterator9 = this.channelCache[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) { - var channel = _step9.value; + for (var _iterator8 = this.channelCache[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) { + var channel = _step8.value; msgs = msgs.concat(channel.messages); } } catch (err) { - _didIteratorError9 = true; - _iteratorError9 = err; + _didIteratorError8 = true; + _iteratorError8 = err; } finally { try { - if (!_iteratorNormalCompletion9 && _iterator9["return"]) { - _iterator9["return"](); + if (!_iteratorNormalCompletion8 && _iterator8["return"]) { + _iterator8["return"](); } } finally { - if (_didIteratorError9) { - throw _iteratorError9; + if (_didIteratorError8) { + throw _iteratorError8; } } } diff --git a/lib/server.js b/lib/server.js index 3549683de..fe02e7256 100644 --- a/lib/server.js +++ b/lib/server.js @@ -19,6 +19,11 @@ var Server = (function () { this.afkTimeout = data.afk_timeout; this.afkChannelId = data.afk_channel_id; + if (!data.members) { + data.members = [client.user]; + return; + } + var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; @@ -116,6 +121,22 @@ var Server = (function () { return null; } + }, { + key: "addChannel", + value: function addChannel(chann) { + if (!this.getChannel("id", chann.id)) { + this.channels.push(chann); + } + return chann; + } + }, { + key: "addMember", + value: function addMember(member) { + if (!this.getMember("id", member.id)) { + this.members.push(member); + } + return member; + } }, { key: "iconURL", get: function get() { diff --git a/src/Client.js b/src/Client.js index a1f616832..b70fb476b 100644 --- a/src/Client.js +++ b/src/Client.js @@ -115,14 +115,14 @@ class Client { } //def login - login(email = "foo@bar.com", password = "pass1234") { + login(email = "foo@bar.com", password = "pass1234", callback = function(err, token){}) { var self = this; this.createws(); return new Promise(function (resolve, reject) { if (self.state === 0 || self.state === 4) { - + self.state = 1; //set the state to logging in request @@ -136,43 +136,104 @@ class Client { self.state = 4; //set state to disconnected self.trigger("disconnected"); self.websocket.close(); + callback(err); reject(err); } else { self.state = 2; //set state to logged in (not yet ready) self.token = res.body.token; //set our token self.trySendConnData(); + callback(null, self.token); resolve(self.token); } }); - }else{ + } else { reject(new Error("Client already logging in or ready")); } }); } - - logout(){ - + + logout(callback = function(err){}) { + var self = this; - - return new Promise(function(resolve, reject){ - + + return new Promise(function (resolve, reject) { + request .post(Endpoints.LOGOUT) - .set( "authorization", self.token ) - .end(function(err, res){ - - if(err) + .set("authorization", self.token) + .end(function (err, res) { + + if (err){ + callback(err); reject(err); - else + }else{ + callback(null); resolve(); - + } }); - + }); - + + } + + createServer(name, region, callback = function(err, server){}) { + var self = this; + return new Promise(function (resolve, reject) { + + request + .post(Endpoints.SERVERS) + .set("authorization", self.token) + .send({ + name: name, + region: region + }) + .end(function (err, res) { + if (err) { + callback(err); + reject(err); + } else { + var srv = self.addServer(res.body); + callback(null, srv); + resolve(srv); + } + }); + + }); + } + + createChannel(server, channelName, channelType, callback = function(err, chann){}) { + + var self = this; + + return new Promise(function (resolve, reject) { + + request + .post(`${Endpoints.SERVERS}/${self.resolveServerID(server) }/channels`) + .set("authorization", self.token) + .send({ + name: channelName, + type: channelType + }) + .end(function (err, res) { + + if (err) { + callback(err); + reject(err); + } else { + var server = self.getServer("id", res.body.guild_id); + var chann = self.addChannel(res.body, res.body.guild_id); + server.addChannel(chann); + callback(null, chann); + resolve(chann); + } + + }) + + }); + } //def createws @@ -220,10 +281,6 @@ class Client { var server = self.addServer(_server); - for (var channel of _server.channels) { - server.channels.push(self.addChannel(channel, server.id)); - } - } self.trigger("ready"); self.readyTime = Date.now(); @@ -340,10 +397,6 @@ class Client { var serv = self.addServer(data); - for (var channel of data.channels) { - serv.channels.push(self.addChannel(channel, serv.id)); - } - } self.trigger("serverCreate", server); @@ -359,7 +412,7 @@ class Client { var chann = self.addChannel(data, data.guild_id); var srv = self.getServer("id", data.guild_id); if (srv) { - srv.channels.push(chann); + srv.addChannel(chann); } self.trigger("channelCreate", chann); @@ -472,10 +525,20 @@ class Client { //def addServer addServer(data) { - if (!this.getServer("id", data.id)) { - this.serverCache.push(new Server(data, this)); + + var server = this.getServer("id", data.id); + + if (!server) { + server = new Server(data, this); + if (data.channels) { + for (var channel of data.channels) { + server.channels.push(this.addChannel(channel, server.id)); + } + } + this.serverCache.push(server); } - return this.getServer("id", data.id); + + return server; } //def getUser @@ -533,6 +596,16 @@ class Client { } } + resolveServerID(resource) { + + if (resource instanceof Server) { + return resource.id; + } else if (!isNaN(resource) && resource.length && resource.length === 17) { + return resource; + } + + } + } module.exports = Client; \ No newline at end of file diff --git a/src/server.js b/src/server.js index 322db6a44..259fe9bb5 100644 --- a/src/server.js +++ b/src/server.js @@ -11,6 +11,11 @@ class Server { this.afkTimeout = data.afk_timeout; this.afkChannelId = data.afk_channel_id; + if(!data.members){ + data.members = [ client.user ]; + return; + } + for (var member of data.members) { // first we cache the user in our Discord Client, @@ -64,6 +69,20 @@ class Server { return null; } + + addChannel(chann) { + if (!this.getChannel("id", chann.id)) { + this.channels.push(chann); + } + return chann; + } + + addMember(member){ + if (!this.getMember("id", member.id)){ + this.members.push(member); + } + return member; + } } module.exports = Server; \ No newline at end of file diff --git a/test/bot.js b/test/bot.js index 101ea173a..89c1ed2ef 100644 --- a/test/bot.js +++ b/test/bot.js @@ -2,7 +2,7 @@ var Discord = require("../lib/index.js"); var Auth = require("./auth.json"); var mybot = new Discord.Client(); -mybot.login(Auth.email+"a", Auth.password) +mybot.login(Auth.email, Auth.password) .then(function (token) { console.log("wooo!"); @@ -12,6 +12,15 @@ mybot.login(Auth.email+"a", 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) { @@ -38,4 +47,8 @@ mybot.on("serverRemoveMember", function (user) { }); mybot.on("userUpdate", function (oldUser, newUser) { console.log(oldUser, "vs", newUser); -}); \ No newline at end of file +}); + +mybot.on("channelCreate", function(chann){ + console.log(chann); +}) \ No newline at end of file