82 lines
2.2 KiB
TypeScript
82 lines
2.2 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!`
|
|
);
|
|
})();
|