From c3b6dba6bed375a68753b64fd66ecd9f356aa723 Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Wed, 28 Oct 2015 12:13:09 +0000 Subject: [PATCH] Fixed colours --- examples/permissions/colortest.js | 109 ++++++++++++++++++++++++++++++ lib/ChannelPermissions.js | 2 +- lib/Client.js | 18 ++--- lib/Member.js | 4 +- lib/index.js | 4 +- lib/server.js | 12 ++-- ref/colours.js | 84 +++++++++++++---------- src/ChannelPermissions.js | 2 +- src/Client.js | 20 +++--- src/Member.js | 4 +- src/index.js | 4 +- src/server.js | 12 ++-- 12 files changed, 194 insertions(+), 81 deletions(-) create mode 100644 examples/permissions/colortest.js diff --git a/examples/permissions/colortest.js b/examples/permissions/colortest.js new file mode 100644 index 000000000..e876e653b --- /dev/null +++ b/examples/permissions/colortest.js @@ -0,0 +1,109 @@ +/* + this bot will demonstrate the different ways you + can create colors in Discord. +*/ + +var Discord = require("../../"); + +// Get the email and password +var AuthDetails = require("../auth.json"); + +var bot = new Discord.Client(); + +bot.on("ready", function () { + console.log("Ready to begin! Serving in " + bot.channels.length + " channels"); +}); + +bot.on("disconnected", function () { + + console.log("Disconnected!"); + process.exit(1); //exit node.js with an error + +}); + +bot.on("message", function (msg) { + if (msg.content === "create role") { + // create the role and add the user to it + + bot.createRoleIfNotExists(msg.channel.server, { + name : "Custom Colors", + hoist : true, // so it is visible in the members list + }).then(function(permission){ + + bot.addMemberToRole(msg.sender, permission).then(function(){ + + bot.reply(msg, "added you to the role!"); + + }); + + }); + + } + + if (msg.content.indexOf("preset color") === 0) { + + // set the role to a preset color + var colorName = msg.content.split(" ")[2]; + var role = msg.channel.server.getRole("name", "Custom Colors"); + + if(Discord.Color[colorName]){ // if the color is a preset + + bot.updateRole(role, { + color : Discord.Color[colorName] + }).then(function(){ + bot.reply(msg, "done!"); + }); + + }else{ + bot.reply(msg, "that color isn't a preset color!"); + } + + } + + if (msg.content.indexOf("custom color") === 0) { + + var colorName = msg.content.split(" ")[2]; + var role = msg.channel.server.getRole("name", "Custom Colors"); + + bot.updateRole(role, { + color : colorName + }).then(function(){ + bot.reply(msg, "done!"); + }).catch(function(e){ + bot.reply(msg, "an error occurred. Was that a valid hex/dec color?"); + }) + + } + + if (msg.content === "remove me") { + // remove the user from the good people list, if it exists + var found = false; + + for (var role of msg.channel.server.roles) { + if (role.name === "good people") { + found = role; + break; + } + } + + if (found) { + // if the role exists + + if (msg.sender.hasRole(role)) { + // remove the member from the role + bot.removeMemberFromRole(msg.sender, role); + bot.reply(msg, "removed!") + } else { + bot.reply(msg, "you're not in the role!"); + } + + } else { + // role doesn't exist + bot.reply(msg, "the role doesn't even exist!"); + } + + } + +}); + +bot.login(AuthDetails.email, AuthDetails.password); \ No newline at end of file diff --git a/lib/ChannelPermissions.js b/lib/ChannelPermissions.js index 5bf808ff2..ed5e4ae25 100644 --- a/lib/ChannelPermissions.js +++ b/lib/ChannelPermissions.js @@ -20,7 +20,7 @@ var ChannelPermissions = (function () { if (this.type === "member") { this.packed = channel.server.getMember("id", data.id).evalPerms.packed; } else { - this.packed = channel.server.getRole(data.id).packed; + this.packed = channel.server.getRole("id", data.id).packed; } this.packed = this.packed & ~data.deny; diff --git a/lib/Client.js b/lib/Client.js index 5e5d21d11..e8a4920c9 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -16,6 +16,7 @@ var Invite = require("./invite.js"); var PMChannel = require("./PMChannel.js"); var ServerPermissions = require("./ServerPermissions.js"); var gameMap = require("../ref/gameMap.json"); +var Color = require("../ref/colours.js"); var zlib; var EventEmitter = require('events'); @@ -824,16 +825,11 @@ var Client = (function (_EventEmitter) { var server = role.server.id; - var modRole = role; - for (var key in data) { - modRole[key] = data[key]; - } - request.patch(Endpoints.SERVERS + "/" + server + "/roles/" + role.id).set("authorization", self.token).send({ - color: modRole.color, - hoist: modRole.hoist, - name: modRole.name, - permissions: modRole.packed + color: Color.toDec(data.color) || role.color, + hoist: data.hoist || role.hoist, + name: data.name || role.name, + permissions: data.packed || role.packed }).end(function (err, res) { if (err) { cb(err); @@ -1479,7 +1475,7 @@ var Client = (function (_EventEmitter) { case "GUILD_ROLE_DELETE": var server = self.getServer("id", data.guild_id); - var role = server.getRole(data.role_id); + var role = server.getRole("id", data.role_id); self.emit("serverRoleDelete", server, role); @@ -1490,7 +1486,7 @@ var Client = (function (_EventEmitter) { case "GUILD_ROLE_UPDATE": var server = self.getServer("id", data.guild_id); - var role = server.getRole(data.role.id); + var role = server.getRole("id", data.role.id); var newRole = server.updateRole(data.role); self.emit("serverRoleUpdate", server, role, newRole); diff --git a/lib/Member.js b/lib/Member.js index 992c6a6f3..5cd826f3e 100644 --- a/lib/Member.js +++ b/lib/Member.js @@ -130,7 +130,7 @@ var Member = (function (_User) { key: "roles", get: function get() { - var ufRoles = [this.server.getRole(this.server.id)]; + var ufRoles = [this.server.getRole("id", this.server.id)]; for (var _iterator5 = this.rawRoles, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) { var _ref5; @@ -146,7 +146,7 @@ var Member = (function (_User) { var rawRole = _ref5; - ufRoles.push(this.server.getRole(rawRole)); + ufRoles.push(this.server.getRole("id", rawRole)); } return ufRoles; diff --git a/lib/index.js b/lib/index.js index 7b87e7245..337bc2b7b 100644 --- a/lib/index.js +++ b/lib/index.js @@ -3,12 +3,12 @@ var request = require("superagent"); var Endpoints = require("./Endpoints.js"); var Client = require("./Client.js"); -var Colors = require("../ref/colours.js"); +var Color = require("../ref/colours.js"); var Discord = { Endpoints: Endpoints, Client: Client, - Colors: Colors, + Color: Color, User: require("./user.js"), Server: require("./server.js"), Channel: require("./channel.js"), diff --git a/lib/server.js b/lib/server.js index 0bad69c64..261ce66ca 100644 --- a/lib/server.js +++ b/lib/server.js @@ -71,7 +71,7 @@ var Server = (function () { // get/set - Server.prototype.getRole = function getRole(id) { + Server.prototype.getRole = function getRole(key, value) { for (var _iterator3 = this.roles, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) { var _ref3; @@ -86,7 +86,7 @@ var Server = (function () { var role = _ref3; - if (role.id == id) { + if (role[key] === value) { return role; } } @@ -96,18 +96,18 @@ var Server = (function () { Server.prototype.addRole = function addRole(data) { - if (this.getRole(data.id)) { - return this.getRole(data.id); + if (this.getRole("id", data.id)) { + return this.getRole("id", data.id); } - var perms = new ServerPermissions(data); + var perms = new ServerPermissions(data, this); this.roles.push(perms); return perms; }; Server.prototype.updateRole = function updateRole(data) { - var oldRole = this.getRole(data.id); + var oldRole = this.getRole("id", data.id); if (oldRole) { var index = this.roles.indexOf(oldRole); diff --git a/ref/colours.js b/ref/colours.js index bc1bb1674..2c6bf59b3 100644 --- a/ref/colours.js +++ b/ref/colours.js @@ -2,49 +2,61 @@ credits to izy521 for the colour list https://github.com/izy521/discord.io/blob/master/docs/colors.md */ -module.exports = { - DEFAULT: 0, - AQUA: 1752220, - GREEN: 3066993, - BLUE: 3447003, - PURPLE: 10181046, - GOLD: 15844367, - ORANGE: 15105570, - RED: 15158332, - GREY: 9807270, - DARKER_GREY: 8359053, - NAVY: 3426654, - DARK_AQUA: 1146986, - DARK_GREEN: 2067276, - DARK_BLUE: 2123412, - DARK_PURPLE: 7419530, - DARK_GOLD: 12745742, - DARK_ORANGE: 11027200, - DARK_RED: 10038562, - DARK_GREY: 9936031, - LIGHT_GREY: 12370112, - DARK_NAVY: 2899536 -} +exports.DEFAULT = 0; +exports.AQUA = 1752220; +exports.GREEN= 3066993; +exports.BLUE= 3447003; +exports.PURPLE= 10181046; +exports.GOLD= 15844367; +exports.ORANGE= 15105570; +exports.RED= 15158332; +exports.GREY= 9807270; +exports.DARKER_GREY= 8359053; +exports.NAVY= 3426654; +exports.DARK_AQUA= 1146986; +exports.DARK_GREEN= 2067276; +exports.DARK_BLUE= 2123412; +exports.DARK_PURPLE= 7419530; +exports.DARK_GOLD= 12745742; +exports.DARK_ORANGE= 11027200; +exports.DARK_RED= 10038562; +exports.DARK_GREY= 9936031; +exports.LIGHT_GREY= 12370112; +exports.DARK_NAVY= 2899536; + +exports.toDec = function (data) { + var hextest = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i; -exports.toDec = function(data){ - var hextest = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/; - var num; - - if(hextest.test(data)){ + + if (hextest.test(data)) { // it's a hex number with a # in front - num = data.substr(1).toString(10); - }else if(hextest.test("#" + data)){ + + // there's a bug in discord as of 28/10/15, where any + // hex colors beginning with a 0 do not render properly. + // this is a temporary fix, and it does mean that you won't + // get correct colors all the time, although it is barely noticeable. + if(data.charAt(1) === "0"){ + var tdata = data.split(""); + tdata[1] = 1; + data = tdata.join(""); + } + + num = parseInt(data.substr(1), 16).toString(10); + } else if (hextest.test("#" + data)) { // it's a hex number with no # in front - num = data.toString(10); - }else{ + num = parseInt(data, 16).toString(10); + } else { num = data.toString(10); } - return num; + + console.log(num); + + return parseInt(num); } -exports.toHex = function(data){ - +exports.toHex = function (data) { + return "#" + data.toString(16); - + } \ No newline at end of file diff --git a/src/ChannelPermissions.js b/src/ChannelPermissions.js index 3f8317ae2..83b7bed0b 100644 --- a/src/ChannelPermissions.js +++ b/src/ChannelPermissions.js @@ -13,7 +13,7 @@ class ChannelPermissions { if (this.type === "member") { this.packed = channel.server.getMember("id", data.id).evalPerms.packed; } else { - this.packed = channel.server.getRole(data.id).packed; + this.packed = channel.server.getRole("id", data.id).packed; } this.packed = this.packed & ~data.deny; diff --git a/src/Client.js b/src/Client.js index e6e57eb6a..c6e6c6631 100644 --- a/src/Client.js +++ b/src/Client.js @@ -8,6 +8,7 @@ var Invite = require("./invite.js"); var PMChannel = require("./PMChannel.js"); var ServerPermissions = require("./ServerPermissions.js"); var gameMap = require("../ref/gameMap.json"); +var Color = require("../ref/colours.js"); var zlib; var EventEmitter = require('events'); @@ -873,26 +874,21 @@ class Client extends EventEmitter { var server = role.server.id; - var modRole = role; - for (var key in data) { - modRole[key] = data[key]; - } - request .patch(`${Endpoints.SERVERS}/${server}/roles/${role.id}`) .set("authorization", self.token) .send({ - color: modRole.color, - hoist: modRole.hoist, - name: modRole.name, - permissions: modRole.packed + color: Color.toDec(data.color) || role.color, + hoist: data.hoist || role.hoist, + name: data.name || role.name, + permissions: data.packed || role.packed }) .end(function (err, res) { if (err) { cb(err); reject(err); } else { - + var data = self.getServer("id", server).updateRole(res.body); resolve(data); cb(null, data); @@ -1510,7 +1506,7 @@ class Client extends EventEmitter { case "GUILD_ROLE_DELETE": var server = self.getServer("id", data.guild_id); - var role = server.getRole(data.role_id); + var role = server.getRole("id", data.role_id); self.emit("serverRoleDelete", server, role); @@ -1521,7 +1517,7 @@ class Client extends EventEmitter { case "GUILD_ROLE_UPDATE": var server = self.getServer("id", data.guild_id); - var role = server.getRole(data.role.id); + var role = server.getRole("id", data.role.id); var newRole = server.updateRole(data.role); self.emit("serverRoleUpdate", server, role, newRole); diff --git a/src/Member.js b/src/Member.js index a18e0de86..875521568 100644 --- a/src/Member.js +++ b/src/Member.js @@ -12,10 +12,10 @@ class Member extends User{ get roles(){ - var ufRoles = [ this.server.getRole(this.server.id) ]; + var ufRoles = [ this.server.getRole("id", this.server.id) ]; for(var rawRole of this.rawRoles){ - ufRoles.push( this.server.getRole(rawRole) ); + ufRoles.push( this.server.getRole("id", rawRole) ); } return ufRoles; diff --git a/src/index.js b/src/index.js index 2967b8f3d..062ea94df 100644 --- a/src/index.js +++ b/src/index.js @@ -1,12 +1,12 @@ var request = require("superagent"); var Endpoints = require("./Endpoints.js"); var Client = require("./Client.js"); -var Colors = require("../ref/colours.js"); +var Color = require("../ref/colours.js"); var Discord = { Endpoints : Endpoints, Client : Client, - Colors : Colors, + Color : Color, User : require("./user.js"), Server : require("./server.js"), Channel : require("./channel.js"), diff --git a/src/server.js b/src/server.js index 99401db65..ddc67d90b 100644 --- a/src/server.js +++ b/src/server.js @@ -73,9 +73,9 @@ class Server { // get/set - getRole(id){ + getRole(key, value){ for (var role of this.roles) { - if (role.id == id) { + if (role[key] === value) { return role; } } @@ -85,11 +85,11 @@ class Server { addRole(data){ - if(this.getRole(data.id)){ - return this.getRole(data.id); + if(this.getRole("id", data.id)){ + return this.getRole("id", data.id); } - var perms = new ServerPermissions(data); + var perms = new ServerPermissions(data, this); this.roles.push(perms); return perms; @@ -97,7 +97,7 @@ class Server { updateRole(data){ - var oldRole = this.getRole(data.id); + var oldRole = this.getRole("id", data.id); if(oldRole){ var index = this.roles.indexOf(oldRole);