Added permission overwrites in channels and potential bug fix

Bug may have potentially been fixed under MESSAGE_UPDATE
This commit is contained in:
hydrabolt
2015-10-26 17:31:23 +00:00
parent 9124b2c8b3
commit 555d743dae
6 changed files with 484 additions and 178 deletions

View File

@@ -869,6 +869,116 @@ var Client = (function () {
});
};
Client.prototype.overwritePermissions = function overwritePermissions(channel, role, updatedStuff) {
var callback = arguments.length <= 3 || arguments[3] === undefined ? function (err) {} : arguments[3];
var self = this;
return new Promise(function (resolve, reject) {
var data;
if (role instanceof ServerPermissions || role.type === "role") {
for (var key in updatedStuff) {
role[key] = updatedStuff[key];
}
data = ad(updatedStuff);
data.id = role.id;
data.type = "role";
} else {
data = ad(updatedStuff);
data.id = role.id;
data.type = "member";
}
request.put(Endpoints.CHANNELS + "/" + channel.id + "/permissions/" + role.id).set("authorization", self.token).send(data).end(function (err) {
if (err) {
reject(err);
callback(err);
} else {
resolve();
callback();
}
});
});
function ad(data) {
var allow = 0,
disallow = 0;
function bitit(value, position) {
if (value) {
allow |= 1 << position;
} else {
disallow |= 1 << position;
}
}
for (var perm in data) {
switch (perm) {
case "canCreateInstantInvite":
bitit(data[perm], 0);
break;
case "manageRoles":
bitit(data[perm], 3);
break;
case "manageChannels":
bitit(data[perm], 4);
break;
case "readMessages":
bitit(data[perm], 10);
break;
case "sendMessages":
bitit(data[perm], 11);
break;
case "sendTTSMessages":
bitit(data[perm], 12);
break;
case "manageMessages":
bitit(data[perm], 13);
break;
case "embedLinks":
bitit(data[perm], 14);
break;
case "attachFiles":
bitit(data[perm], 15);
break;
case "readMessageHistory":
bitit(data[perm], 16);
break;
case "mentionEveryone":
bitit(data[perm], 17);
break;
case "voiceConnect":
bitit(data[perm], 20);
break;
case "voiceSpeak":
bitit(data[perm], 21);
break;
case "voiceMuteMembers":
bitit(data[perm], 22);
break;
case "voiceDeafenMembers":
bitit(data[perm], 23);
break;
case "voiceMoveMembers":
bitit(data[perm], 24);
break;
case "voiceUseVoiceActivation":
bitit(data[perm], 25);
break;
default:
break;
}
}
return {
allow: allow,
deny: disallow
};
}
};
//def createws
Client.prototype.createws = function createws(url) {
@@ -1019,6 +1129,7 @@ var Client = (function () {
info[key] = data[key];
}
data.mentions = data.mentions || [];
var mentions = [];
for (var _iterator7 = data.mentions, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {