mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-11 00:53:31 +01:00
Added permissions
This commit is contained in:
63
src/Structures/ChannelPermissions.js
Normal file
63
src/Structures/ChannelPermissions.js
Normal file
@@ -0,0 +1,63 @@
|
||||
"use strict";
|
||||
|
||||
var Permissions = require("../Constants.js").Permissions;
|
||||
|
||||
class ChannelPermissions{
|
||||
constructor(permissions){
|
||||
this.permissions = permissions;
|
||||
}
|
||||
|
||||
serialise(explicit){
|
||||
|
||||
var hp = (perm) => this.hasPermission(perm, explicit);
|
||||
|
||||
return {
|
||||
// general
|
||||
createInstantInvite : hp( Permissions.createInstantInvite ),
|
||||
kickMembers : hp( Permissions.kickMembers ),
|
||||
banMembers : hp( Permissions.banMembers ),
|
||||
managePermissions : hp ( Permissions.managePermissions ),
|
||||
manageChannel : hp( Permissions.manageChannel ),
|
||||
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;
|
||||
}
|
||||
}
|
||||
return !!(this.permissions & perm);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ChannelPermissions;
|
||||
@@ -31,7 +31,7 @@ const DefaultRole = [
|
||||
class Role{
|
||||
constructor(data, server, client){
|
||||
this.position = data.position || -1;
|
||||
this.permissions = data.permissions || DefaultRole;
|
||||
this.permissions = data.permissions || (data.name === "@everyone" ? DefaultRole : 0 );
|
||||
this.name = data.name || "@everyone";
|
||||
this.managed = data.managed || false;
|
||||
this.id = data.id;
|
||||
|
||||
@@ -59,6 +59,19 @@ class Server extends Equality {
|
||||
}
|
||||
} );
|
||||
}
|
||||
|
||||
rolesOfUser(user){
|
||||
user = this.client.internal.resolver.resolveUser(user);
|
||||
if(user){
|
||||
return (this.memberMap[user.id] ? this.memberMap[user.id].roles : []);
|
||||
}else{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
rolesOf(user){
|
||||
return this.rolesOfUser(user);
|
||||
}
|
||||
|
||||
get iconURL() {
|
||||
if (!this.icon) {
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
var Channel = require("./Channel.js");
|
||||
var Cache = require("../Util/Cache.js");
|
||||
var PermissionOverwrite = require("./PermissionOverwrite.js");
|
||||
var ChannelPermissions = require("./ChannelPermissions.js");
|
||||
|
||||
class ServerChannel extends Channel{
|
||||
constructor(data, client, server){
|
||||
@@ -16,6 +17,48 @@ class ServerChannel extends Channel{
|
||||
});
|
||||
}
|
||||
|
||||
permissionsOf(user){
|
||||
user = this.client.internal.resolver.resolveUser(user);
|
||||
if(user){
|
||||
if(this.server.owner.equals(user)){
|
||||
return new ChannelPermissions(4294967295);
|
||||
}
|
||||
var everyoneRole = this.server.roles.get("name", "@everyone");
|
||||
|
||||
var userRoles = [everyoneRole].concat(this.server.rolesOf(user) || []);
|
||||
var userRolesID = userRoles.map((v) => v.id);
|
||||
var roleOverwrites = [], memberOverwrites = [];
|
||||
|
||||
this.permissionOverwrites.forEach((overwrite) => {
|
||||
if(overwrite.type === "member" && overwrite.id === user.id){
|
||||
memberOverwrites.push(overwrite);
|
||||
}else if(overwrite.type === "role" && overwrite.id in userRolesID){
|
||||
roleOverwrites.push(overwrite);
|
||||
}
|
||||
});
|
||||
|
||||
var permissions = 0;
|
||||
|
||||
for(var serverRole of userRoles){
|
||||
permissions |= serverRole.permissions;
|
||||
}
|
||||
|
||||
for(var overwrite of roleOverwrites.concat(memberOverwrites)){
|
||||
permissions = permissions & ~overwrite.deny;
|
||||
permissions = permissions | overwrite.allow;
|
||||
}
|
||||
|
||||
return new ChannelPermissions(permissions);
|
||||
|
||||
}else{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
permsOf(user){
|
||||
return this.permissionsOf(user);
|
||||
}
|
||||
|
||||
toString(){
|
||||
return this.name;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user