mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-14 02:23:31 +01:00
Fixed PermissionOverwrites
This commit is contained in:
139
src/Structures/Role.js
Normal file
139
src/Structures/Role.js
Normal file
@@ -0,0 +1,139 @@
|
||||
"use strict";
|
||||
var Permissions = require("../Constants.js").Permissions;
|
||||
/*
|
||||
|
||||
example data
|
||||
|
||||
{ position: -1,
|
||||
permissions: 36953089,
|
||||
name: '@everyone',
|
||||
managed: false,
|
||||
id: '110007368451915776',
|
||||
hoist: false,
|
||||
color: 0 }
|
||||
*/
|
||||
|
||||
const DefaultRole = [
|
||||
Permissions.createInstantInvite,
|
||||
Permissions.readMessages,
|
||||
Permissions.readMessageHistory,
|
||||
Permissions.sendMessages,
|
||||
Permissions.sendTTSMessages,
|
||||
Permissions.embedLinks,
|
||||
Permissions.attachFiles,
|
||||
Permissions.readMessageHistory,
|
||||
Permissions.mentionEveryone,
|
||||
Permissions.voiceConnect,
|
||||
Permissions.voiceSpeak,
|
||||
Permissions.voiceUseVAD
|
||||
].reduce( (previous, current) => previous | current, 0 );
|
||||
|
||||
class Role{
|
||||
constructor(data, serverID, client){
|
||||
this.position = data.position || -1;
|
||||
this.permissions = data.permissions || DefaultRole;
|
||||
this.name = data.name || "@everyone";
|
||||
this.managed = data.managed || false;
|
||||
this.id = data.id;
|
||||
this.hoist = data.hoist || false;
|
||||
this.color = data.color || 0;
|
||||
this.serverID = serverID;
|
||||
this.client = client;
|
||||
}
|
||||
|
||||
get server(){
|
||||
return this.client.internal.servers.get("id", this.serverID);
|
||||
}
|
||||
|
||||
serialise(explicit){
|
||||
|
||||
var hp = (perm) => this.hasPermission(perm, explicit);
|
||||
|
||||
return {
|
||||
// general
|
||||
createInstantInvite : hp( Permissions.createInstantInvite ),
|
||||
kickMembers : hp( Permissions.kickMembers ),
|
||||
banMembers : hp( Permissions.banMembers ),
|
||||
manageRoles : hp ( Permissions.manageRoles ),
|
||||
manageChannels : hp( Permissions.manageChannels ),
|
||||
manageServer : hp( Permissions.manageServer ),
|
||||
// text
|
||||
readMessages : hp( Permissions.readMessages ),
|
||||
sendMessages : hp( Permissions.sendMessages ),
|
||||
sendTTSMessages : hp( Permissions.sendTTSMessages ),
|
||||
manageMessages : hp( Permissions.manageMessages ),
|
||||
embedLinks : hp( Permissions.embedLinks ),
|
||||
attachFiles : hp( Permissions.attachFiles ),
|
||||
readMessageHistory : hp( Permissions.readMessageHistory ),
|
||||
mentionEveryone : hp( Permissions.mentionEveryone ),
|
||||
// voice
|
||||
voiceConnect : hp( Permissions.voiceConnect ),
|
||||
voiceSpeak : hp( Permissions.voiceSpeak ),
|
||||
voiceMuteMembers : hp( Permissions.voiceMuteMembers ),
|
||||
voiceDeafenMembers : hp( Permissions.voiceDeafenMembers ),
|
||||
voiceMoveMembers : hp( Permissions.voiceMoveMembers ),
|
||||
voiceUseVAD : hp( Permissions.voiceUseVAD )
|
||||
};
|
||||
}
|
||||
|
||||
serialize(){
|
||||
// ;n;
|
||||
return this.serialise();
|
||||
}
|
||||
|
||||
hasPermission(perm, explicit=false){
|
||||
if( perm instanceof String || typeof perm === "string" ){
|
||||
perm = Permissions[perm];
|
||||
}
|
||||
if(!perm){
|
||||
return false;
|
||||
}
|
||||
if(!explicit){ // implicit permissions allowed
|
||||
if( !!(this.permissions & Permissions.manageRoles) ){
|
||||
// manageRoles allowed, they have all permissions
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// e.g.
|
||||
// !!(36953089 & Permissions.manageRoles) = not allowed to manage roles
|
||||
// !!(36953089 & (1 << 21)) = voice speak allowed
|
||||
|
||||
return !!(this.permissions & perm);
|
||||
}
|
||||
|
||||
setPermission(permission, value){
|
||||
if( permission instanceof String || typeof permission === "string" ){
|
||||
permission = Permissions[permission];
|
||||
}
|
||||
if(permission){
|
||||
// valid permission
|
||||
if(value){
|
||||
this.permissions |= permission;
|
||||
}else{
|
||||
this.permissions &= ~permission;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setPermissions(obj){
|
||||
obj.forEach((value, permission) => {
|
||||
if( permission instanceof String || typeof permission === "string" ){
|
||||
permission = Permissions[permission];
|
||||
}
|
||||
if(permission){
|
||||
// valid permission
|
||||
this.setPermission(permission, value);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
colorAsHex(){
|
||||
var val = this.color.toString();
|
||||
while(val.length < 6){
|
||||
val = "0" + val;
|
||||
}
|
||||
return "#"+val;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Role;
|
||||
Reference in New Issue
Block a user