mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-09 16:13:31 +01:00
90 lines
2.3 KiB
JavaScript
90 lines
2.3 KiB
JavaScript
"use strict";
|
|
|
|
import Channel from "./Channel";
|
|
import Cache from "../Util/Cache";
|
|
import PermissionOverwrite from "./PermissionOverwrite";
|
|
import ChannelPermissions from "./ChannelPermissions";
|
|
import {reg} from "../Util/ArgumentRegulariser";
|
|
|
|
export default class ServerChannel extends Channel{
|
|
constructor(data, client, server){
|
|
super(data, client);
|
|
this.name = data.name;
|
|
this.type = data.type;
|
|
this.position = data.position;
|
|
this.permissionOverwrites = data.permissionOverwrites || new Cache();
|
|
this.server = server;
|
|
if (!data.permissionOverwrites) {
|
|
data.permission_overwrites.forEach((permission) => {
|
|
this.permissionOverwrites.add( new PermissionOverwrite(permission) );
|
|
});
|
|
}
|
|
}
|
|
|
|
permissionsOf(user){
|
|
user = this.client.internal.resolver.resolveUser(user);
|
|
if (user) {
|
|
if (this.server.ownerID === user.id) {
|
|
return new ChannelPermissions(4294967295);
|
|
}
|
|
var everyoneRole = this.server.roles.get("id", this.server.id);
|
|
|
|
var userRoles = [everyoneRole].concat(this.server.rolesOf(user) || []);
|
|
var userRolesID = userRoles.filter((v) => !!v).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" && ~userRolesID.indexOf(overwrite.id)) {
|
|
roleOverwrites.push(overwrite);
|
|
}
|
|
});
|
|
|
|
var permissions = 0;
|
|
|
|
for(var serverRole of userRoles){
|
|
if (serverRole) {
|
|
permissions |= serverRole.permissions;
|
|
}
|
|
}
|
|
|
|
for(var overwrite of roleOverwrites.concat(memberOverwrites)){
|
|
if (overwrite) {
|
|
permissions = permissions & ~overwrite.deny;
|
|
permissions = permissions | overwrite.allow;
|
|
}
|
|
}
|
|
|
|
return new ChannelPermissions(permissions);
|
|
|
|
}else{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
permsOf(user){
|
|
return this.permissionsOf(user);
|
|
}
|
|
|
|
mention(){
|
|
return `<#${this.id}>`;
|
|
}
|
|
|
|
toString(){
|
|
return this.mention();
|
|
}
|
|
|
|
setName(){
|
|
return this.client.setChannelName.apply(this.client, reg(this, arguments));
|
|
}
|
|
|
|
setPosition(){
|
|
return this.client.setChannelPosition.apply(this.client, reg(this, arguments));
|
|
}
|
|
|
|
update(){
|
|
return this.client.updateChannel.apply(this.client, reg(this, arguments));
|
|
}
|
|
}
|