Let overwritePermissions keep existing permissions

This commit is contained in:
abalabahaha
2016-03-19 22:03:17 -07:00
parent 583906fe81
commit afdb93b3d6
2 changed files with 53 additions and 52 deletions

View File

@@ -42,6 +42,10 @@ var _StructuresChannel = require("../Structures/Channel");
var _StructuresChannel2 = _interopRequireDefault(_StructuresChannel); var _StructuresChannel2 = _interopRequireDefault(_StructuresChannel);
var _StructuresServerChannel = require("../Structures/ServerChannel");
var _StructuresServerChannel2 = _interopRequireDefault(_StructuresServerChannel);
var _StructuresTextChannel = require("../Structures/TextChannel"); var _StructuresTextChannel = require("../Structures/TextChannel");
var _StructuresTextChannel2 = _interopRequireDefault(_StructuresTextChannel); var _StructuresTextChannel2 = _interopRequireDefault(_StructuresTextChannel);
@@ -1106,43 +1110,41 @@ var InternalClient = (function () {
var _this30 = this; var _this30 = this;
return this.resolver.resolveChannel(channel).then(function (channel) { return this.resolver.resolveChannel(channel).then(function (channel) {
var user; if (channel instanceof _StructuresServerChannel2["default"]) {
if (role instanceof _StructuresUser2["default"]) { return Promise.reject(new Error("Not a server channel"));
user = role;
} else {
role = _this30.resolver.resolveRole(role);
} }
var data = {}; var data = {
data.allow = 0; allow: 0,
data.deny = 0; deny: 0
};
updated.allow = updated.allow || []; if (role instanceof _StructuresUser2["default"]) {
updated.deny = updated.deny || [];
if (role instanceof _StructuresRole2["default"]) {
data.id = role.id; data.id = role.id;
data.type = "role";
} else if (user) {
data.id = user.id;
data.type = "member"; data.type = "member";
} else { } 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) { for (var perm in updated) {
if (updated[perm]) { if (updated[perm]) {
if (perm instanceof String || typeof perm === "string") { data.allow |= _Constants.Permissions[perm] || 0;
data.allow |= _Constants.Permissions[perm] || 0;
} else {
data.allow |= perm;
}
} else { } else {
if (perm instanceof String || typeof perm === "string") { data.deny |= _Constants.Permissions[perm] || 0;
data.deny |= _Constants.Permissions[perm] || 0;
} else {
data.deny |= perm;
}
} }
} }

View File

@@ -12,6 +12,7 @@ import Resolver from "./Resolver/Resolver";
import User from "../Structures/User"; import User from "../Structures/User";
import Channel from "../Structures/Channel"; import Channel from "../Structures/Channel";
import ServerChannel from "../Structures/ServerChannel";
import TextChannel from "../Structures/TextChannel"; import TextChannel from "../Structures/TextChannel";
import VoiceChannel from "../Structures/VoiceChannel"; import VoiceChannel from "../Structures/VoiceChannel";
import PMChannel from "../Structures/PMChannel"; import PMChannel from "../Structures/PMChannel";
@@ -880,43 +881,41 @@ export default class InternalClient {
overwritePermissions(channel, role, updated) { overwritePermissions(channel, role, updated) {
return this.resolver.resolveChannel(channel) return this.resolver.resolveChannel(channel)
.then(channel => { .then(channel => {
var user; if (channel instanceof ServerChannel) {
if (role instanceof User) { return Promise.reject(new Error("Not a server channel"));
user = role;
} else {
role = this.resolver.resolveRole(role);
} }
var data = {}; var data = {
data.allow = 0; allow: 0,
data.deny = 0; deny: 0
};
updated.allow = updated.allow || []; if (role instanceof User) {
updated.deny = updated.deny || [];
if (role instanceof Role) {
data.id = role.id; data.id = role.id;
data.type = "role";
} else if (user) {
data.id = user.id;
data.type = "member"; data.type = "member";
} else { } 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) { for (var perm in updated) {
if (updated[perm]) { if (updated[perm]) {
if (perm instanceof String || typeof perm === "string") { data.allow |= (Permissions[perm] || 0);
data.allow |= (Permissions[perm] || 0);
} else {
data.allow |= perm;
}
} else { } else {
if (perm instanceof String || typeof perm === "string") { data.deny |= (Permissions[perm] || 0);
data.deny |= (Permissions[perm] || 0);
} else {
data.deny |= perm;
}
} }
} }