From f8bf945f9d1737d7e5d4963e82bf597126ff2492 Mon Sep 17 00:00:00 2001 From: abalabahaha Date: Tue, 31 May 2016 10:59:05 -0700 Subject: [PATCH] serverChannel.permissionsOf() can take a role --- docs/docs_serverchannel.rst | 4 ++-- lib/Structures/ServerChannel.js | 26 +++++++++++++++++++------- src/Structures/ServerChannel.js | 28 ++++++++++++++++++++-------- 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/docs/docs_serverchannel.rst b/docs/docs_serverchannel.rst index 13bfb5c52..fbb8598e4 100644 --- a/docs/docs_serverchannel.rst +++ b/docs/docs_serverchannel.rst @@ -40,12 +40,12 @@ Server_ the channel belongs to. Functions --------- -permissionsOf(user) +permissionsOf(userOrRole) ~~~~~~~~~~~~~~~~~~~ **Aliases:** permsOf -Returns a ChannelPermissions_ object of a user's permissions in that channel. +Returns a ChannelPermissions_ object of a user or role's permissions in that channel. mention() ~~~~~~~~~ diff --git a/lib/Structures/ServerChannel.js b/lib/Structures/ServerChannel.js index cf29f9334..e299920ba 100644 --- a/lib/Structures/ServerChannel.js +++ b/lib/Structures/ServerChannel.js @@ -47,15 +47,15 @@ var ServerChannel = (function (_Channel) { } } - ServerChannel.prototype.permissionsOf = function permissionsOf(user) { - user = this.client.internal.resolver.resolveUser(user); - if (user) { - if (this.server.ownerID === user.id) { + ServerChannel.prototype.permissionsOf = function permissionsOf(userOrRole) { + userOrRole = this.client.internal.resolver.resolveUser(userOrRole); + if (userOrRole) { + if (this.server.ownerID === userOrRole.id) { return new _ChannelPermissions2["default"](4294967295); } var everyoneRole = this.server.roles.get("id", this.server.id); - var userRoles = [everyoneRole].concat(this.server.rolesOf(user) || []); + var userRoles = [everyoneRole].concat(this.server.rolesOf(userOrRole) || []); var userRolesID = userRoles.filter(function (v) { return !!v; }).map(function (v) { @@ -65,7 +65,7 @@ var ServerChannel = (function (_Channel) { memberOverwrites = []; this.permissionOverwrites.forEach(function (overwrite) { - if (overwrite.type === "member" && overwrite.id === user.id) { + if (overwrite.type === "member" && overwrite.id === userOrRole.id) { memberOverwrites.push(overwrite); } else if (overwrite.type === "role" && ~userRolesID.indexOf(overwrite.id)) { roleOverwrites.push(overwrite); @@ -115,7 +115,19 @@ var ServerChannel = (function (_Channel) { return new _ChannelPermissions2["default"](permissions); } else { - return null; + userOrRole = this.client.internal.resolver.resolveRole(userOrRole); + if (userOrRole) { + var permissions = this.server.roles.get("id", this.server.id).permissions | userOrRole.permissions; + var overwrite = this.permissionOverwrites.get("id", this.server.id); + permissions = permissions & ~overwrite.deny | overwrite.allow; + overwrite = this.permissionOverwrites.get("id", userOrRole.id); + if (overwrite) { + permissions = permissions & ~overwrite.deny | overwrite.allow; + } + return new _ChannelPermissions2["default"](permissions); + } else { + return null; + } } }; diff --git a/src/Structures/ServerChannel.js b/src/Structures/ServerChannel.js index 70aeb0d1f..19f20484f 100644 --- a/src/Structures/ServerChannel.js +++ b/src/Structures/ServerChannel.js @@ -21,20 +21,20 @@ export default class ServerChannel extends Channel{ } } - permissionsOf(user){ - user = this.client.internal.resolver.resolveUser(user); - if (user) { - if (this.server.ownerID === user.id) { + permissionsOf(userOrRole){ + userOrRole = this.client.internal.resolver.resolveUser(userOrRole); + if (userOrRole) { + if (this.server.ownerID === userOrRole.id) { return new ChannelPermissions(4294967295); } var everyoneRole = this.server.roles.get("id", this.server.id); - var userRoles = [everyoneRole].concat(this.server.rolesOf(user) || []); + var userRoles = [everyoneRole].concat(this.server.rolesOf(userOrRole) || []); var userRolesID = userRoles.filter((v) => !!v).map((v) => v.id); var roleOverwrites = [], memberOverwrites = []; this.permissionOverwrites.forEach((overwrite) => { - if (overwrite.type === "member" && overwrite.id === user.id) { + if (overwrite.type === "member" && overwrite.id === userOrRole.id) { memberOverwrites.push(overwrite); } else if (overwrite.type === "role" && ~userRolesID.indexOf(overwrite.id)) { roleOverwrites.push(overwrite); @@ -58,8 +58,20 @@ export default class ServerChannel extends Channel{ return new ChannelPermissions(permissions); - }else{ - return null; + } else { + userOrRole = this.client.internal.resolver.resolveRole(userOrRole); + if (userOrRole) { + var permissions = this.server.roles.get("id", this.server.id).permissions | userOrRole.permissions; + var overwrite = this.permissionOverwrites.get("id", this.server.id); + permissions = (permissions & ~overwrite.deny) | overwrite.allow; + overwrite = this.permissionOverwrites.get("id", userOrRole.id); + if (overwrite) { + permissions = (permissions & ~overwrite.deny) | overwrite.allow; + } + return new ChannelPermissions(permissions); + } else { + return null; + } } }