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

@@ -71,6 +71,44 @@ var ChannelPermissions = (function () {
}; };
_createClass(ChannelPermissions, [{ _createClass(ChannelPermissions, [{
key: "asAllowDisallow",
get: function get() {
var allow = 0,
disallow = 0;
function ad(value, position) {
if (value) {
allow |= 1 << position;
} else {
disallow |= 1 << position;
}
}
ad(this.canCreateInstantInvite, 0);
ad(this.manageRoles, 3);
ad(this.manageChannels, 4);
ad(this.readMessages, 10);
ad(this.sendMessages, 11);
ad(this.sendTTSMessages, 12);
ad(this.manageMessages, 13);
ad(this.embedLinks, 14);
ad(this.attachFiles, 15);
ad(this.readMessageHistory, 16);
ad(this.mentionEveryone, 17);
ad(this.voiceConnect, 20);
ad(this.voiceSpeak, 21);
ad(this.voiceMuteMembers, 22);
ad(this.voiceDeafenMembers, 23);
ad(this.voiceMoveMembers, 24);
ad(this.voiceUseVoiceActivation, 25);
return {
allow: allow,
deny: disallow
};
}
}, {
key: "createInstantInvite", key: "createInstantInvite",
get: function get() { get: function get() {
return this.getBit(0); return this.getBit(0);

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 //def createws
Client.prototype.createws = function createws(url) { Client.prototype.createws = function createws(url) {
@@ -1019,6 +1129,7 @@ var Client = (function () {
info[key] = data[key]; info[key] = data[key];
} }
data.mentions = data.mentions || [];
var mentions = []; var mentions = [];
for (var _iterator7 = data.mentions, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) { for (var _iterator7 = data.mentions, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {

View File

@@ -46,6 +46,43 @@ class ChannelPermissions{
} }
} }
get asAllowDisallow() {
var allow = 0, disallow = 0;
function ad(value, position) {
if (value) {
allow |= (1 << position);
} else {
disallow |= (1 << position);
}
}
ad(this.canCreateInstantInvite, 0);
ad(this.manageRoles, 3);
ad(this.manageChannels, 4);
ad(this.readMessages, 10);
ad(this.sendMessages, 11);
ad(this.sendTTSMessages, 12);
ad(this.manageMessages, 13);
ad(this.embedLinks, 14);
ad(this.attachFiles, 15);
ad(this.readMessageHistory, 16);
ad(this.mentionEveryone, 17);
ad(this.voiceConnect, 20);
ad(this.voiceSpeak, 21);
ad(this.voiceMuteMembers, 22);
ad(this.voiceDeafenMembers, 23);
ad(this.voiceMoveMembers, 24);
ad(this.voiceUseVoiceActivation, 25);
return {
allow : allow,
deny : disallow
};
}
get createInstantInvite() { return this.getBit(0); } get createInstantInvite() { return this.getBit(0); }
set createInstantInvite(val) { this.setBit(0, val); } set createInstantInvite(val) { this.setBit(0, val); }

View File

@@ -945,6 +945,121 @@ class Client {
}); });
} }
overwritePermissions(channel, role, updatedStuff, callback=function(err){}){
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 //def createws
createws(url) { createws(url) {
if (this.websocket) if (this.websocket)
@@ -1060,6 +1175,7 @@ class Client {
info[key] = data[key]; info[key] = data[key];
} }
data.mentions = data.mentions || [];
var mentions = []; var mentions = [];
for (var mention of data.mentions) { for (var mention of data.mentions) {

View File

@@ -25,8 +25,12 @@ mybot.on("message", function (message) {
} else { } else {
user = message.sender; user = message.sender;
} }
for(var role of message.sender.roles){ for(var role of message.channel.server.roles){
mybot.removeMemberFromRole(message.sender, role).catch(error);
mybot.overwritePermissions(message.channel, message.sender, {
sendMessages : false
}).catch(error);
} }
}); });