63 lines
2.0 KiB
TypeScript
63 lines
2.0 KiB
TypeScript
import {GuildMember, Permissions} from "discord.js";
|
|
import {Config} from "./structures";
|
|
import $ from "./lib";
|
|
|
|
export enum PERMISSIONS {NONE, MOD, ADMIN, OWNER, BOT_SUPPORT, BOT_ADMIN, BOT_OWNER};
|
|
export const PermissionNames = ["User", "Moderator", "Administrator", "Server Owner", "Bot Support", "Bot Admin", "Bot Owner"];
|
|
|
|
// Here is where you enter in the functions that check for permissions.
|
|
const PermissionChecker: ((member: GuildMember) => boolean)[] = [
|
|
// NONE //
|
|
() => true,
|
|
|
|
// MOD //
|
|
member =>
|
|
member.hasPermission(Permissions.FLAGS.MANAGE_ROLES) ||
|
|
member.hasPermission(Permissions.FLAGS.MANAGE_MESSAGES) ||
|
|
member.hasPermission(Permissions.FLAGS.KICK_MEMBERS) ||
|
|
member.hasPermission(Permissions.FLAGS.BAN_MEMBERS),
|
|
|
|
// ADMIN //
|
|
member => member.hasPermission(Permissions.FLAGS.ADMINISTRATOR),
|
|
|
|
// OWNER //
|
|
member => member.guild.ownerID === member.id,
|
|
|
|
// BOT_SUPPORT //
|
|
member => Config.support.includes(member.id),
|
|
|
|
// BOT_ADMIN //
|
|
member => Config.admins.includes(member.id),
|
|
|
|
// BOT_OWNER //
|
|
member => Config.owner === member.id
|
|
];
|
|
|
|
// After checking the lengths of these three objects, use this as the length for consistency.
|
|
const length = Object.keys(PERMISSIONS).length / 2;
|
|
|
|
export function hasPermission(member: GuildMember, permission: PERMISSIONS): boolean
|
|
{
|
|
for(let i = length-1; i >= permission; i--)
|
|
if(PermissionChecker[i](member))
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
export function getPermissionLevel(member: GuildMember): number
|
|
{
|
|
for(let i = length-1; i >= 0; i--)
|
|
if(PermissionChecker[i](member))
|
|
return i;
|
|
return 0;
|
|
}
|
|
|
|
// Length Checking
|
|
(() => {
|
|
const lenNames = PermissionNames.length;
|
|
const lenChecker = PermissionChecker.length;
|
|
|
|
// By transitive property, lenNames and lenChecker have to be equal to each other as well.
|
|
if(length !== lenNames || length !== lenChecker)
|
|
$.error(`Permission object lengths aren't equal! Enum Length (${length}), Names Length (${lenNames}), and Functions Length (${lenChecker}). This WILL cause problems!`);
|
|
})() |