From afdb93b3d605082119fbd38667b45ba3bef71844 Mon Sep 17 00:00:00 2001 From: abalabahaha Date: Sat, 19 Mar 2016 22:03:17 -0700 Subject: [PATCH] Let overwritePermissions keep existing permissions --- lib/Client/InternalClient.js | 54 +++++++++++++++++++----------------- src/Client/InternalClient.js | 51 +++++++++++++++++----------------- 2 files changed, 53 insertions(+), 52 deletions(-) diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index 49b919e44..ec4a87bc7 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -42,6 +42,10 @@ var _StructuresChannel = require("../Structures/Channel"); var _StructuresChannel2 = _interopRequireDefault(_StructuresChannel); +var _StructuresServerChannel = require("../Structures/ServerChannel"); + +var _StructuresServerChannel2 = _interopRequireDefault(_StructuresServerChannel); + var _StructuresTextChannel = require("../Structures/TextChannel"); var _StructuresTextChannel2 = _interopRequireDefault(_StructuresTextChannel); @@ -1106,43 +1110,41 @@ var InternalClient = (function () { var _this30 = this; return this.resolver.resolveChannel(channel).then(function (channel) { - var user; - if (role instanceof _StructuresUser2["default"]) { - user = role; - } else { - role = _this30.resolver.resolveRole(role); + if (channel instanceof _StructuresServerChannel2["default"]) { + return Promise.reject(new Error("Not a server channel")); } - var data = {}; - data.allow = 0; - data.deny = 0; + var data = { + allow: 0, + deny: 0 + }; - updated.allow = updated.allow || []; - updated.deny = updated.deny || []; - - if (role instanceof _StructuresRole2["default"]) { + if (role instanceof _StructuresUser2["default"]) { data.id = role.id; - data.type = "role"; - } else if (user) { - data.id = user.id; data.type = "member"; } else { - throw new Error("role incorrect"); + role = _this30.resolver.resolveRole(role); + + if (!(role instanceof _StructuresRole2["default"])) { + return Promise.reject(new Error("Role could not be resolved")); + } + + data.id = role.id; + data.type = "role"; + } + + var previousOverwrite = channel.permissionOverwrites.get("id", data.id); + + if (previousOverwrite) { + data.allow |= previousOverwrite.allow; + data.deny |= previousOverwrite.deny; } for (var perm in updated) { if (updated[perm]) { - if (perm instanceof String || typeof perm === "string") { - data.allow |= _Constants.Permissions[perm] || 0; - } else { - data.allow |= perm; - } + data.allow |= _Constants.Permissions[perm] || 0; } else { - if (perm instanceof String || typeof perm === "string") { - data.deny |= _Constants.Permissions[perm] || 0; - } else { - data.deny |= perm; - } + data.deny |= _Constants.Permissions[perm] || 0; } } diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index 0cb5d2be3..15941fb8c 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -12,6 +12,7 @@ import Resolver from "./Resolver/Resolver"; import User from "../Structures/User"; import Channel from "../Structures/Channel"; +import ServerChannel from "../Structures/ServerChannel"; import TextChannel from "../Structures/TextChannel"; import VoiceChannel from "../Structures/VoiceChannel"; import PMChannel from "../Structures/PMChannel"; @@ -880,43 +881,41 @@ export default class InternalClient { overwritePermissions(channel, role, updated) { return this.resolver.resolveChannel(channel) .then(channel => { - var user; - if (role instanceof User) { - user = role; - } else { - role = this.resolver.resolveRole(role); + if (channel instanceof ServerChannel) { + return Promise.reject(new Error("Not a server channel")); } - var data = {}; - data.allow = 0; - data.deny = 0; + var data = { + allow: 0, + deny: 0 + }; - updated.allow = updated.allow || []; - updated.deny = updated.deny || []; - - if (role instanceof Role) { + if (role instanceof User) { data.id = role.id; - data.type = "role"; - } else if (user) { - data.id = user.id; data.type = "member"; } else { - throw new Error("role incorrect"); + role = this.resolver.resolveRole(role); + + if (!(role instanceof Role)) { + return Promise.reject(new Error("Role could not be resolved")); + } + + data.id = role.id; + data.type = "role"; + } + + var previousOverwrite = channel.permissionOverwrites.get("id", data.id); + + if (previousOverwrite) { + data.allow |= previousOverwrite.allow; + data.deny |= previousOverwrite.deny; } for (var perm in updated) { if (updated[perm]) { - if (perm instanceof String || typeof perm === "string") { - data.allow |= (Permissions[perm] || 0); - } else { - data.allow |= perm; - } + data.allow |= (Permissions[perm] || 0); } else { - if (perm instanceof String || typeof perm === "string") { - data.deny |= (Permissions[perm] || 0); - } else { - data.deny |= perm; - } + data.deny |= (Permissions[perm] || 0); } }