42 lines
1.4 KiB
TypeScript
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;
|
|
},
|
|
});
|