mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-09 16:13:31 +01:00
139 lines
3.6 KiB
JavaScript
139 lines
3.6 KiB
JavaScript
"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; |