Files
discordeno/utils/permissions.ts
2020-03-20 16:21:52 -04:00

53 lines
1.4 KiB
TypeScript

import { Permission, Permissions } from "../types/permission.ts"
import { Role_Data } from "../types/role.ts"
import { cache } from "./cache.ts"
export const member_has_permission = (
member_id: string,
owner_id: string,
role_data: Role_Data[],
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 bot_has_permission = (guild_id: string, bot_id: string, permissions: Permissions[]) => {
const guild = cache.guilds.get(guild_id)
if (!guild) return false
const member = guild.members.get(bot_id)
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 calculate_permissions = (permission_bits: number) => {
return Object.keys(Permissions).filter(perm => {
return permission_bits & Permissions[perm as Permission]
})
}