From b5263aae0c91bf028885453f8d508592b9c4b868 Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Mon, 26 Oct 2015 15:12:08 +0000 Subject: [PATCH] Improved role creation --- lib/Client.js | 33 +++++++++++++++++++++++++++------ src/Client.js | 47 ++++++++++++++++++++++++++++++++++++----------- test/bot.1.js | 6 +++++- 3 files changed, 68 insertions(+), 18 deletions(-) diff --git a/lib/Client.js b/lib/Client.js index aae7147f8..75d3d4220 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -66,7 +66,7 @@ var Client = (function () { this.checkingQueue = {}; this.userTypingListener = {}; this.queue = {}; - + this.guildRoleCreateIgnoreList = {}; this.__idleTime = null; this.__gameId = null; } @@ -714,14 +714,15 @@ var Client = (function () { return prom; }; - Client.prototype.createRole = function createRole(dest) { - var cb = arguments.length <= 1 || arguments[1] === undefined ? function (err, perm) {} : arguments[1]; + Client.prototype.createRole = function createRole(dest, data) { + var cb = arguments.length <= 2 || arguments[2] === undefined ? function (err, perm) {} : arguments[2]; var self = this; return new Promise(function (resolve, reject) { var ddest = self.resolveServerID(dest); + var server = self.getServer("id", ddest); request.post(Endpoints.SERVERS + "/" + ddest + "/roles").set("authorization", self.token).end(function (err, res) { @@ -730,10 +731,23 @@ var Client = (function () { reject(err); } else { - var perms = self.getServer("id", ddest).addRole(res.body); + var moddedPerm = new ServerPermissions(res.body, server); - resolve(perms); - cb(null, perms); + for (var key in data) { + moddedPerm[key] = data[key]; + } + + var perms = server.addRole(res.body); + self.guildRoleCreateIgnoreList[res.body.id] = function () { + + self.updateRole(server, moddedPerm).then(function (perm) { + cb(null, perm); + resolve(perm); + })["catch"](function (err) { + cb(err); + reject(err); + }); + }; } }); }); @@ -1182,6 +1196,13 @@ var Client = (function () { var server = self.getServer("id", data.guild_id); var role = data.role; + if (self.guildRoleCreateIgnoreList[data.role.id]) { + server.addRole(role); + self.guildRoleCreateIgnoreList[data.role.id](); + self.guildRoleCreateIgnoreList[data.role.id] = null; + break; + } + self.trigger("serverRoleCreate", server, server.addRole(role)); break; diff --git a/src/Client.js b/src/Client.js index e0d7efb7d..539d0b3c1 100644 --- a/src/Client.js +++ b/src/Client.js @@ -56,7 +56,7 @@ class Client { this.checkingQueue = {}; this.userTypingListener = {}; this.queue = {}; - + this.guildRoleCreateIgnoreList = {}; this.__idleTime = null; this.__gameId = null; } @@ -759,13 +759,14 @@ class Client { return prom; } - createRole(dest, cb = function (err, perm) { }) { + createRole(dest, data, cb = function (err, perm) { }) { var self = this; return new Promise(function (resolve, reject) { var ddest = self.resolveServerID(dest); + var server = self.getServer("id", ddest); request .post(`${Endpoints.SERVERS}/${ddest}/roles`) @@ -777,10 +778,27 @@ class Client { reject(err); } else { - var perms = self.getServer("id", ddest).addRole(res.body); + var moddedPerm = new ServerPermissions(res.body, server); + + for (var key in data) { + moddedPerm[key] = data[key]; + } + + var perms = server.addRole(res.body); + self.guildRoleCreateIgnoreList[res.body.id] = function () { + + self.updateRole(server, moddedPerm) + .then((perm) => { + cb(null, perm); + resolve(perm); + }) + .catch((err) => { + cb(err); + reject(err); + }); + + } - resolve(perms); - cb(null, perms); } @@ -926,12 +944,12 @@ class Client { data.mentions = data.mentions || []; //for some reason this was not defined at some point? var channel = self.getChannel("id", data.channel_id); - + for (var mention of data.mentions) { var user = self.addUser(mention); - mentions.push( channel.server.getMember("id", user.id) || user ); + mentions.push(channel.server.getMember("id", user.id) || user); } - + if (channel) { var msg = channel.addMessage(new Message(data, channel, mentions, channel.server.getMember("id", self.addUser(data.author).id))); self.trigger("message", msg); @@ -973,7 +991,7 @@ class Client { var mentions = []; for (var mention of data.mentions) { var user = self.addUser(mention); - mentions.push( channel.server.getMember("id", user.id) || user ); + mentions.push(channel.server.getMember("id", user.id) || user); } var newMessage = new Message(info, channel, mentions, formerMessage.author); @@ -1197,6 +1215,13 @@ class Client { var server = self.getServer("id", data.guild_id); var role = data.role; + if (self.guildRoleCreateIgnoreList[data.role.id]) { + server.addRole(role); + self.guildRoleCreateIgnoreList[data.role.id](); + self.guildRoleCreateIgnoreList[data.role.id] = null; + break; + } + self.trigger("serverRoleCreate", server, server.addRole(role)); break; @@ -1472,14 +1497,14 @@ class Client { data.mentions = data.mentions || []; //for some reason this was not defined at some point? var channel = self.getChannel("id", data.channel_id); - + for (var mention of data.mentions) { var user = self.addUser(mention); mentions.push(channel.server.getMember("id", user.id) || user); } if (channel) { - var msg = channel.addMessage(new Message(data, channel, mentions, channel.server.getMember("id",data.author.id))); + var msg = channel.addMessage(new Message(data, channel, mentions, channel.server.getMember("id", data.author.id))); resolve(msg); } } diff --git a/test/bot.1.js b/test/bot.1.js index 06de0af2a..50e5d2d92 100644 --- a/test/bot.1.js +++ b/test/bot.1.js @@ -30,7 +30,11 @@ mybot.on("message", function (message) { var perms = JSON.stringify(message.channel.permissionsOf(user).serialise(), null, 4); perms = JSON.parse(perms); - mybot.reply(message, message.sender.server.name); + mybot.createRole(message.channel.server, { + color : Discord.Colors.GREEN + }).then((perm) => { + mybot.addMemberToRole(message.channel.server, perm, message.sender).then(console.log).catch(error); + }).catch(error); });