From e54da0028259488f5a5d0c46a6b60613732e0509 Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Thu, 5 Nov 2015 17:37:27 +0000 Subject: [PATCH] added createRole, updateRole and deleteRole --- lib/Client/Client.js | 40 ++++++++++++ lib/Client/InternalClient.js | 114 ++++++++++++++++++++++++++++++++--- lib/index.js | 18 ++++-- src/Client/Client.js | 41 +++++++++++++ src/Client/InternalClient.js | 96 ++++++++++++++++++++++++++++- src/index.js | 22 +++++-- 6 files changed, 310 insertions(+), 21 deletions(-) diff --git a/lib/Client/Client.js b/lib/Client/Client.js index 6b998cd6b..8368408fd 100644 --- a/lib/Client/Client.js +++ b/lib/Client/Client.js @@ -325,6 +325,46 @@ var Client = (function (_EventEmitter) { }); }; + //def createRole + + Client.prototype.createRole = function createRole(server) { + var data = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1]; + var callback = arguments.length <= 2 || arguments[2] === undefined ? function (err, res) {} : arguments[2]; + + var self = this; + return new Promise(function (resolve, reject) { + if (typeof data === "function") { + // data is the callback + callback = data; + } + self.internal.createRole(server, data).then(function (role) { + callback(null, role); + resolve(role); + })["catch"](function (e) { + callback(e); + reject(e); + }); + }); + }; + + //def deleteRole + + Client.prototype.deleteRole = function deleteRole(role) { + var callback = arguments.length <= 1 || arguments[1] === undefined ? function (err) {} : arguments[1]; + + var self = this; + return new Promise(function (resolve, reject) { + + self.internal.deleteRole(role).then(function () { + callback(); + resolve(); + })["catch"](function (e) { + callback(e); + reject(e); + }); + }); + }; + return Client; })(EventEmitter); diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index 873668dbd..54a197bf2 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -456,6 +456,100 @@ var InternalClient = (function () { }); }; + // def createRole + + InternalClient.prototype.createRole = function createRole(server, data) { + var self = this; + return new Promise(function (resolve, reject) { + + server = self.resolver.resolveServer(server); + + request.post(Endpoints.SERVER_ROLES(server.id)).set("authorization", self.token).end(function (err, res) { + if (err) { + reject(err); + } else { + + var role = server.roles.add(new Role(res.body, server, self.client)); + + if (data) { + + self.updateRole(role, data).then(resolve)["catch"](reject); + } else { + resolve(role); + } + } + }); + }); + }; + + // def updateRole + + InternalClient.prototype.updateRole = function updateRole(role, data) { + var self = this; + data = data || {}; + data.permissions = data.permissions || []; + return new Promise(function (resolve, reject) { + + var server = self.resolver.resolveServer(role.server); + + var permissions = 0; + for (var _iterator2 = data.permissions, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { + var _ref2; + + if (_isArray2) { + if (_i2 >= _iterator2.length) break; + _ref2 = _iterator2[_i2++]; + } else { + _i2 = _iterator2.next(); + if (_i2.done) break; + _ref2 = _i2.value; + } + + var perm = _ref2; + + if (perm instanceof String || typeof perm === "string") { + permissions |= Constants.Permissions[perm] || 0; + } else { + permissions |= perm; + } + } + + data.color = data.color || 0; + + request.patch(Endpoints.SERVER_ROLES(server.id) + "/" + role.id).set("authorization", self.token).send({ + color: data.color || role.color, + hoist: data.hoist || role.hoist, + name: data.name || role.name, + permissions: permissions + }).end(function (err, res) { + if (err) { + reject(err); + } else { + var nrole = new Role(res.body, server, self.client); + resolve(server.roles.update(role, nrole)); + } + }); + }); + }; + + // def deleteRole + + InternalClient.prototype.deleteRole = function deleteRole(role) { + var self = this; + return new Promise(function (resolve, reject) { + + request.del(Endpoints.SERVER_ROLES(role.server.id) + "/" + role.id).set("authorization", self.token).end(function (err, res) { + if (err) { + reject(err); + } else { + resolve(); + // the ws cache will handle it + // role.server.roles.remove(role); + } + }); + }); + }; + InternalClient.prototype.sendWS = function sendWS(object) { if (this.websocket) this.websocket.send(JSON.stringify(object)); }; @@ -593,19 +687,19 @@ var InternalClient = (function () { var server = self.servers.get("id", data.id); if (server) { - for (var _iterator2 = server.channels, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { - var _ref2; + for (var _iterator3 = server.channels, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) { + var _ref3; - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; + if (_isArray3) { + if (_i3 >= _iterator3.length) break; + _ref3 = _iterator3[_i3++]; } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; + _i3 = _iterator3.next(); + if (_i3.done) break; + _ref3 = _i3.value; } - var channel = _ref2; + var channel = _ref3; self.channels.remove(channel); } @@ -841,7 +935,7 @@ var InternalClient = (function () { client.emit("userTypingStart", user, channel); } setTimeout(function () { - if (Date.now() - user.typing.since > 5990) { + if (Date.now() - user.typing.since > 5500) { // they haven't typed since user.typing.since = null; user.typing.channel = null; diff --git a/lib/index.js b/lib/index.js index f7a95f082..2f30c0abc 100644 --- a/lib/index.js +++ b/lib/index.js @@ -13,10 +13,20 @@ a.on("warn", function (m) { }); a.on("message", function (m) { - if (m.content === "$$$") a.createChannel(m.channel.server, "quackducks").then(function (c) { - - a.sendMessage(c, "I'm alive!"); - }); + if (m.content === "$$$") { + a.createRole(m.channel.server, { + name: "a_role!", + color: 0xFF0000, + hoist: true, + permissions: ["manageRoles"] + }).then(function (role) { + a.deleteRole(role).then(function () { + a.reply(m, "deleted!"); + }); + })["catch"](function (e) { + console.log(e.stack); + }); + } }); a.on("userTypingStart", function (user, chan) { console.log(user.username + " typing"); diff --git a/src/Client/Client.js b/src/Client/Client.js index f18ef6959..d49c2cff7 100644 --- a/src/Client/Client.js +++ b/src/Client/Client.js @@ -298,6 +298,47 @@ class Client extends EventEmitter { }); } + + //def createRole + createRole(server, data=null, callback=function(err,res){}){ + var self = this; + return new Promise((resolve, reject)=>{ + if (typeof data === "function") { + // data is the callback + callback = data; + } + self.internal.createRole(server, data) + .then((role) => { + callback(null, role); + resolve(role); + }) + .catch(e => { + callback(e); + reject(e); + }); + + }); + } + + //def deleteRole + deleteRole(role, callback=function(err){}){ + + var self = this; + return new Promise((resolve, reject) => { + + self.internal.deleteRole(role) + .then(() => { + callback(); + resolve(); + }) + .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 8f2a12759..5816c1109 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -490,6 +490,100 @@ class InternalClient { }); } + // def createRole + createRole(server, data){ + var self = this; + return new Promise((resolve, reject) => { + + server = self.resolver.resolveServer(server); + + request + .post(Endpoints.SERVER_ROLES(server.id)) + .set("authorization", self.token) + .end( (err, res) => { + if(err){ + reject(err); + }else{ + + var role = server.roles.add(new Role(res.body, server, self.client)); + + if(data){ + + self.updateRole(role, data) + .then(resolve) + .catch(reject); + + }else{ + resolve(role); + } + + } + }); + + }); + } + // def updateRole + updateRole(role, data){ + var self = this; + data = data || {}; + data.permissions = data.permissions || []; + return new Promise((resolve, reject) => { + + var server = self.resolver.resolveServer(role.server); + + var permissions = 0; + for(var perm of data.permissions){ + if(perm instanceof String || typeof perm === "string"){ + permissions |= (Constants.Permissions[perm] || 0); + }else{ + permissions |= perm; + } + } + + data.color = data.color || 0; + + request + .patch(Endpoints.SERVER_ROLES(server.id)+"/"+role.id) + .set("authorization", self.token) + .send({ + color : data.color || role.color, + hoist : data.hoist || role.hoist, + name : data.name || role.name, + permissions : permissions + }) + .end((err, res) => { + if(err){ + reject(err); + }else{ + var nrole = new Role(res.body, server, self.client); + resolve( + server.roles.update(role, nrole) + ); + } + }); + + }); + } + // def deleteRole + deleteRole(role){ + var self = this; + return new Promise((resolve, reject) => { + + request + .del(Endpoints.SERVER_ROLES(role.server.id)+"/"+role.id) + .set("authorization", self.token) + .end((err, res) => { + if(err){ + reject(err); + }else{ + resolve(); + // the ws cache will handle it + // role.server.roles.remove(role); + } + }); + + }); + } sendWS(object) { if (this.websocket) @@ -874,7 +968,7 @@ class InternalClient { client.emit("userTypingStart", user, channel); } setTimeout(() => { - if (Date.now() - user.typing.since > 5990) { + if (Date.now() - user.typing.since > 5500) { // they haven't typed since user.typing.since = null; user.typing.channel = null; diff --git a/src/index.js b/src/index.js index 43561bc30..e47e33702 100644 --- a/src/index.js +++ b/src/index.js @@ -7,12 +7,22 @@ a.on("debug", (m) => console.log("[debug]",m)); a.on("warn", (m) => console.log("[warn]", m)); a.on("message", m => { - if(m.content === "$$$") - a.createChannel(m.channel.server, "quackducks").then( c => { - - a.sendMessage(c, "I'm alive!"); - - } ); + if(m.content === "$$$"){ + a.createRole(m.channel.server, { + name : "a_role!", + color : 0xFF0000, + hoist : true, + permissions : [ + "manageRoles" + ] + }).then( role => { + a.deleteRole(role).then(() => { + a.reply(m, "deleted!"); + }) + }).catch( e => { + console.log(e.stack) + }); + } }); a.on("userTypingStart", (user, chan) => { console.log(user.username + " typing");