feat: add internal role manager plugin; add role buttons plugin

This commit is contained in:
Dragory 2022-04-23 16:31:41 +03:00
parent 9314d57645
commit 3fe71b3e27
No known key found for this signature in database
GPG key ID: 5F387BA66DF8AAC1
23 changed files with 732 additions and 1 deletions

View file

@ -0,0 +1,39 @@
import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint";
import { ConfigSchema, RoleManagerPluginType } from "./types";
import { GuildRoleQueue } from "../../data/GuildRoleQueue";
import { mapToPublicFn } from "../../pluginUtils";
import { addRole } from "./functions/addRole";
import { removeRole } from "./functions/removeRole";
import { addPriorityRole } from "./functions/addPriorityRole";
import { removePriorityRole } from "./functions/removePriorityRole";
import { runRoleAssignmentLoop } from "./functions/runRoleAssignmentLoop";
import { LogsPlugin } from "../Logs/LogsPlugin";
export const RoleManagerPlugin = zeppelinGuildPlugin<RoleManagerPluginType>()({
name: "role_manager",
configSchema: ConfigSchema,
showInDocs: false,
dependencies: () => [LogsPlugin],
public: {
addRole: mapToPublicFn(addRole),
removeRole: mapToPublicFn(removeRole),
addPriorityRole: mapToPublicFn(addPriorityRole),
removePriorityRole: mapToPublicFn(removePriorityRole),
},
beforeLoad(pluginData) {
pluginData.state.roleQueue = GuildRoleQueue.getGuildInstance(pluginData.guild.id);
pluginData.state.pendingRoleAssignmentPromise = Promise.resolve();
},
afterLoad(pluginData) {
runRoleAssignmentLoop(pluginData);
},
async afterUnload(pluginData) {
pluginData.state.abortRoleAssignmentLoop = true;
await pluginData.state.pendingRoleAssignmentPromise;
},
});