diff --git a/lib/ChannelPermissions.js b/lib/ChannelPermissions.js index 5193b5938..e163b37e7 100644 --- a/lib/ChannelPermissions.js +++ b/lib/ChannelPermissions.js @@ -30,6 +30,28 @@ var ChannelPermissions = (function () { this.allow = data.allow; } + ChannelPermissions.prototype.serialise = function serialise() { + return { + createInstantInvite: this.createInstantInvite, + manageRoles: this.manageRoles, + manageChannels: this.manageChannels, + readMessages: this.readMessages, + sendMessages: this.sendMessage, + sendTTSMessages: this.sendTTSMessages, + manageMessages: this.manageMessages, + embedLinks: this.embedLinks, + attachFiles: this.attachFiles, + readMessageHistory: this.readMessageHistory, + mentionEveryone: this.mentionEveryone, + voiceConnect: this.voiceConnect, + voiceSpeak: this.voiceSpeak, + voiceMuteMembers: this.voiceMuteMembers, + voiceDeafenMembers: this.voiceDeafenMembers, + voiceMoveMember: this.voiceMoveMembers, + voiceUseVoiceActivation: this.voiceUseVoiceActivation + }; + }; + ChannelPermissions.prototype.getBit = function getBit(x) { return (this.packed >>> x & 1) === 1; }; diff --git a/lib/Client.js b/lib/Client.js index 6f5b8eb32..0ad98abee 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -712,6 +712,30 @@ var Client = (function () { return prom; }; + Client.prototype.createRole = function createRole(server) { + var cb = arguments.length <= 1 || arguments[1] === undefined ? function (err, perm) {} : arguments[1]; + + var self = this; + + return new Promise(function (resolve, reject) { + + server = self.resolveServerID(server); + + request.post(Endpoints.SERVERS + "/" + server + "/roles").set("authorization", self.token).end(function (err, res) { + + if (err) { + cb(err); + reject(err); + } else { + + var data = self.getServer("id", server).addRole(res.body); + resolve(data); + cb(null, data); + } + }); + }); + }; + //def createws Client.prototype.createws = function createws(url) { @@ -1089,6 +1113,17 @@ var Client = (function () { break; + case "GUILD_ROLE_CREATE": + + var server = self.getServer("id", data.guild_id); + var role = data.role; + + self.trigger("serverRoleCreate", server, server.addRole(role)); + + server.removeRole(role.id); + + break; + case "GUILD_ROLE_DELETE": var server = self.getServer("id", data.guild_id); diff --git a/lib/ServerPermissions.js b/lib/ServerPermissions.js index 6384f759b..45b4c3642 100644 --- a/lib/ServerPermissions.js +++ b/lib/ServerPermissions.js @@ -19,6 +19,28 @@ var ServerPermissions = (function () { this.id = data.id; } + ServerPermissions.prototype.serialise = function serialise() { + return { + createInstantInvite: this.createInstantInvite, + manageRoles: this.manageRoles, + manageChannels: this.manageChannels, + readMessages: this.readMessages, + sendMessages: this.sendMessage, + sendTTSMessages: this.sendTTSMessages, + manageMessages: this.manageMessages, + embedLinks: this.embedLinks, + attachFiles: this.attachFiles, + readMessageHistory: this.readMessageHistory, + mentionEveryone: this.mentionEveryone, + voiceConnect: this.voiceConnect, + voiceSpeak: this.voiceSpeak, + voiceMuteMembers: this.voiceMuteMembers, + voiceDeafenMembers: this.voiceDeafenMembers, + voiceMoveMember: this.voiceMoveMembers, + voiceUseVoiceActivation: this.voiceUseVoiceActivation + }; + }; + ServerPermissions.prototype.getBit = function getBit(x) { return (this.packed >>> x & 1) === 1; }; diff --git a/lib/server.js b/lib/server.js index 46676d5eb..fe56aaa33 100644 --- a/lib/server.js +++ b/lib/server.js @@ -94,6 +94,17 @@ var Server = (function () { return null; }; + Server.prototype.addRole = function addRole(data) { + + if (this.getRole(data.id)) { + return this.getRole(data.id); + } + + var perms = new ServerPermissions(data); + this.roles.push(perms); + return perms; + }; + Server.prototype.updateRole = function updateRole(data) { var oldRole = this.getRole(data.id); diff --git a/src/ChannelPermissions.js b/src/ChannelPermissions.js index 9d6dce2e4..215a7ad50 100644 --- a/src/ChannelPermissions.js +++ b/src/ChannelPermissions.js @@ -24,6 +24,28 @@ class ChannelPermissions{ } + serialise() { + return { + createInstantInvite : this.createInstantInvite, + manageRoles : this.manageRoles, + manageChannels : this.manageChannels, + readMessages : this.readMessages, + sendMessages : this.sendMessage, + sendTTSMessages : this.sendTTSMessages, + manageMessages : this.manageMessages, + embedLinks : this.embedLinks, + attachFiles : this.attachFiles, + readMessageHistory : this.readMessageHistory, + mentionEveryone : this.mentionEveryone, + voiceConnect : this.voiceConnect, + voiceSpeak : this.voiceSpeak, + voiceMuteMembers : this.voiceMuteMembers, + voiceDeafenMembers : this.voiceDeafenMembers, + voiceMoveMember : this.voiceMoveMembers, + voiceUseVoiceActivation : this.voiceUseVoiceActivation + } + } + get createInstantInvite(){return this.getBit(0);} set createInstantInvite(val){this.setBit(0, val);} diff --git a/src/Client.js b/src/Client.js index b51a9d446..c85211876 100644 --- a/src/Client.js +++ b/src/Client.js @@ -757,6 +757,36 @@ class Client { return prom; } + createRole(server, cb = function(err, perm){}){ + + var self = this; + + return new Promise(function(resolve, reject){ + + server = self.resolveServerID(server); + + request + .post(`${Endpoints.SERVERS}/${server}/roles`) + .set("authorization", self.token) + .end(function(err, res){ + + if(err){ + cb(err); + reject(err); + }else{ + + var data = self.getServer("id", server).addRole(res.body); + resolve(data); + cb(null, data); + + } + + }); + + }); + + } + //def createws createws(url) { if (this.websocket) @@ -1088,6 +1118,17 @@ class Client { break; + case "GUILD_ROLE_CREATE": + + var server = self.getServer("id", data.guild_id); + var role = data.role; + + self.trigger("serverRoleCreate", server, server.addRole(role)); + + server.removeRole(role.id); + + break; + case "GUILD_ROLE_DELETE": var server = self.getServer("id", data.guild_id); diff --git a/src/ServerPermissions.js b/src/ServerPermissions.js index b3fd848ae..a9c00f101 100644 --- a/src/ServerPermissions.js +++ b/src/ServerPermissions.js @@ -14,6 +14,28 @@ class ServerPermissions { } + serialise() { + return { + createInstantInvite : this.createInstantInvite, + manageRoles : this.manageRoles, + manageChannels : this.manageChannels, + readMessages : this.readMessages, + sendMessages : this.sendMessage, + sendTTSMessages : this.sendTTSMessages, + manageMessages : this.manageMessages, + embedLinks : this.embedLinks, + attachFiles : this.attachFiles, + readMessageHistory : this.readMessageHistory, + mentionEveryone : this.mentionEveryone, + voiceConnect : this.voiceConnect, + voiceSpeak : this.voiceSpeak, + voiceMuteMembers : this.voiceMuteMembers, + voiceDeafenMembers : this.voiceDeafenMembers, + voiceMoveMember : this.voiceMoveMembers, + voiceUseVoiceActivation : this.voiceUseVoiceActivation + } + } + get createInstantInvite(){return this.getBit(0);} set createInstantInvite(val){this.setBit(0, val);} diff --git a/src/server.js b/src/server.js index 458afa5e2..a21e4b987 100644 --- a/src/server.js +++ b/src/server.js @@ -83,6 +83,18 @@ class Server { return null; } + addRole(data){ + + if(this.getRole(data.id)){ + return this.getRole(data.id); + } + + var perms = new ServerPermissions(data); + this.roles.push(perms); + return perms; + + } + updateRole(data){ var oldRole = this.getRole(data.id); diff --git a/test/bot.1.js b/test/bot.1.js index b607701eb..3ff02710f 100644 --- a/test/bot.1.js +++ b/test/bot.1.js @@ -30,10 +30,8 @@ mybot.on("message", function (message) { var perms = JSON.stringify(message.channel.permissionsOf(user).serialise(), null, 4); perms = JSON.parse(perms); - request.get(message.sender.avatarURL, function(err, resp, body){ - mybot.setAvatar( new Buffer(body) ).catch(error).then(() => { - mybot.reply(message, "I have your avatar now!"); - }); + this.createRole(message.channel.server).catch(error).then((data) => { + mybot.reply(message, JSON.stringify(data.serialise(), null, 4)); }); });