Files
discordeno/utils/permissions.ts
2020-05-10 15:37:41 -04:00

59 lines
1.5 KiB
TypeScript

import { Permission, Permissions } from "../types/permission.ts";
import { RoleData } from "../types/role.ts";
import { cache } from "./cache.ts";
export const memberHasPermission = (
member_id: string,
owner_id: string,
role_data: RoleData[],
member_role_ids: string[],
permissions: Permission[],
) => {
if (member_id === owner_id) return true;
const permissionBits = role_data
.filter((role) => member_role_ids.includes(role.id))
.reduce((bits, data) => {
bits |= data.permissions;
return bits;
}, 0);
if (permissionBits & Permissions.ADMINISTRATOR) return true;
return permissions.every((permission) =>
permissionBits & Permissions[permission]
);
};
export const botHasPermission = (
guild_id: string,
botID: string,
permissions: Permissions[],
) => {
const guild = cache.guilds.get(guild_id);
if (!guild) return false;
const member = guild.members.get(botID);
if (!member) return false;
const permissionBits = [...guild.roles.values()]
.map((role) => role.raw)
.filter((role) => member.roles.includes(role.id))
.reduce((bits, data) => {
bits |= data.permissions;
return bits;
}, 0);
if (permissionBits & Permissions.ADMINISTRATOR) return true;
return permissions.every((permission) => permissionBits & permission);
};
export const calculatePermissions = (permission_bits: number) => {
return Object.keys(Permissions).filter((perm) => {
return permission_bits & Permissions[perm as Permission];
});
};