Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- export enum ModifyType {
- DENY = 'deny',
- ALLOW = 'allow'
- }
- export default class PermissionOverwritesBuilder {
- public overwrites: discord.Channel.IPermissionOverwrite[];
- constructor(overwrites?: discord.Channel.IPermissionOverwrite[]) {
- this.overwrites = overwrites || [];
- }
- private modify(
- modifyType: ModifyType,
- overwriteType: discord.Channel.PermissionOverwriteType,
- id: string,
- permissions: number
- ): PermissionOverwritesBuilder {
- const overwrite = this.overwrites.find(
- (v) => v.type === overwriteType && v.id === id
- );
- if (
- overwrite &&
- ((overwrite.deny & permissions) === permissions ||
- (overwrite.allow & permissions) === permissions)
- ) {
- throw new Error('Permission has already been denied or allowed');
- }
- if (overwrite && !overwrite.hasOwnProperty(modifyType)) {
- throw new Error("modifyType must be either 'deny' or 'allow'");
- }
- if (overwrite) {
- overwrite[modifyType] |= permissions;
- } else {
- const newOverwrite: discord.Channel.IPermissionOverwrite = {
- allow: 0,
- deny: 0,
- id,
- type: overwriteType
- };
- if (modifyType === ModifyType.ALLOW) {
- newOverwrite.allow = permissions;
- } else {
- newOverwrite.deny = permissions;
- }
- this.overwrites.push(newOverwrite);
- }
- return this;
- }
- public denyForRole(
- roleId: string,
- permissions: number
- ): PermissionOverwritesBuilder {
- return this.modify(
- ModifyType.DENY,
- discord.Channel.PermissionOverwriteType.ROLE,
- roleId,
- permissions
- );
- }
- public denyForMember(memberId: string, permissions: number) {
- return this.modify(
- ModifyType.DENY,
- discord.Channel.PermissionOverwriteType.MEMBER,
- memberId,
- permissions
- );
- }
- public allowForRole(
- roleId: string,
- permissions: number
- ): PermissionOverwritesBuilder {
- return this.modify(
- ModifyType.ALLOW,
- discord.Channel.PermissionOverwriteType.ROLE,
- roleId,
- permissions
- );
- }
- public allowForMember(memberId: string, permissions: number) {
- return this.modify(
- ModifyType.ALLOW,
- discord.Channel.PermissionOverwriteType.MEMBER,
- memberId,
- permissions
- );
- }
- public formatAsOverwrites(): discord.Channel.IPermissionOverwrite[] {
- return this.overwrites;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement