Add channel permission overwrites

This commit is contained in:
Samuel Elliott 2018-04-14 14:06:32 +01:00
parent e061d95ae6
commit 68e42b8b36
No known key found for this signature in database
GPG Key ID: 8420C7CDE43DC4D6
1 changed files with 52 additions and 1 deletions

View File

@ -101,11 +101,58 @@ export class Channel {
}
export class PermissionOverwrite {
constructor(data, channel_id) {
this.discordObject = data;
this.channel_id = channel_id;
}
static from(data, channel_id) {
switch (data.type) {
default: return new PermissionOverwrite(data, channel_id);
case 'role': return new RolePermissionOverwrite(data, channel_id);
case 'member': return new MemberPermissionOverwrite(data, channel_id);
}
}
static get RolePermissionOverwrite() { return RolePermissionOverwrite }
static get MemberPermissionOverwrite() { return MemberPermissionOverwrite }
get type() { return this.discordObject.type }
get allow() { return this.discordObject.allow }
get deny() { return this.discordObject.deny }
get channel() {
return Channel.fromId(this.channel_id);
}
get guild() {
if (this.channel) return this.channel.guild;
}
}
export class RolePermissionOverwrite extends PermissionOverwrite {
get role_id() { return this.discordObject.id }
get role() {
if (this.guild) return this.guild.roles.find(r => r.id === this.role_id);
}
}
export class MemberPermissionOverwrite extends PermissionOverwrite {
get member_id() { return this.discordObject.id }
get member() {
return GuildMember.fromId(this.member_id);
}
}
export class GuildChannel extends Channel {
static get PermissionOverwrite() { return PermissionOverwrite }
get guild_id() { return this.discordObject.guild_id }
get parent_id() { return this.discordObject.parent_id } // Channel category
get position() { return this.discordObject.position }
get permission_overwrites() { return this.discordObject.permissionOverwrites }
get nicks() { return this.discordObject.nicks }
checkPermissions(perms) {
@ -125,6 +172,10 @@ export class GuildChannel extends Channel {
return Modules.GuildPermissions.getChannelPermissions(this.id);
}
get permission_overwrites() {
return List.from(Object.entries(this.discordObject.permissionOverwrites), ([i, p]) => PermissionOverwrite.from(p, this.id));
}
get guild() {
const guild = Modules.GuildStore.getGuild(this.guild_id);
if (guild) return new Guild(guild);