zappyzep/backend/src/plugins/RoleManager/RoleManagerPlugin.ts

42 lines
1.4 KiB
TypeScript

import { guildPlugin } from "knub";
import { GuildRoleQueue } from "../../data/GuildRoleQueue";
import { mapToPublicFn } from "../../pluginUtils";
import { LogsPlugin } from "../Logs/LogsPlugin";
import { addPriorityRole } from "./functions/addPriorityRole";
import { addRole } from "./functions/addRole";
import { removePriorityRole } from "./functions/removePriorityRole";
import { removeRole } from "./functions/removeRole";
import { runRoleAssignmentLoop } from "./functions/runRoleAssignmentLoop";
import { RoleManagerPluginType, zRoleManagerConfig } from "./types";
export const RoleManagerPlugin = guildPlugin<RoleManagerPluginType>()({
name: "role_manager",
dependencies: () => [LogsPlugin],
configParser: (input) => zRoleManagerConfig.parse(input),
public: {
addRole: mapToPublicFn(addRole),
removeRole: mapToPublicFn(removeRole),
addPriorityRole: mapToPublicFn(addPriorityRole),
removePriorityRole: mapToPublicFn(removePriorityRole),
},
beforeLoad(pluginData) {
const { state, guild } = pluginData;
state.roleQueue = GuildRoleQueue.getGuildInstance(guild.id);
state.pendingRoleAssignmentPromise = Promise.resolve();
},
afterLoad(pluginData) {
runRoleAssignmentLoop(pluginData);
},
async afterUnload(pluginData) {
const { state } = pluginData;
state.abortRoleAssignmentLoop = true;
await state.pendingRoleAssignmentPromise;
},
});