From 8e84d39c7f2531e81eed3a9d01bf4030b19a2c88 Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Sun, 14 Feb 2021 00:30:07 +0100 Subject: :sparkles: getPermission util function --- src/util/Permissions.ts | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/util/Permissions.ts b/src/util/Permissions.ts index 89e1d1d3..9cff8c90 100644 --- a/src/util/Permissions.ts +++ b/src/util/Permissions.ts @@ -1,8 +1,9 @@ // https://github.com/discordjs/discord.js/blob/master/src/util/Permissions.js // Apache License Version 2.0 Copyright 2015 - 2021 Amish Shah - +import { MemberModel } from "../models/Member"; +import { ChannelDocument, ChannelModel } from "../models/Channel"; import { ChannelPermissionOverwrite } from "../models/Channel"; -import { Role } from "../models/Role"; +import { Role, RoleModel } from "../models/Role"; import { BitField } from "./BitField"; export type PermissionResolvable = string | number | Permissions | PermissionResolvable[]; @@ -80,7 +81,7 @@ export class Permissions extends BitField { user: { id: bigint; roles: bigint[] }; guild: { roles: Role[] }; channel?: { - overwrites: ChannelPermissionOverwrite[]; + overwrites?: ChannelPermissionOverwrite[]; }; }) { let roles = guild.roles.filter((x) => user.roles.includes(x.id)); @@ -98,3 +99,29 @@ export class Permissions extends BitField { return permission; } } + +export async function getPermission(user_id: bigint, guild_id: bigint, channel_id?: bigint) { + var member = await MemberModel.findOne({ guild_id, id: user_id }, "roles").exec(); + if (!member) throw new Error("Member not found"); + + var roles = await RoleModel.find({ guild_id, id: { $in: member.roles } }).exec(); + let channel: ChannelDocument | null = null; + if (channel_id) { + channel = await ChannelModel.findOne({ id: channel_id }, "permission_overwrites"); + } + + var permission = Permissions.finalPermission({ + user: { + id: user_id, + roles: member.roles, + }, + guild: { + roles: roles, + }, + channel: { + overwrites: channel?.permission_overwrites, + }, + }); + + return permission; +} -- cgit 1.5.1