mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-17 12:03:31 +01:00
Added permission overwrites in channels and potential bug fix
Bug may have potentially been fixed under MESSAGE_UPDATE
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
111
lib/Client.js
111
lib/Client.js
@@ -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]();;) {
|
||||||
|
|||||||
@@ -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); }
|
||||||
|
|
||||||
|
|||||||
116
src/Client.js
116
src/Client.js
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user