mirror of
https://github.com/danbulant/discord.js
synced 2026-05-25 13:02:38 +00:00
84 lines
No EOL
2 KiB
JavaScript
84 lines
No EOL
2 KiB
JavaScript
var User = require("./user.js");
|
|
var ServerPermissions = require("./ServerPermissions.js");
|
|
var EvaluatedPermissions = require("./EvaluatedPermissions.js");
|
|
|
|
class Member extends User{
|
|
|
|
constructor(user, server, roles){
|
|
super(user); // should work, we are basically creating a Member that has the same properties as user and a few more
|
|
this.server = server;
|
|
this.rawRoles = roles;
|
|
}
|
|
|
|
get roles(){
|
|
|
|
var ufRoles = [ this.server.getRole(this.server.id) ];
|
|
|
|
for(var rawRole of this.rawRoles){
|
|
ufRoles.push( this.server.getRole(rawRole) );
|
|
}
|
|
|
|
return ufRoles;
|
|
|
|
}
|
|
|
|
get evalPerms(){
|
|
var basePerms = this.roles, //cache roles as it can be slightly expensive
|
|
basePerm = basePerms[0].packed;
|
|
|
|
for(var perm of basePerms){
|
|
basePerm = basePerm | perm.packed;
|
|
}
|
|
|
|
return new ServerPermissions({
|
|
permissions : basePerm
|
|
});
|
|
}
|
|
|
|
addRole(role){
|
|
if(!~this.rawRoles.indexOf(role)){
|
|
this.rawRoles.push(role);
|
|
}
|
|
}
|
|
|
|
permissionsIn(channel){
|
|
|
|
if(channel.server.ownerID === this.id){
|
|
return new EvaluatedPermissions(4294967295); //all perms
|
|
}
|
|
|
|
var affectingOverwrites = [];
|
|
var affectingMemberOverwrites = [];
|
|
|
|
for(var overwrite of channel.roles){
|
|
if(overwrite.id === this.id && overwrite.type === "member"){
|
|
affectingMemberOverwrites.push(overwrite);
|
|
}else if( this.rawRoles.indexOf(overwrite.id) !== -1 ){
|
|
affectingOverwrites.push(overwrite);
|
|
}
|
|
}
|
|
|
|
|
|
if(affectingOverwrites.length === 0 && affectingMemberOverwrites.length === 0){
|
|
return new EvaluatedPermissions(this.evalPerms.packed);
|
|
}
|
|
|
|
var finalPacked = (affectingOverwrites.length !== 0 ? affectingOverwrites[0].packed : affectingMemberOverwrites[0].packed);
|
|
|
|
for(var overwrite of affectingOverwrites){
|
|
finalPacked = finalPacked & ~overwrite.deny;
|
|
finalPacked = finalPacked | overwrite.allow;
|
|
}
|
|
|
|
for(var overwrite of affectingMemberOverwrites){
|
|
finalPacked = finalPacked & ~overwrite.deny;
|
|
finalPacked = finalPacked | overwrite.allow;
|
|
}
|
|
|
|
return new EvaluatedPermissions(finalPacked);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
module.exports = Member; |