A pretty crappy example and a load of bug fixes

Much more stable permission management
This commit is contained in:
hydrabolt
2015-10-26 18:43:49 +00:00
parent af18e833f9
commit 7dea4b9e9c
5 changed files with 209 additions and 60 deletions

View File

@@ -814,6 +814,11 @@ var Client = (function () {
var acServer = self.getServer("id", serverId);
var acMember = acServer.getMember("id", memberId);
if (acMember.rawRoles.indexOf(role.id) !== -1) {
// user already has role
return;
}
request.patch("https://discordapp.com/api/guilds/" + serverId + "/members/" + memberId).set("authorization", self.token).send({
roles: acMember.rawRoles.concat(role.id)
}).end(function (err) {
@@ -845,12 +850,12 @@ var Client = (function () {
var acServer = self.getServer("id", serverId);
var acMember = acServer.getMember("id", memberId);
for (var safeRole in acMember.rawRoles) {
if (acMember.rawRoles[safeRole] == role.id) {
acMember.rawRoles.splice(safeRole, 1);
}
if (~acMember.rawRoles.indexOf(role.id)) {
acMember.removeRole(role);
}
console.log("remainder: ", acMember.rawRoles, "wanting", role.id);
request.patch("https://discordapp.com/api/guilds/" + serverId + "/members/" + memberId).set("authorization", self.token).send({
roles: acMember.rawRoles
}).end(function (err) {

View File

@@ -21,22 +21,19 @@ var Member = (function (_User) {
this.rawRoles = roles;
}
Member.prototype.removeRole = function removeRole(role) {
this.rawRoles.splice(this.rawRoles.indexOf(role.id), 1);
};
Member.prototype.addRole = function addRole(role) {
if (! ~this.rawRoles.indexOf(role)) {
this.rawRoles.push(role);
if (this.rawRoles.indexOf(role.id) == -1) {
console.log("wanted to add", role.id, this.rawRoles.indexOf(role.id));
this.rawRoles.push(role.id);
}
};
Member.prototype.permissionsIn = function permissionsIn(channel) {
if (channel.server.ownerID === this.id) {
return new EvaluatedPermissions(4294967295); //all perms
}
var affectingOverwrites = [];
var affectingMemberOverwrites = [];
for (var _iterator = channel.roles, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
Member.prototype.hasRole = function hasRole(role) {
for (var _iterator = this.roles, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
var _ref;
if (_isArray) {
@@ -48,7 +45,35 @@ var Member = (function (_User) {
_ref = _i.value;
}
var overwrite = _ref;
var _role = _ref;
if (role.id === _role.id) return true;
}
return false;
};
Member.prototype.permissionsIn = function permissionsIn(channel) {
if (channel.server.ownerID === this.id) {
return new EvaluatedPermissions(4294967295); //all perms
}
var affectingOverwrites = [];
var affectingMemberOverwrites = [];
for (var _iterator2 = channel.roles, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
var _ref2;
if (_isArray2) {
if (_i2 >= _iterator2.length) break;
_ref2 = _iterator2[_i2++];
} else {
_i2 = _iterator2.next();
if (_i2.done) break;
_ref2 = _i2.value;
}
var overwrite = _ref2;
if (overwrite.id === this.id && overwrite.type === "member") {
affectingMemberOverwrites.push(overwrite);
@@ -63,25 +88,7 @@ var Member = (function (_User) {
var finalPacked = affectingOverwrites.length !== 0 ? affectingOverwrites[0].packed : affectingMemberOverwrites[0].packed;
for (var _iterator2 = affectingOverwrites, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
var _ref2;
if (_isArray2) {
if (_i2 >= _iterator2.length) break;
_ref2 = _iterator2[_i2++];
} else {
_i2 = _iterator2.next();
if (_i2.done) break;
_ref2 = _i2.value;
}
var overwrite = _ref2;
finalPacked = finalPacked & ~overwrite.deny;
finalPacked = finalPacked | overwrite.allow;
}
for (var _iterator3 = affectingMemberOverwrites, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
for (var _iterator3 = affectingOverwrites, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
var _ref3;
if (_isArray3) {
@@ -99,6 +106,24 @@ var Member = (function (_User) {
finalPacked = finalPacked | overwrite.allow;
}
for (var _iterator4 = affectingMemberOverwrites, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
var _ref4;
if (_isArray4) {
if (_i4 >= _iterator4.length) break;
_ref4 = _iterator4[_i4++];
} else {
_i4 = _iterator4.next();
if (_i4.done) break;
_ref4 = _i4.value;
}
var overwrite = _ref4;
finalPacked = finalPacked & ~overwrite.deny;
finalPacked = finalPacked | overwrite.allow;
}
return new EvaluatedPermissions(finalPacked);
};
@@ -108,19 +133,19 @@ var Member = (function (_User) {
var ufRoles = [this.server.getRole(this.server.id)];
for (var _iterator4 = this.rawRoles, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
var _ref4;
for (var _iterator5 = this.rawRoles, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
var _ref5;
if (_isArray4) {
if (_i4 >= _iterator4.length) break;
_ref4 = _iterator4[_i4++];
if (_isArray5) {
if (_i5 >= _iterator5.length) break;
_ref5 = _iterator5[_i5++];
} else {
_i4 = _iterator4.next();
if (_i4.done) break;
_ref4 = _i4.value;
_i5 = _iterator5.next();
if (_i5.done) break;
_ref5 = _i5.value;
}
var rawRole = _ref4;
var rawRole = _ref5;
ufRoles.push(this.server.getRole(rawRole));
}
@@ -135,19 +160,19 @@ var Member = (function (_User) {
basePerm = basePerms[0].packed;
basePerms = basePerms || [];
for (var _iterator5 = basePerms, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
var _ref5;
for (var _iterator6 = basePerms, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {
var _ref6;
if (_isArray5) {
if (_i5 >= _iterator5.length) break;
_ref5 = _iterator5[_i5++];
if (_isArray6) {
if (_i6 >= _iterator6.length) break;
_ref6 = _iterator6[_i6++];
} else {
_i5 = _iterator5.next();
if (_i5.done) break;
_ref5 = _i5.value;
_i6 = _iterator6.next();
if (_i6.done) break;
_ref6 = _i6.value;
}
var perm = _ref5;
var perm = _ref6;
basePerm = basePerm | perm.packed;
}