Files
discord.js/lib/Structures/ServerChannel.js
2015-11-22 15:01:42 +00:00

77 lines
2.0 KiB
JavaScript

"use strict";
var Channel = require("./Channel.js");
var Cache = require("../Util/Cache.js");
var PermissionOverwrite = require("./PermissionOverwrite.js");
var ChannelPermissions = require("./ChannelPermissions.js");
var reg = require("../Util/ArgumentRegulariser.js").reg;
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 = new Cache();
this.server = server;
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.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);
}
mention() {
return `<#${ this.id }>`;
}
toString() {
return this.mention();
}
setName() {
return this.client.setChannelName.apply(this.client, reg(this, arguments));
}
}
module.exports = ServerChannel;