From c2ae6d53d8503b0f999b5cbcf8181f8699638182 Mon Sep 17 00:00:00 2001 From: Dragory <2606411+Dragory@users.noreply.github.com> Date: Sat, 30 Mar 2024 12:34:33 +0000 Subject: [PATCH] feat: update knub; use base Knub types for plugins --- backend/package.json | 30 ++--- backend/src/api/docs.ts | 22 ++-- backend/src/configValidator.ts | 5 +- backend/src/data/dataSource.ts | 4 +- backend/src/exportSchemas.ts | 9 +- backend/src/index.ts | 2 +- .../plugins/AutoDelete/AutoDeletePlugin.ts | 12 +- backend/src/plugins/AutoDelete/info.ts | 8 ++ .../AutoReactions/AutoReactionsPlugin.ts | 14 +-- backend/src/plugins/AutoReactions/info.ts | 10 ++ backend/src/plugins/Automod/AutomodPlugin.ts | 8 +- backend/src/plugins/Automod/info.ts | 11 +- .../plugins/BotControl/BotControlPlugin.ts | 4 +- backend/src/plugins/Cases/CasesPlugin.ts | 15 +-- backend/src/plugins/Cases/info.ts | 10 ++ backend/src/plugins/Censor/CensorPlugin.ts | 16 +-- backend/src/plugins/Censor/info.ts | 12 ++ .../ChannelArchiver/ChannelArchiverPlugin.ts | 5 +- .../CompanionChannelsPlugin.ts | 16 +-- backend/src/plugins/CompanionChannels/info.ts | 12 ++ .../plugins/ContextMenus/ContextMenuPlugin.ts | 6 +- backend/src/plugins/ContextMenus/info.ts | 6 + .../src/plugins/Counters/CountersPlugin.ts | 13 +-- backend/src/plugins/Counters/info.ts | 11 ++ .../CustomEvents/CustomEventsPlugin.ts | 6 +- backend/src/plugins/CustomEvents/info.ts | 6 + .../GuildAccessMonitorPlugin.ts | 5 +- .../GuildConfigReloaderPlugin.ts | 5 +- .../src/plugins/GuildConfigReloader/info.ts | 6 + .../GuildInfoSaver/GuildInfoSaverPlugin.ts | 6 +- backend/src/plugins/GuildInfoSaver/info.ts | 6 + .../GuildMemberCachePlugin.ts | 5 +- backend/src/plugins/GuildMemberCache/info.ts | 6 + .../InternalPoster/InternalPosterPlugin.ts | 6 +- backend/src/plugins/InternalPoster/info.ts | 6 + .../plugins/LocateUser/LocateUserPlugin.ts | 16 +-- backend/src/plugins/LocateUser/info.ts | 14 +++ backend/src/plugins/Logs/LogsPlugin.ts | 10 +- backend/src/plugins/Logs/info.ts | 8 ++ .../MessageSaver/MessageSaverPlugin.ts | 6 +- backend/src/plugins/MessageSaver/info.ts | 6 + .../plugins/ModActions/ModActionsPlugin.ts | 14 +-- backend/src/plugins/ModActions/info.ts | 12 ++ backend/src/plugins/Mutes/MutesPlugin.ts | 9 +- backend/src/plugins/Mutes/info.ts | 8 ++ .../plugins/NameHistory/NameHistoryPlugin.ts | 6 +- backend/src/plugins/NameHistory/info.ts | 8 ++ backend/src/plugins/Persist/PersistPlugin.ts | 15 +-- backend/src/plugins/Persist/info.ts | 13 +++ .../plugins/Phisherman/PhishermanPlugin.ts | 8 +- backend/src/plugins/Phisherman/info.ts | 5 +- .../PingableRoles/PingableRolesPlugin.ts | 10 +- backend/src/plugins/PingableRoles/info.ts | 8 ++ backend/src/plugins/Post/PostPlugin.ts | 10 +- backend/src/plugins/Post/info.ts | 8 ++ .../ReactionRoles/ReactionRolesPlugin.ts | 11 +- backend/src/plugins/ReactionRoles/info.ts | 10 ++ .../src/plugins/Reminders/RemindersPlugin.ts | 10 +- backend/src/plugins/Reminders/info.ts | 8 ++ .../plugins/RoleButtons/RoleButtonsPlugin.ts | 7 +- backend/src/plugins/RoleButtons/info.ts | 5 +- .../plugins/RoleManager/RoleManagerPlugin.ts | 5 +- backend/src/plugins/RoleManager/info.ts | 6 + backend/src/plugins/Roles/RolesPlugin.ts | 14 +-- backend/src/plugins/Roles/info.ts | 12 ++ .../SelfGrantableRolesPlugin.ts | 58 +--------- .../src/plugins/SelfGrantableRoles/info.ts | 55 +++++++++ .../src/plugins/Slowmode/SlowmodePlugin.ts | 10 +- backend/src/plugins/Slowmode/info.ts | 8 ++ backend/src/plugins/Spam/SpamPlugin.ts | 16 +-- backend/src/plugins/Spam/info.ts | 14 +++ .../src/plugins/Starboard/StarboardPlugin.ts | 99 +--------------- backend/src/plugins/Starboard/info.ts | 96 +++++++++++++++ backend/src/plugins/Tags/TagsPlugin.ts | 25 +--- backend/src/plugins/Tags/docs.ts | 17 --- backend/src/plugins/Tags/info.ts | 36 ++++++ .../plugins/TimeAndDate/TimeAndDatePlugin.ts | 14 +-- backend/src/plugins/TimeAndDate/info.ts | 12 ++ .../UsernameSaver/UsernameSaverPlugin.ts | 5 +- backend/src/plugins/UsernameSaver/info.ts | 6 + backend/src/plugins/Utility/UtilityPlugin.ts | 10 +- backend/src/plugins/Utility/info.ts | 8 ++ .../WelcomeMessage/WelcomeMessagePlugin.ts | 10 +- backend/src/plugins/WelcomeMessage/info.ts | 8 ++ backend/src/plugins/ZeppelinPlugin.ts | 3 - .../src/plugins/ZeppelinPluginBlueprint.ts | 75 ------------ backend/src/plugins/availablePlugins.ts | 8 +- backend/src/plugins/pluginInfo.ts | 109 ++++++++++++++++++ backend/src/types.ts | 4 +- package-lock.json | 8 +- 90 files changed, 713 insertions(+), 607 deletions(-) create mode 100644 backend/src/plugins/AutoDelete/info.ts create mode 100644 backend/src/plugins/AutoReactions/info.ts create mode 100644 backend/src/plugins/Cases/info.ts create mode 100644 backend/src/plugins/Censor/info.ts create mode 100644 backend/src/plugins/CompanionChannels/info.ts create mode 100644 backend/src/plugins/ContextMenus/info.ts create mode 100644 backend/src/plugins/Counters/info.ts create mode 100644 backend/src/plugins/CustomEvents/info.ts create mode 100644 backend/src/plugins/GuildConfigReloader/info.ts create mode 100644 backend/src/plugins/GuildInfoSaver/info.ts create mode 100644 backend/src/plugins/GuildMemberCache/info.ts create mode 100644 backend/src/plugins/InternalPoster/info.ts create mode 100644 backend/src/plugins/LocateUser/info.ts create mode 100644 backend/src/plugins/Logs/info.ts create mode 100644 backend/src/plugins/MessageSaver/info.ts create mode 100644 backend/src/plugins/ModActions/info.ts create mode 100644 backend/src/plugins/Mutes/info.ts create mode 100644 backend/src/plugins/NameHistory/info.ts create mode 100644 backend/src/plugins/Persist/info.ts create mode 100644 backend/src/plugins/PingableRoles/info.ts create mode 100644 backend/src/plugins/Post/info.ts create mode 100644 backend/src/plugins/ReactionRoles/info.ts create mode 100644 backend/src/plugins/Reminders/info.ts create mode 100644 backend/src/plugins/RoleManager/info.ts create mode 100644 backend/src/plugins/Roles/info.ts create mode 100644 backend/src/plugins/SelfGrantableRoles/info.ts create mode 100644 backend/src/plugins/Slowmode/info.ts create mode 100644 backend/src/plugins/Spam/info.ts create mode 100644 backend/src/plugins/Starboard/info.ts delete mode 100644 backend/src/plugins/Tags/docs.ts create mode 100644 backend/src/plugins/Tags/info.ts create mode 100644 backend/src/plugins/TimeAndDate/info.ts create mode 100644 backend/src/plugins/UsernameSaver/info.ts create mode 100644 backend/src/plugins/Utility/info.ts create mode 100644 backend/src/plugins/WelcomeMessage/info.ts delete mode 100644 backend/src/plugins/ZeppelinPlugin.ts delete mode 100644 backend/src/plugins/ZeppelinPluginBlueprint.ts create mode 100644 backend/src/plugins/pluginInfo.ts diff --git a/backend/package.json b/backend/package.json index ff9132b7..e87b53e7 100644 --- a/backend/package.json +++ b/backend/package.json @@ -5,27 +5,27 @@ "private": true, "scripts": { "watch": "NODE_ENV=development HOST_MODE=development tsc-watch --onSuccess \"node start-dev.js\"", - "watch-yaml-parse-test": "NODE_ENV=development HOST_MODE=development tsc-watch --onSuccess \"node dist/backend/src/yamlParseTest.js\"", + "watch-yaml-parse-test": "NODE_ENV=development HOST_MODE=development tsc-watch --onSuccess \"node dist/yamlParseTest.js\"", "build": "tsc --build", - "start-bot-dev": "NODE_ENV=development HOST_MODE=development node --enable-source-maps --stack-trace-limit=30 --inspect=0.0.0.0:9229 dist/backend/src/index.js", - "start-bot-dev-debug": "NODE_ENV=development DEBUG=true clinic heapprofiler --collect-only --dest .clinic-bot -- node --enable-source-maps --stack-trace-limit=30 --inspect=0.0.0.0:9229 dist/backend/src/index.js", - "start-bot-prod": "cross-env NODE_ENV=production node --enable-source-maps --stack-trace-limit=30 dist/backend/src/index.js", - "start-bot-prod-debug": "NODE_ENV=production DEBUG=true clinic heapprofiler --collect-only --dest .clinic-bot -- node --enable-source-maps --stack-trace-limit=30 dist/backend/src/index.js", + "start-bot-dev": "NODE_ENV=development HOST_MODE=development node --enable-source-maps --stack-trace-limit=30 --inspect=0.0.0.0:9229 dist/index.js", + "start-bot-dev-debug": "NODE_ENV=development DEBUG=true clinic heapprofiler --collect-only --dest .clinic-bot -- node --enable-source-maps --stack-trace-limit=30 --inspect=0.0.0.0:9229 dist/index.js", + "start-bot-prod": "cross-env NODE_ENV=production node --enable-source-maps --stack-trace-limit=30 dist/index.js", + "start-bot-prod-debug": "NODE_ENV=production DEBUG=true clinic heapprofiler --collect-only --dest .clinic-bot -- node --enable-source-maps --stack-trace-limit=30 dist/index.js", "watch-bot": "NODE_ENV=development HOST_MODE=development tsc-watch --onSuccess \"npm run start-bot-dev\"", - "start-api-dev": "NODE_ENV=development HOST_MODE=development node --enable-source-maps --stack-trace-limit=30 --inspect=0.0.0.0:9239 dist/backend/src/api/index.js", - "start-api-dev-debug": "NODE_ENV=development DEBUG=true clinic heapprofiler --collect-only --dest .clinic-api -- node --enable-source-maps --stack-trace-limit=30 --inspect=0.0.0.0:9239 dist/backend/src/api/index.js", - "start-api-prod": "cross-env NODE_ENV=production node --enable-source-maps --stack-trace-limit=30 dist/backend/src/api/index.js", - "start-api-prod-debug": "NODE_ENV=production DEBUG=true clinic heapprofiler --collect-only --dest .clinic-api -- node --enable-source-maps --stack-trace-limit=30 dist/backend/src/api/index.js", + "start-api-dev": "NODE_ENV=development HOST_MODE=development node --enable-source-maps --stack-trace-limit=30 --inspect=0.0.0.0:9239 dist/api/index.js", + "start-api-dev-debug": "NODE_ENV=development DEBUG=true clinic heapprofiler --collect-only --dest .clinic-api -- node --enable-source-maps --stack-trace-limit=30 --inspect=0.0.0.0:9239 dist/api/index.js", + "start-api-prod": "cross-env NODE_ENV=production node --enable-source-maps --stack-trace-limit=30 dist/api/index.js", + "start-api-prod-debug": "NODE_ENV=production DEBUG=true clinic heapprofiler --collect-only --dest .clinic-api -- node --enable-source-maps --stack-trace-limit=30 dist/api/index.js", "watch-api": "NODE_ENV=development HOST_MODE=development tsc-watch --onSuccess \"npm run start-api-dev\"", "typeorm": "node ./node_modules/typeorm/cli.js", - "migrate": "npm run typeorm -- migration:run -d dist/backend/src/data/dataSource.js", + "migrate": "npm run typeorm -- migration:run -d dist/data/dataSource.js", "migrate-prod": "cross-env NODE_ENV=production npm run migrate", "migrate-dev": "NODE_ENV=development HOST_MODE=development npm run build && npm run migrate", - "migrate-rollback": "npm run typeorm -- migration:revert -d dist/backend/src/data/dataSource.js", + "migrate-rollback": "npm run typeorm -- migration:revert -d dist/data/dataSource.js", "migrate-rollback-prod": "cross-env NODE_ENV=production npm run migrate", "migrate-rollback-dev": "NODE_ENV=development HOST_MODE=development npm run build && npm run migrate", - "validate-active-configs": "NODE_ENV=development HOST_MODE=development node --enable-source-maps dist/backend/src/validateActiveConfigs.js > ../config-errors.txt", - "export-config-json-schema": "NODE_ENV=development HOST_MODE=development node --enable-source-maps dist/backend/src/exportSchemas.js > ../config-schema.json", + "validate-active-configs": "NODE_ENV=development HOST_MODE=development node --enable-source-maps dist/validateActiveConfigs.js > ../config-errors.txt", + "export-config-json-schema": "NODE_ENV=development HOST_MODE=development node --enable-source-maps dist/exportSchemas.js > ../config-schema.json", "test": "npm run build && npm run run-tests", "run-tests": "ava", "test-watch": "tsc-watch --onSuccess \"npx ava\"" @@ -45,7 +45,7 @@ "fp-ts": "^2.0.1", "humanize-duration": "^3.15.0", "js-yaml": "^3.13.1", - "knub": "^32.0.0-next.18", + "knub": "^32.0.0-next.20", "knub-command-manager": "^9.1.0", "last-commit-log": "^2.1.0", "lodash.chunk": "^4.2.0", @@ -102,7 +102,7 @@ }, "ava": { "files": [ - "dist/backend/src/**/*.test.js" + "dist/**/*.test.js" ], "require": [ "./register-tsconfig-paths.js" diff --git a/backend/src/api/docs.ts b/backend/src/api/docs.ts index 5b9de52b..51cb107f 100644 --- a/backend/src/api/docs.ts +++ b/backend/src/api/docs.ts @@ -1,6 +1,7 @@ import express from "express"; import z from "zod"; import { guildPlugins } from "../plugins/availablePlugins"; +import { guildPluginInfo } from "../plugins/pluginInfo"; import { indentLines } from "../utils"; import { notFound } from "./responses"; @@ -97,14 +98,15 @@ function formatZodConfigSchema(schema: z.ZodTypeAny) { } export function initDocs(app: express.Express) { - const docsPlugins = guildPlugins.filter((plugin) => plugin.showInDocs); + const docsPluginNames = Object.keys(guildPluginInfo).filter((k) => guildPluginInfo[k].showInDocs); app.get("/docs/plugins", (req: express.Request, res: express.Response) => { res.json( - docsPlugins.map((plugin) => { - const thinInfo = plugin.info ? { prettyName: plugin.info.prettyName, legacy: plugin.info.legacy ?? false } : {}; + docsPluginNames.map((pluginName) => { + const info = guildPluginInfo[pluginName]; + const thinInfo = info ? { prettyName: info.prettyName, legacy: info.legacy ?? false } : {}; return { - name: plugin.name, + name: pluginName, info: thinInfo, }; }), @@ -112,14 +114,14 @@ export function initDocs(app: express.Express) { }); app.get("/docs/plugins/:pluginName", (req: express.Request, res: express.Response) => { - // prettier-ignore - const plugin = docsPlugins.find(_plugin => _plugin.name === req.params.pluginName); - if (!plugin) { + const name = req.params.pluginName; + const baseInfo = guildPluginInfo[name]; + if (!baseInfo) { return notFound(res); } - const name = plugin.name; - const info = { ...(plugin.info || {}) }; + const plugin = guildPlugins.find((p) => p.name === name)!; + const info = { ...baseInfo }; delete info.configSchema; const messageCommands = (plugin.messageCommands || []).map((cmd) => ({ @@ -132,7 +134,7 @@ export function initDocs(app: express.Express) { })); const defaultOptions = plugin.defaultOptions || {}; - const configSchema = plugin.info?.configSchema && formatZodConfigSchema(plugin.info.configSchema); + const configSchema = info.configSchema && formatZodConfigSchema(info.configSchema); res.json({ name, diff --git a/backend/src/configValidator.ts b/backend/src/configValidator.ts index eb115d46..282b0398 100644 --- a/backend/src/configValidator.ts +++ b/backend/src/configValidator.ts @@ -1,12 +1,11 @@ -import { ConfigValidationError, PluginConfigManager } from "knub"; +import { ConfigValidationError, GuildPluginBlueprint, PluginConfigManager } from "knub"; import moment from "moment-timezone"; import { ZodError } from "zod"; -import { ZeppelinPlugin } from "./plugins/ZeppelinPlugin"; import { guildPlugins } from "./plugins/availablePlugins"; import { ZeppelinGuildConfig, zZeppelinGuildConfig } from "./types"; import { formatZodIssue } from "./utils/formatZodIssue"; -const pluginNameToPlugin = new Map(); +const pluginNameToPlugin = new Map>(); for (const plugin of guildPlugins) { pluginNameToPlugin.set(plugin.name, plugin); } diff --git a/backend/src/data/dataSource.ts b/backend/src/data/dataSource.ts index d763f082..e4d8df1b 100644 --- a/backend/src/data/dataSource.ts +++ b/backend/src/data/dataSource.ts @@ -7,8 +7,8 @@ import { backendDir } from "../paths"; moment.tz.setDefault("UTC"); -const entities = path.relative(process.cwd(), path.resolve(backendDir, "dist/backend/src/data/entities/*.js")); -const migrations = path.relative(process.cwd(), path.resolve(backendDir, "dist/backend/src/migrations/*.js")); +const entities = path.relative(process.cwd(), path.resolve(backendDir, "dist/data/entities/*.js")); +const migrations = path.relative(process.cwd(), path.resolve(backendDir, "dist/migrations/*.js")); type DbOpts = Pick; let dbOpts: DbOpts; diff --git a/backend/src/exportSchemas.ts b/backend/src/exportSchemas.ts index 54f55291..59cc5708 100644 --- a/backend/src/exportSchemas.ts +++ b/backend/src/exportSchemas.ts @@ -1,13 +1,12 @@ import { z } from "zod"; import zodToJsonSchema from "zod-to-json-schema"; -import { guildPlugins } from "./plugins/availablePlugins"; +import { guildPluginInfo } from "./plugins/pluginInfo"; import { zZeppelinGuildConfig } from "./types"; -const pluginSchemaMap = guildPlugins.reduce((map, plugin) => { - if (!plugin.info) { - return map; +const pluginSchemaMap = Object.entries(guildPluginInfo).reduce((map, [pluginName, pluginInfo]) => { + if (pluginInfo.configSchema) { + map[pluginName] = pluginInfo.configSchema; } - map[plugin.name] = plugin.info.configSchema; return map; }, {}); diff --git a/backend/src/index.ts b/backend/src/index.ts index f26f828f..77d66cba 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -445,7 +445,7 @@ connect().then(async () => { logger.info("Cleaning up before exit..."); // Force exit after 10sec setTimeout(() => process.exit(code), 10 * SECONDS); - await bot.stop(); + await bot.destroy(); await dataSource.destroy(); logger.info("Done! Exiting now."); process.exit(code); diff --git a/backend/src/plugins/AutoDelete/AutoDeletePlugin.ts b/backend/src/plugins/AutoDelete/AutoDeletePlugin.ts index 185f9def..4c537bf0 100644 --- a/backend/src/plugins/AutoDelete/AutoDeletePlugin.ts +++ b/backend/src/plugins/AutoDelete/AutoDeletePlugin.ts @@ -1,9 +1,8 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { GuildLogs } from "../../data/GuildLogs"; import { GuildSavedMessages } from "../../data/GuildSavedMessages"; import { LogsPlugin } from "../Logs/LogsPlugin"; import { TimeAndDatePlugin } from "../TimeAndDate/TimeAndDatePlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { AutoDeletePluginType, zAutoDeleteConfig } from "./types"; import { onMessageCreate } from "./util/onMessageCreate"; import { onMessageDelete } from "./util/onMessageDelete"; @@ -16,15 +15,8 @@ const defaultOptions: PluginOptions = { }, }; -export const AutoDeletePlugin = zeppelinGuildPlugin()({ +export const AutoDeletePlugin = guildPlugin()({ name: "auto_delete", - showInDocs: true, - info: { - prettyName: "Auto-delete", - description: "Allows Zeppelin to auto-delete messages from a channel after a delay", - configurationGuide: "Maximum deletion delay is currently 5 minutes", - configSchema: zAutoDeleteConfig, - } as any, dependencies: () => [TimeAndDatePlugin, LogsPlugin], configParser: (input) => zAutoDeleteConfig.parse(input), diff --git a/backend/src/plugins/AutoDelete/info.ts b/backend/src/plugins/AutoDelete/info.ts new file mode 100644 index 00000000..9ceeddee --- /dev/null +++ b/backend/src/plugins/AutoDelete/info.ts @@ -0,0 +1,8 @@ +import { ZeppelinPluginInfo } from "../../types"; + +export const autoDeletePluginInfo: ZeppelinPluginInfo = { + showInDocs: true, + prettyName: "Auto-delete", + description: "Allows Zeppelin to auto-delete messages from a channel after a delay", + configurationGuide: "Maximum deletion delay is currently 5 minutes", +}; diff --git a/backend/src/plugins/AutoReactions/AutoReactionsPlugin.ts b/backend/src/plugins/AutoReactions/AutoReactionsPlugin.ts index 9b01d538..6c24b296 100644 --- a/backend/src/plugins/AutoReactions/AutoReactionsPlugin.ts +++ b/backend/src/plugins/AutoReactions/AutoReactionsPlugin.ts @@ -1,9 +1,7 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { GuildAutoReactions } from "../../data/GuildAutoReactions"; import { GuildSavedMessages } from "../../data/GuildSavedMessages"; -import { trimPluginDescription } from "../../utils"; import { LogsPlugin } from "../Logs/LogsPlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { DisableAutoReactionsCmd } from "./commands/DisableAutoReactionsCmd"; import { NewAutoReactionsCmd } from "./commands/NewAutoReactionsCmd"; import { AddReactionsEvt } from "./events/AddReactionsEvt"; @@ -23,16 +21,8 @@ const defaultOptions: PluginOptions = { ], }; -export const AutoReactionsPlugin = zeppelinGuildPlugin()({ +export const AutoReactionsPlugin = guildPlugin()({ name: "auto_reactions", - showInDocs: true, - info: { - prettyName: "Auto-reactions", - description: trimPluginDescription(` - Allows setting up automatic reactions to all new messages on a channel - `), - configSchema: zAutoReactionsConfig, - }, // prettier-ignore dependencies: () => [ diff --git a/backend/src/plugins/AutoReactions/info.ts b/backend/src/plugins/AutoReactions/info.ts new file mode 100644 index 00000000..d908f163 --- /dev/null +++ b/backend/src/plugins/AutoReactions/info.ts @@ -0,0 +1,10 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { trimPluginDescription } from "../../utils"; + +export const autoReactionsInfo: ZeppelinPluginInfo = { + showInDocs: true, + prettyName: "Auto-reactions", + description: trimPluginDescription(` + Allows setting up automatic reactions to all new messages on a channel + `), +}; diff --git a/backend/src/plugins/Automod/AutomodPlugin.ts b/backend/src/plugins/Automod/AutomodPlugin.ts index 29fcf9e6..33956590 100644 --- a/backend/src/plugins/Automod/AutomodPlugin.ts +++ b/backend/src/plugins/Automod/AutomodPlugin.ts @@ -1,4 +1,4 @@ -import { CooldownManager } from "knub"; +import { CooldownManager, guildPlugin } from "knub"; import { Queue } from "../../Queue"; import { GuildAntiraidLevels } from "../../data/GuildAntiraidLevels"; import { GuildArchives } from "../../data/GuildArchives"; @@ -15,7 +15,6 @@ import { ModActionsPlugin } from "../ModActions/ModActionsPlugin"; import { MutesPlugin } from "../Mutes/MutesPlugin"; import { PhishermanPlugin } from "../Phisherman/PhishermanPlugin"; import { RoleManagerPlugin } from "../RoleManager/RoleManagerPlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { AntiraidClearCmd } from "./commands/AntiraidClearCmd"; import { SetAntiraidCmd } from "./commands/SetAntiraidCmd"; import { ViewAntiraidCmd } from "./commands/ViewAntiraidCmd"; @@ -32,7 +31,6 @@ import { import { clearOldRecentNicknameChanges } from "./functions/clearOldNicknameChanges"; import { clearOldRecentActions } from "./functions/clearOldRecentActions"; import { clearOldRecentSpam } from "./functions/clearOldRecentSpam"; -import { pluginInfo } from "./info"; import { AutomodPluginType, zAutomodConfig } from "./types"; const defaultOptions = { @@ -58,10 +56,8 @@ const defaultOptions = { ], }; -export const AutomodPlugin = zeppelinGuildPlugin()({ +export const AutomodPlugin = guildPlugin()({ name: "automod", - showInDocs: true, - info: pluginInfo, // prettier-ignore dependencies: () => [ diff --git a/backend/src/plugins/Automod/info.ts b/backend/src/plugins/Automod/info.ts index a2071e21..d33d628f 100644 --- a/backend/src/plugins/Automod/info.ts +++ b/backend/src/plugins/Automod/info.ts @@ -1,12 +1,12 @@ +import { ZeppelinPluginInfo } from "../../types"; import { trimPluginDescription } from "../../utils"; -import { ZeppelinGuildPluginBlueprint } from "../ZeppelinPluginBlueprint"; -import { zAutomodConfig } from "./types"; -export const pluginInfo: ZeppelinGuildPluginBlueprint["info"] = { +export const automodPluginInfo: ZeppelinPluginInfo = { + showInDocs: true, prettyName: "Automod", description: trimPluginDescription(` Allows specifying automated actions in response to triggers. Example use cases include word filtering and spam prevention. - `), + `), configurationGuide: trimPluginDescription(` The automod plugin is very customizable. For a full list of available triggers, actions, and their options, see Config schema at the bottom of this page. @@ -99,6 +99,5 @@ export const pluginInfo: ZeppelinGuildPluginBlueprint["info"] = { Bad custom status on user <@!{user.id}>: {matchSummary} ~~~ - `), - configSchema: zAutomodConfig, + `), }; diff --git a/backend/src/plugins/BotControl/BotControlPlugin.ts b/backend/src/plugins/BotControl/BotControlPlugin.ts index 653e8def..7fe9ed1c 100644 --- a/backend/src/plugins/BotControl/BotControlPlugin.ts +++ b/backend/src/plugins/BotControl/BotControlPlugin.ts @@ -1,10 +1,10 @@ import { Snowflake, TextChannel } from "discord.js"; +import { globalPlugin } from "knub"; import { AllowedGuilds } from "../../data/AllowedGuilds"; import { ApiPermissionAssignments } from "../../data/ApiPermissionAssignments"; import { Configs } from "../../data/Configs"; import { GuildArchives } from "../../data/GuildArchives"; import { sendSuccessMessage } from "../../pluginUtils"; -import { zeppelinGlobalPlugin } from "../ZeppelinPluginBlueprint"; import { getActiveReload, resetActiveReload } from "./activeReload"; import { AddDashboardUserCmd } from "./commands/AddDashboardUserCmd"; import { AddServerFromInviteCmd } from "./commands/AddServerFromInviteCmd"; @@ -35,7 +35,7 @@ const defaultOptions = { }, }; -export const BotControlPlugin = zeppelinGlobalPlugin()({ +export const BotControlPlugin = globalPlugin()({ name: "bot_control", configParser: (input) => zBotControlConfig.parse(input), defaultOptions, diff --git a/backend/src/plugins/Cases/CasesPlugin.ts b/backend/src/plugins/Cases/CasesPlugin.ts index 9e6df53a..f0b4be6c 100644 --- a/backend/src/plugins/Cases/CasesPlugin.ts +++ b/backend/src/plugins/Cases/CasesPlugin.ts @@ -1,13 +1,12 @@ +import { guildPlugin } from "knub"; import { CaseTypes } from "../../data/CaseTypes"; -import { Case } from "../../data/entities/Case"; import { GuildArchives } from "../../data/GuildArchives"; import { GuildCases } from "../../data/GuildCases"; import { GuildLogs } from "../../data/GuildLogs"; +import { Case } from "../../data/entities/Case"; import { mapToPublicFn } from "../../pluginUtils"; -import { trimPluginDescription } from "../../utils"; import { InternalPosterPlugin } from "../InternalPoster/InternalPosterPlugin"; import { TimeAndDatePlugin } from "../TimeAndDate/TimeAndDatePlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { createCase } from "./functions/createCase"; import { createCaseNote } from "./functions/createCaseNote"; import { getCaseEmbed } from "./functions/getCaseEmbed"; @@ -34,16 +33,8 @@ const defaultOptions = { }, }; -export const CasesPlugin = zeppelinGuildPlugin()({ +export const CasesPlugin = guildPlugin()({ name: "cases", - showInDocs: true, - info: { - prettyName: "Cases", - description: trimPluginDescription(` - This plugin contains basic configuration for cases created by other plugins - `), - configSchema: zCasesConfig, - }, dependencies: async () => [TimeAndDatePlugin, InternalPosterPlugin, (await getLogsPlugin()).LogsPlugin], configParser: (input) => zCasesConfig.parse(input), diff --git a/backend/src/plugins/Cases/info.ts b/backend/src/plugins/Cases/info.ts new file mode 100644 index 00000000..efa5d17e --- /dev/null +++ b/backend/src/plugins/Cases/info.ts @@ -0,0 +1,10 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { trimPluginDescription } from "../../utils"; + +export const casesPluginInfo: ZeppelinPluginInfo = { + showInDocs: true, + prettyName: "Cases", + description: trimPluginDescription(` + This plugin contains basic configuration for cases created by other plugins + `), +}; diff --git a/backend/src/plugins/Censor/CensorPlugin.ts b/backend/src/plugins/Censor/CensorPlugin.ts index 5764d396..45e7a52e 100644 --- a/backend/src/plugins/Censor/CensorPlugin.ts +++ b/backend/src/plugins/Censor/CensorPlugin.ts @@ -1,10 +1,8 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { GuildLogs } from "../../data/GuildLogs"; import { GuildSavedMessages } from "../../data/GuildSavedMessages"; import { discardRegExpRunner, getRegExpRunner } from "../../regExpRunners"; -import { trimPluginDescription } from "../../utils"; import { LogsPlugin } from "../Logs/LogsPlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { CensorPluginType, zCensorConfig } from "./types"; import { onMessageCreate } from "./util/onMessageCreate"; import { onMessageUpdate } from "./util/onMessageUpdate"; @@ -43,18 +41,8 @@ const defaultOptions: PluginOptions = { ], }; -export const CensorPlugin = zeppelinGuildPlugin()({ +export const CensorPlugin = guildPlugin()({ name: "censor", - showInDocs: true, - info: { - prettyName: "Censor", - description: trimPluginDescription(` - Censor words, tokens, links, regex, etc. - For more advanced filtering, check out the Automod plugin! - `), - legacy: true, - configSchema: zCensorConfig, - }, dependencies: () => [LogsPlugin], configParser: (input) => zCensorConfig.parse(input), diff --git a/backend/src/plugins/Censor/info.ts b/backend/src/plugins/Censor/info.ts new file mode 100644 index 00000000..1c8fe33a --- /dev/null +++ b/backend/src/plugins/Censor/info.ts @@ -0,0 +1,12 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { trimPluginDescription } from "../../utils"; + +export const censorPluginInfo: ZeppelinPluginInfo = { + showInDocs: true, + legacy: true, + prettyName: "Censor", + description: trimPluginDescription(` + Censor words, tokens, links, regex, etc. + For more advanced filtering, check out the Automod plugin! + `), +}; diff --git a/backend/src/plugins/ChannelArchiver/ChannelArchiverPlugin.ts b/backend/src/plugins/ChannelArchiver/ChannelArchiverPlugin.ts index 615d3467..c8373aeb 100644 --- a/backend/src/plugins/ChannelArchiver/ChannelArchiverPlugin.ts +++ b/backend/src/plugins/ChannelArchiver/ChannelArchiverPlugin.ts @@ -1,12 +1,11 @@ +import { guildPlugin } from "knub"; import z from "zod"; import { TimeAndDatePlugin } from "../TimeAndDate/TimeAndDatePlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { ArchiveChannelCmd } from "./commands/ArchiveChannelCmd"; import { ChannelArchiverPluginType } from "./types"; -export const ChannelArchiverPlugin = zeppelinGuildPlugin()({ +export const ChannelArchiverPlugin = guildPlugin()({ name: "channel_archiver", - showInDocs: false, dependencies: () => [TimeAndDatePlugin], configParser: (input) => z.strictObject({}).parse(input), diff --git a/backend/src/plugins/CompanionChannels/CompanionChannelsPlugin.ts b/backend/src/plugins/CompanionChannels/CompanionChannelsPlugin.ts index 4e7987a7..6ff22711 100644 --- a/backend/src/plugins/CompanionChannels/CompanionChannelsPlugin.ts +++ b/backend/src/plugins/CompanionChannels/CompanionChannelsPlugin.ts @@ -1,8 +1,6 @@ -import { CooldownManager } from "knub"; +import { CooldownManager, guildPlugin } from "knub"; import { GuildLogs } from "../../data/GuildLogs"; -import { trimPluginDescription } from "../../utils"; import { LogsPlugin } from "../Logs/LogsPlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { VoiceStateUpdateEvt } from "./events/VoiceStateUpdateEvt"; import { CompanionChannelsPluginType, zCompanionChannelsConfig } from "./types"; @@ -12,18 +10,8 @@ const defaultOptions = { }, }; -export const CompanionChannelsPlugin = zeppelinGuildPlugin()({ +export const CompanionChannelsPlugin = guildPlugin()({ name: "companion_channels", - showInDocs: true, - info: { - prettyName: "Companion channels", - description: trimPluginDescription(` - Set up 'companion channels' between text and voice channels. - Once set up, any time a user joins one of the specified voice channels, - they'll get channel permissions applied to them for the text channels. - `), - configSchema: zCompanionChannelsConfig, - }, dependencies: () => [LogsPlugin], configParser: (input) => zCompanionChannelsConfig.parse(input), diff --git a/backend/src/plugins/CompanionChannels/info.ts b/backend/src/plugins/CompanionChannels/info.ts new file mode 100644 index 00000000..4dcd8362 --- /dev/null +++ b/backend/src/plugins/CompanionChannels/info.ts @@ -0,0 +1,12 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { trimPluginDescription } from "../../utils"; + +export const companionChannelsPluginInfo: ZeppelinPluginInfo = { + showInDocs: true, + prettyName: "Companion channels", + description: trimPluginDescription(` + Set up 'companion channels' between text and voice channels. + Once set up, any time a user joins one of the specified voice channels, + they'll get channel permissions applied to them for the text channels. + `), +}; diff --git a/backend/src/plugins/ContextMenus/ContextMenuPlugin.ts b/backend/src/plugins/ContextMenus/ContextMenuPlugin.ts index 57d1a763..8c6cbdae 100644 --- a/backend/src/plugins/ContextMenus/ContextMenuPlugin.ts +++ b/backend/src/plugins/ContextMenus/ContextMenuPlugin.ts @@ -1,9 +1,8 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { GuildContextMenuLinks } from "../../data/GuildContextMenuLinks"; import { LogsPlugin } from "../Logs/LogsPlugin"; import { MutesPlugin } from "../Mutes/MutesPlugin"; import { UtilityPlugin } from "../Utility/UtilityPlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { ContextClickedEvt } from "./events/ContextClickedEvt"; import { ContextMenuPluginType, zContextMenusConfig } from "./types"; import { loadAllCommands } from "./utils/loadAllCommands"; @@ -31,9 +30,8 @@ const defaultOptions: PluginOptions = { ], }; -export const ContextMenuPlugin = zeppelinGuildPlugin()({ +export const ContextMenuPlugin = guildPlugin()({ name: "context_menu", - showInDocs: false, dependencies: () => [MutesPlugin, LogsPlugin, UtilityPlugin], configParser: (input) => zContextMenusConfig.parse(input), diff --git a/backend/src/plugins/ContextMenus/info.ts b/backend/src/plugins/ContextMenus/info.ts new file mode 100644 index 00000000..9ec03a9d --- /dev/null +++ b/backend/src/plugins/ContextMenus/info.ts @@ -0,0 +1,6 @@ +import { ZeppelinPluginInfo } from "../../types"; + +export const contextMenuPluginInfo: ZeppelinPluginInfo = { + showInDocs: false, + prettyName: "Context menu", +}; diff --git a/backend/src/plugins/Counters/CountersPlugin.ts b/backend/src/plugins/Counters/CountersPlugin.ts index 1cc1ec25..1143c0a1 100644 --- a/backend/src/plugins/Counters/CountersPlugin.ts +++ b/backend/src/plugins/Counters/CountersPlugin.ts @@ -1,10 +1,9 @@ import { EventEmitter } from "events"; -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { GuildCounters } from "../../data/GuildCounters"; import { CounterTrigger, parseCounterConditionString } from "../../data/entities/CounterTrigger"; import { mapToPublicFn } from "../../pluginUtils"; import { MINUTES, convertDelayStringToMS, values } from "../../utils"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { AddCounterCmd } from "./commands/AddCounterCmd"; import { CountersListCmd } from "./commands/CountersListCmd"; import { ResetAllCounterValuesCmd } from "./commands/ResetAllCounterValuesCmd"; @@ -56,16 +55,8 @@ const defaultOptions: PluginOptions = { * A single trigger can only trigger once per user/channel/in general, depending on how specific the counter is (e.g. a per-user trigger can only trigger once per user). * After being triggered, a trigger is "reset" if the counter value no longer matches the trigger (e.g. drops to 100 or below in the above example). After this, that trigger can be triggered again. */ -export const CountersPlugin = zeppelinGuildPlugin()({ +export const CountersPlugin = guildPlugin()({ name: "counters", - showInDocs: true, - info: { - prettyName: "Counters", - description: - "Keep track of per-user, per-channel, or global numbers and trigger specific actions based on this number", - configurationGuide: "See Counters setup guide", - configSchema: zCountersConfig, - }, defaultOptions, // TODO: Separate input and output types diff --git a/backend/src/plugins/Counters/info.ts b/backend/src/plugins/Counters/info.ts new file mode 100644 index 00000000..f45e1a0c --- /dev/null +++ b/backend/src/plugins/Counters/info.ts @@ -0,0 +1,11 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { zCountersConfig } from "./types"; + +export const countersPluginInfo: ZeppelinPluginInfo = { + prettyName: "Counters", + showInDocs: true, + description: + "Keep track of per-user, per-channel, or global numbers and trigger specific actions based on this number", + configurationGuide: "See Counters setup guide", + configSchema: zCountersConfig, +}; diff --git a/backend/src/plugins/CustomEvents/CustomEventsPlugin.ts b/backend/src/plugins/CustomEvents/CustomEventsPlugin.ts index 82c5e612..f85036a1 100644 --- a/backend/src/plugins/CustomEvents/CustomEventsPlugin.ts +++ b/backend/src/plugins/CustomEvents/CustomEventsPlugin.ts @@ -1,5 +1,5 @@ import { GuildChannel, GuildMember, User } from "discord.js"; -import { guildPluginMessageCommand, parseSignature } from "knub"; +import { guildPlugin, guildPluginMessageCommand, parseSignature } from "knub"; import { TSignature } from "knub-command-manager"; import { commandTypes } from "../../commandTypes"; import { TemplateSafeValueContainer, createTypedTemplateSafeValueContainer } from "../../templateFormatter"; @@ -12,7 +12,6 @@ import { userToTemplateSafeUser, } from "../../utils/templateSafeObjects"; import { LogsPlugin } from "../Logs/LogsPlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { runEvent } from "./functions/runEvent"; import { CustomEventsPluginType, zCustomEventsConfig } from "./types"; @@ -22,9 +21,8 @@ const defaultOptions = { }, }; -export const CustomEventsPlugin = zeppelinGuildPlugin()({ +export const CustomEventsPlugin = guildPlugin()({ name: "custom_events", - showInDocs: false, dependencies: () => [LogsPlugin], configParser: (input) => zCustomEventsConfig.parse(input), diff --git a/backend/src/plugins/CustomEvents/info.ts b/backend/src/plugins/CustomEvents/info.ts new file mode 100644 index 00000000..32db1bee --- /dev/null +++ b/backend/src/plugins/CustomEvents/info.ts @@ -0,0 +1,6 @@ +import { ZeppelinPluginInfo } from "../../types"; + +export const customEventsPluginInfo: ZeppelinPluginInfo = { + prettyName: "Custom events", + showInDocs: false, +}; diff --git a/backend/src/plugins/GuildAccessMonitor/GuildAccessMonitorPlugin.ts b/backend/src/plugins/GuildAccessMonitor/GuildAccessMonitorPlugin.ts index 3c267aab..c0319b55 100644 --- a/backend/src/plugins/GuildAccessMonitor/GuildAccessMonitorPlugin.ts +++ b/backend/src/plugins/GuildAccessMonitor/GuildAccessMonitorPlugin.ts @@ -1,10 +1,9 @@ import { Guild } from "discord.js"; -import { BasePluginType, GlobalPluginData, globalPluginEventListener } from "knub"; +import { BasePluginType, GlobalPluginData, globalPlugin, globalPluginEventListener } from "knub"; import z from "zod"; import { AllowedGuilds } from "../../data/AllowedGuilds"; import { Configs } from "../../data/Configs"; import { env } from "../../env"; -import { zeppelinGlobalPlugin } from "../ZeppelinPluginBlueprint"; interface GuildAccessMonitorPluginType extends BasePluginType { state: { @@ -23,7 +22,7 @@ async function checkGuild(pluginData: GlobalPluginData()({ +export const GuildAccessMonitorPlugin = globalPlugin()({ name: "guild_access_monitor", configParser: (input) => z.strictObject({}).parse(input), diff --git a/backend/src/plugins/GuildConfigReloader/GuildConfigReloaderPlugin.ts b/backend/src/plugins/GuildConfigReloader/GuildConfigReloaderPlugin.ts index 6fdc467a..4c7954a1 100644 --- a/backend/src/plugins/GuildConfigReloader/GuildConfigReloaderPlugin.ts +++ b/backend/src/plugins/GuildConfigReloader/GuildConfigReloaderPlugin.ts @@ -1,12 +1,11 @@ +import { globalPlugin } from "knub"; import z from "zod"; import { Configs } from "../../data/Configs"; -import { zeppelinGlobalPlugin } from "../ZeppelinPluginBlueprint"; import { reloadChangedGuilds } from "./functions/reloadChangedGuilds"; import { GuildConfigReloaderPluginType } from "./types"; -export const GuildConfigReloaderPlugin = zeppelinGlobalPlugin()({ +export const GuildConfigReloaderPlugin = globalPlugin()({ name: "guild_config_reloader", - showInDocs: false, configParser: (input) => z.strictObject({}).parse(input), diff --git a/backend/src/plugins/GuildConfigReloader/info.ts b/backend/src/plugins/GuildConfigReloader/info.ts new file mode 100644 index 00000000..ac7c8c0f --- /dev/null +++ b/backend/src/plugins/GuildConfigReloader/info.ts @@ -0,0 +1,6 @@ +import { ZeppelinPluginInfo } from "../../types"; + +export const guildConfigReloaderPluginInfo: ZeppelinPluginInfo = { + prettyName: "Guild config reloader", + showInDocs: false, +}; diff --git a/backend/src/plugins/GuildInfoSaver/GuildInfoSaverPlugin.ts b/backend/src/plugins/GuildInfoSaver/GuildInfoSaverPlugin.ts index 873711b3..724cd2fe 100644 --- a/backend/src/plugins/GuildInfoSaver/GuildInfoSaverPlugin.ts +++ b/backend/src/plugins/GuildInfoSaver/GuildInfoSaverPlugin.ts @@ -1,15 +1,13 @@ import { Guild } from "discord.js"; -import { guildPluginEventListener } from "knub"; +import { guildPlugin, guildPluginEventListener } from "knub"; import z from "zod"; import { AllowedGuilds } from "../../data/AllowedGuilds"; import { ApiPermissionAssignments } from "../../data/ApiPermissionAssignments"; import { MINUTES } from "../../utils"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { GuildInfoSaverPluginType } from "./types"; -export const GuildInfoSaverPlugin = zeppelinGuildPlugin()({ +export const GuildInfoSaverPlugin = guildPlugin()({ name: "guild_info_saver", - showInDocs: false, configParser: (input) => z.strictObject({}).parse(input), diff --git a/backend/src/plugins/GuildInfoSaver/info.ts b/backend/src/plugins/GuildInfoSaver/info.ts new file mode 100644 index 00000000..411e7891 --- /dev/null +++ b/backend/src/plugins/GuildInfoSaver/info.ts @@ -0,0 +1,6 @@ +import { ZeppelinPluginInfo } from "../../types"; + +export const guildInfoSaverPluginInfo: ZeppelinPluginInfo = { + prettyName: "Guild info saver", + showInDocs: false, +}; diff --git a/backend/src/plugins/GuildMemberCache/GuildMemberCachePlugin.ts b/backend/src/plugins/GuildMemberCache/GuildMemberCachePlugin.ts index 293d582e..a3b2127e 100644 --- a/backend/src/plugins/GuildMemberCache/GuildMemberCachePlugin.ts +++ b/backend/src/plugins/GuildMemberCache/GuildMemberCachePlugin.ts @@ -1,8 +1,8 @@ +import { guildPlugin } from "knub"; import z from "zod"; import { GuildMemberCache } from "../../data/GuildMemberCache"; import { mapToPublicFn } from "../../pluginUtils"; import { SECONDS } from "../../utils"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { cancelDeletionOnMemberJoin } from "./events/cancelDeletionOnMemberJoin"; import { removeMemberCacheOnMemberLeave } from "./events/removeMemberCacheOnMemberLeave"; import { updateMemberCacheOnMemberUpdate } from "./events/updateMemberCacheOnMemberUpdate"; @@ -14,9 +14,8 @@ import { GuildMemberCachePluginType } from "./types"; const PENDING_SAVE_INTERVAL = 30 * SECONDS; -export const GuildMemberCachePlugin = zeppelinGuildPlugin()({ +export const GuildMemberCachePlugin = guildPlugin()({ name: "guild_member_cache", - showInDocs: false, configParser: (input) => z.strictObject({}).parse(input), diff --git a/backend/src/plugins/GuildMemberCache/info.ts b/backend/src/plugins/GuildMemberCache/info.ts new file mode 100644 index 00000000..7980a788 --- /dev/null +++ b/backend/src/plugins/GuildMemberCache/info.ts @@ -0,0 +1,6 @@ +import { ZeppelinPluginInfo } from "../../types"; + +export const guildMemberCachePluginInfo: ZeppelinPluginInfo = { + prettyName: "Guild member cache", + showInDocs: false, +}; diff --git a/backend/src/plugins/InternalPoster/InternalPosterPlugin.ts b/backend/src/plugins/InternalPoster/InternalPosterPlugin.ts index 9365109e..10844aa9 100644 --- a/backend/src/plugins/InternalPoster/InternalPosterPlugin.ts +++ b/backend/src/plugins/InternalPoster/InternalPosterPlugin.ts @@ -1,9 +1,8 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import z from "zod"; import { Queue } from "../../Queue"; import { Webhooks } from "../../data/Webhooks"; import { mapToPublicFn } from "../../pluginUtils"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { editMessage } from "./functions/editMessage"; import { sendMessage } from "./functions/sendMessage"; import { InternalPosterPluginType } from "./types"; @@ -13,9 +12,8 @@ const defaultOptions: PluginOptions = { overrides: [], }; -export const InternalPosterPlugin = zeppelinGuildPlugin()({ +export const InternalPosterPlugin = guildPlugin()({ name: "internal_poster", - showInDocs: false, configParser: (input) => z.strictObject({}).parse(input), defaultOptions, diff --git a/backend/src/plugins/InternalPoster/info.ts b/backend/src/plugins/InternalPoster/info.ts new file mode 100644 index 00000000..948bbbc8 --- /dev/null +++ b/backend/src/plugins/InternalPoster/info.ts @@ -0,0 +1,6 @@ +import { ZeppelinPluginInfo } from "../../types"; + +export const internalPosterPluginInfo: ZeppelinPluginInfo = { + prettyName: "Internal poster", + showInDocs: false, +}; diff --git a/backend/src/plugins/LocateUser/LocateUserPlugin.ts b/backend/src/plugins/LocateUser/LocateUserPlugin.ts index a99dc84c..3fb8f841 100644 --- a/backend/src/plugins/LocateUser/LocateUserPlugin.ts +++ b/backend/src/plugins/LocateUser/LocateUserPlugin.ts @@ -1,8 +1,6 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { onGuildEvent } from "../../data/GuildEvents"; import { GuildVCAlerts } from "../../data/GuildVCAlerts"; -import { trimPluginDescription } from "../../utils"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { FollowCmd } from "./commands/FollowCmd"; import { DeleteFollowCmd, ListFollowCmd } from "./commands/ListFollowCmd"; import { WhereCmd } from "./commands/WhereCmd"; @@ -28,18 +26,8 @@ const defaultOptions: PluginOptions = { ], }; -export const LocateUserPlugin = zeppelinGuildPlugin()({ +export const LocateUserPlugin = guildPlugin()({ name: "locate_user", - showInDocs: true, - info: { - prettyName: "Locate user", - description: trimPluginDescription(` - This plugin allows users with access to the commands the following: - * Instantly receive an invite to the voice channel of a user - * Be notified as soon as a user switches or joins a voice channel - `), - configSchema: zLocateUserConfig, - }, configParser: (input) => zLocateUserConfig.parse(input), defaultOptions, diff --git a/backend/src/plugins/LocateUser/info.ts b/backend/src/plugins/LocateUser/info.ts new file mode 100644 index 00000000..41fcf11b --- /dev/null +++ b/backend/src/plugins/LocateUser/info.ts @@ -0,0 +1,14 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { trimPluginDescription } from "../../utils"; +import { zLocateUserConfig } from "./types"; + +export const locateUserPluginInfo: ZeppelinPluginInfo = { + prettyName: "Locate user", + description: trimPluginDescription(` + This plugin allows users with access to the commands the following: + * Instantly receive an invite to the voice channel of a user + * Be notified as soon as a user switches or joins a voice channel + `), + configSchema: zLocateUserConfig, + showInDocs: true, +}; diff --git a/backend/src/plugins/Logs/LogsPlugin.ts b/backend/src/plugins/Logs/LogsPlugin.ts index c989c682..a8742615 100644 --- a/backend/src/plugins/Logs/LogsPlugin.ts +++ b/backend/src/plugins/Logs/LogsPlugin.ts @@ -1,4 +1,4 @@ -import { CooldownManager, PluginOptions } from "knub"; +import { CooldownManager, PluginOptions, guildPlugin } from "knub"; import DefaultLogMessages from "../../data/DefaultLogMessages.json"; import { GuildArchives } from "../../data/GuildArchives"; import { GuildCases } from "../../data/GuildCases"; @@ -10,7 +10,6 @@ import { mapToPublicFn } from "../../pluginUtils"; import { discardRegExpRunner, getRegExpRunner } from "../../regExpRunners"; import { TypedTemplateSafeValueContainer, createTypedTemplateSafeValueContainer } from "../../templateFormatter"; import { TimeAndDatePlugin } from "../TimeAndDate/TimeAndDatePlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { LogsChannelCreateEvt, LogsChannelDeleteEvt, LogsChannelUpdateEvt } from "./events/LogsChannelModifyEvts"; import { LogsEmojiCreateEvt, @@ -140,13 +139,8 @@ const defaultOptions: PluginOptions = { ], }; -export const LogsPlugin = zeppelinGuildPlugin()({ +export const LogsPlugin = guildPlugin()({ name: "logs", - showInDocs: true, - info: { - prettyName: "Logs", - configSchema: zLogsConfig, - }, dependencies: async () => [TimeAndDatePlugin, InternalPosterPlugin, (await getCasesPlugin()).CasesPlugin], configParser: (input) => zLogsConfig.parse(input), diff --git a/backend/src/plugins/Logs/info.ts b/backend/src/plugins/Logs/info.ts new file mode 100644 index 00000000..10683a03 --- /dev/null +++ b/backend/src/plugins/Logs/info.ts @@ -0,0 +1,8 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { zLogsConfig } from "./types"; + +export const logsPluginInfo: ZeppelinPluginInfo = { + prettyName: "Logs", + configSchema: zLogsConfig, + showInDocs: true, +}; diff --git a/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts b/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts index 0b140cd7..4c960904 100644 --- a/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts +++ b/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts @@ -1,6 +1,5 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { GuildSavedMessages } from "../../data/GuildSavedMessages"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { SaveMessagesToDBCmd } from "./commands/SaveMessagesToDB"; import { SavePinsToDBCmd } from "./commands/SavePinsToDB"; import { MessageCreateEvt, MessageDeleteBulkEvt, MessageDeleteEvt, MessageUpdateEvt } from "./events/SaveMessagesEvts"; @@ -20,9 +19,8 @@ const defaultOptions: PluginOptions = { ], }; -export const MessageSaverPlugin = zeppelinGuildPlugin()({ +export const MessageSaverPlugin = guildPlugin()({ name: "message_saver", - showInDocs: false, configParser: (input) => zMessageSaverConfig.parse(input), defaultOptions, diff --git a/backend/src/plugins/MessageSaver/info.ts b/backend/src/plugins/MessageSaver/info.ts new file mode 100644 index 00000000..e71c5430 --- /dev/null +++ b/backend/src/plugins/MessageSaver/info.ts @@ -0,0 +1,6 @@ +import { ZeppelinPluginInfo } from "../../types"; + +export const messageSaverPluginInfo: ZeppelinPluginInfo = { + prettyName: "Message saver", + showInDocs: false, +}; diff --git a/backend/src/plugins/ModActions/ModActionsPlugin.ts b/backend/src/plugins/ModActions/ModActionsPlugin.ts index 4c9c8958..b4321d2b 100644 --- a/backend/src/plugins/ModActions/ModActionsPlugin.ts +++ b/backend/src/plugins/ModActions/ModActionsPlugin.ts @@ -1,5 +1,6 @@ import { GuildMember, Message, Snowflake } from "discord.js"; import { EventEmitter } from "events"; +import { guildPlugin } from "knub"; import { Queue } from "../../Queue"; import { GuildCases } from "../../data/GuildCases"; import { onGuildEvent } from "../../data/GuildEvents"; @@ -7,12 +8,11 @@ import { GuildLogs } from "../../data/GuildLogs"; import { GuildMutes } from "../../data/GuildMutes"; import { GuildTempbans } from "../../data/GuildTempbans"; import { mapToPublicFn } from "../../pluginUtils"; -import { MINUTES, trimPluginDescription } from "../../utils"; +import { MINUTES } from "../../utils"; import { CasesPlugin } from "../Cases/CasesPlugin"; import { LogsPlugin } from "../Logs/LogsPlugin"; import { MutesPlugin } from "../Mutes/MutesPlugin"; import { TimeAndDatePlugin } from "../TimeAndDate/TimeAndDatePlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { AddCaseCmd } from "./commands/AddCaseCmd"; import { BanCmd } from "./commands/BanCmd"; import { CaseCmd } from "./commands/CaseCmd"; @@ -113,16 +113,8 @@ const defaultOptions = { ], }; -export const ModActionsPlugin = zeppelinGuildPlugin()({ +export const ModActionsPlugin = guildPlugin()({ name: "mod_actions", - showInDocs: true, - info: { - prettyName: "Mod actions", - description: trimPluginDescription(` - This plugin contains the 'typical' mod actions such as warning, muting, kicking, banning, etc. - `), - configSchema: zModActionsConfig, - }, dependencies: () => [TimeAndDatePlugin, CasesPlugin, MutesPlugin, LogsPlugin], configParser: (input) => zModActionsConfig.parse(input), diff --git a/backend/src/plugins/ModActions/info.ts b/backend/src/plugins/ModActions/info.ts new file mode 100644 index 00000000..96e20de6 --- /dev/null +++ b/backend/src/plugins/ModActions/info.ts @@ -0,0 +1,12 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { trimPluginDescription } from "../../utils"; +import { zModActionsConfig } from "./types"; + +export const modActionsPluginInfo: ZeppelinPluginInfo = { + prettyName: "Mod actions", + showInDocs: true, + description: trimPluginDescription(` + This plugin contains the 'typical' mod actions such as warning, muting, kicking, banning, etc. + `), + configSchema: zModActionsConfig, +}; diff --git a/backend/src/plugins/Mutes/MutesPlugin.ts b/backend/src/plugins/Mutes/MutesPlugin.ts index f0da8d75..e64b884f 100644 --- a/backend/src/plugins/Mutes/MutesPlugin.ts +++ b/backend/src/plugins/Mutes/MutesPlugin.ts @@ -1,5 +1,6 @@ import { GuildMember, Snowflake } from "discord.js"; import { EventEmitter } from "events"; +import { guildPlugin } from "knub"; import { GuildArchives } from "../../data/GuildArchives"; import { GuildCases } from "../../data/GuildCases"; import { onGuildEvent } from "../../data/GuildEvents"; @@ -9,7 +10,6 @@ import { mapToPublicFn } from "../../pluginUtils"; import { CasesPlugin } from "../Cases/CasesPlugin"; import { LogsPlugin } from "../Logs/LogsPlugin"; import { RoleManagerPlugin } from "../RoleManager/RoleManagerPlugin.js"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { ClearBannedMutesCmd } from "./commands/ClearBannedMutesCmd"; import { ClearMutesCmd } from "./commands/ClearMutesCmd"; import { ClearMutesWithoutRoleCmd } from "./commands/ClearMutesWithoutRoleCmd"; @@ -61,13 +61,8 @@ const defaultOptions = { ], }; -export const MutesPlugin = zeppelinGuildPlugin()({ +export const MutesPlugin = guildPlugin()({ name: "mutes", - showInDocs: true, - info: { - prettyName: "Mutes", - configSchema: zMutesConfig, - }, dependencies: () => [CasesPlugin, LogsPlugin, RoleManagerPlugin], configParser: (input) => zMutesConfig.parse(input), diff --git a/backend/src/plugins/Mutes/info.ts b/backend/src/plugins/Mutes/info.ts new file mode 100644 index 00000000..0918e233 --- /dev/null +++ b/backend/src/plugins/Mutes/info.ts @@ -0,0 +1,8 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { zMutesConfig } from "./types"; + +export const mutesPluginInfo: ZeppelinPluginInfo = { + prettyName: "Mutes", + showInDocs: true, + configSchema: zMutesConfig, +}; diff --git a/backend/src/plugins/NameHistory/NameHistoryPlugin.ts b/backend/src/plugins/NameHistory/NameHistoryPlugin.ts index 915ffa3c..ee226f3e 100644 --- a/backend/src/plugins/NameHistory/NameHistoryPlugin.ts +++ b/backend/src/plugins/NameHistory/NameHistoryPlugin.ts @@ -1,8 +1,7 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { Queue } from "../../Queue"; import { GuildNicknameHistory } from "../../data/GuildNicknameHistory"; import { UsernameHistory } from "../../data/UsernameHistory"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { NamesCmd } from "./commands/NamesCmd"; import { NameHistoryPluginType, zNameHistoryConfig } from "./types"; @@ -20,9 +19,8 @@ const defaultOptions: PluginOptions = { ], }; -export const NameHistoryPlugin = zeppelinGuildPlugin()({ +export const NameHistoryPlugin = guildPlugin()({ name: "name_history", - showInDocs: false, configParser: (input) => zNameHistoryConfig.parse(input), defaultOptions, diff --git a/backend/src/plugins/NameHistory/info.ts b/backend/src/plugins/NameHistory/info.ts new file mode 100644 index 00000000..b67742d5 --- /dev/null +++ b/backend/src/plugins/NameHistory/info.ts @@ -0,0 +1,8 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { zNameHistoryConfig } from "./types"; + +export const nameHistoryPluginInfo: ZeppelinPluginInfo = { + prettyName: "Name history", + showInDocs: false, + configSchema: zNameHistoryConfig, +}; diff --git a/backend/src/plugins/Persist/PersistPlugin.ts b/backend/src/plugins/Persist/PersistPlugin.ts index 7ef29da8..760ecc26 100644 --- a/backend/src/plugins/Persist/PersistPlugin.ts +++ b/backend/src/plugins/Persist/PersistPlugin.ts @@ -1,10 +1,8 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { GuildLogs } from "../../data/GuildLogs"; import { GuildPersistedData } from "../../data/GuildPersistedData"; -import { trimPluginDescription } from "../../utils"; import { LogsPlugin } from "../Logs/LogsPlugin"; import { RoleManagerPlugin } from "../RoleManager/RoleManagerPlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { LoadDataEvt } from "./events/LoadDataEvt"; import { StoreDataEvt } from "./events/StoreDataEvt"; import { PersistPluginType, zPersistConfig } from "./types"; @@ -17,17 +15,8 @@ const defaultOptions: PluginOptions = { }, }; -export const PersistPlugin = zeppelinGuildPlugin()({ +export const PersistPlugin = guildPlugin()({ name: "persist", - showInDocs: true, - info: { - prettyName: "Persist", - description: trimPluginDescription(` - Re-apply roles or nicknames for users when they rejoin the server. - Mute roles are re-applied automatically, this plugin is not required for that. - `), - configSchema: zPersistConfig, - }, dependencies: () => [LogsPlugin, RoleManagerPlugin], configParser: (input) => zPersistConfig.parse(input), diff --git a/backend/src/plugins/Persist/info.ts b/backend/src/plugins/Persist/info.ts new file mode 100644 index 00000000..0fc6f9b1 --- /dev/null +++ b/backend/src/plugins/Persist/info.ts @@ -0,0 +1,13 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { trimPluginDescription } from "../../utils"; +import { zPersistConfig } from "./types"; + +export const persistPluginInfo: ZeppelinPluginInfo = { + prettyName: "Persist", + description: trimPluginDescription(` + Re-apply roles or nicknames for users when they rejoin the server. + Mute roles are re-applied automatically, this plugin is not required for that. + `), + configSchema: zPersistConfig, + showInDocs: true, +}; diff --git a/backend/src/plugins/Phisherman/PhishermanPlugin.ts b/backend/src/plugins/Phisherman/PhishermanPlugin.ts index 8e895d84..89ac69f2 100644 --- a/backend/src/plugins/Phisherman/PhishermanPlugin.ts +++ b/backend/src/plugins/Phisherman/PhishermanPlugin.ts @@ -1,9 +1,7 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { hasPhishermanMasterAPIKey, phishermanApiKeyIsValid } from "../../data/Phisherman"; import { mapToPublicFn } from "../../pluginUtils"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { getDomainInfo } from "./functions/getDomainInfo"; -import { pluginInfo } from "./info"; import { PhishermanPluginType, zPhishermanConfig } from "./types"; const defaultOptions: PluginOptions = { @@ -13,10 +11,8 @@ const defaultOptions: PluginOptions = { overrides: [], }; -export const PhishermanPlugin = zeppelinGuildPlugin()({ +export const PhishermanPlugin = guildPlugin()({ name: "phisherman", - showInDocs: true, - info: pluginInfo, configParser: (input) => zPhishermanConfig.parse(input), defaultOptions, diff --git a/backend/src/plugins/Phisherman/info.ts b/backend/src/plugins/Phisherman/info.ts index 24530dce..04c4c4a0 100644 --- a/backend/src/plugins/Phisherman/info.ts +++ b/backend/src/plugins/Phisherman/info.ts @@ -1,8 +1,8 @@ +import { ZeppelinPluginInfo } from "../../types"; import { trimPluginDescription } from "../../utils"; -import { ZeppelinGuildPluginBlueprint } from "../ZeppelinPluginBlueprint"; import { zPhishermanConfig } from "./types"; -export const pluginInfo: ZeppelinGuildPluginBlueprint["info"] = { +export const phishermanPluginInfo: ZeppelinPluginInfo = { prettyName: "Phisherman", description: trimPluginDescription(` Match scam/phishing links using the Phisherman API. See https://phisherman.gg/ for more details! @@ -40,4 +40,5 @@ export const pluginInfo: ZeppelinGuildPluginBlueprint["info"] = { ~~~ `), configSchema: zPhishermanConfig, + showInDocs: true, }; diff --git a/backend/src/plugins/PingableRoles/PingableRolesPlugin.ts b/backend/src/plugins/PingableRoles/PingableRolesPlugin.ts index a33103bf..68dbcd2e 100644 --- a/backend/src/plugins/PingableRoles/PingableRolesPlugin.ts +++ b/backend/src/plugins/PingableRoles/PingableRolesPlugin.ts @@ -1,6 +1,5 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { GuildPingableRoles } from "../../data/GuildPingableRoles"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { PingableRoleDisableCmd } from "./commands/PingableRoleDisableCmd"; import { PingableRoleEnableCmd } from "./commands/PingableRoleEnableCmd"; import { PingableRolesPluginType, zPingableRolesConfig } from "./types"; @@ -19,13 +18,8 @@ const defaultOptions: PluginOptions = { ], }; -export const PingableRolesPlugin = zeppelinGuildPlugin()({ +export const PingableRolesPlugin = guildPlugin()({ name: "pingable_roles", - showInDocs: true, - info: { - prettyName: "Pingable roles", - configSchema: zPingableRolesConfig, - }, configParser: (input) => zPingableRolesConfig.parse(input), defaultOptions, diff --git a/backend/src/plugins/PingableRoles/info.ts b/backend/src/plugins/PingableRoles/info.ts new file mode 100644 index 00000000..1282eb4c --- /dev/null +++ b/backend/src/plugins/PingableRoles/info.ts @@ -0,0 +1,8 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { zPingableRolesConfig } from "./types"; + +export const pingableRolesPluginInfo: ZeppelinPluginInfo = { + prettyName: "Pingable roles", + configSchema: zPingableRolesConfig, + showInDocs: true, +}; diff --git a/backend/src/plugins/Post/PostPlugin.ts b/backend/src/plugins/Post/PostPlugin.ts index 304d6b65..0deb881b 100644 --- a/backend/src/plugins/Post/PostPlugin.ts +++ b/backend/src/plugins/Post/PostPlugin.ts @@ -1,11 +1,10 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { onGuildEvent } from "../../data/GuildEvents"; import { GuildLogs } from "../../data/GuildLogs"; import { GuildSavedMessages } from "../../data/GuildSavedMessages"; import { GuildScheduledPosts } from "../../data/GuildScheduledPosts"; import { LogsPlugin } from "../Logs/LogsPlugin"; import { TimeAndDatePlugin } from "../TimeAndDate/TimeAndDatePlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { EditCmd } from "./commands/EditCmd"; import { EditEmbedCmd } from "./commands/EditEmbedCmd"; import { PostCmd } from "./commands/PostCmd"; @@ -30,13 +29,8 @@ const defaultOptions: PluginOptions = { ], }; -export const PostPlugin = zeppelinGuildPlugin()({ +export const PostPlugin = guildPlugin()({ name: "post", - showInDocs: true, - info: { - prettyName: "Post", - configSchema: zPostConfig, - }, dependencies: () => [TimeAndDatePlugin, LogsPlugin], configParser: (input) => zPostConfig.parse(input), diff --git a/backend/src/plugins/Post/info.ts b/backend/src/plugins/Post/info.ts new file mode 100644 index 00000000..f55fd873 --- /dev/null +++ b/backend/src/plugins/Post/info.ts @@ -0,0 +1,8 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { zPostConfig } from "./types"; + +export const postPluginInfo: ZeppelinPluginInfo = { + prettyName: "Post", + configSchema: zPostConfig, + showInDocs: true, +}; diff --git a/backend/src/plugins/ReactionRoles/ReactionRolesPlugin.ts b/backend/src/plugins/ReactionRoles/ReactionRolesPlugin.ts index 06fff977..8622b3b9 100644 --- a/backend/src/plugins/ReactionRoles/ReactionRolesPlugin.ts +++ b/backend/src/plugins/ReactionRoles/ReactionRolesPlugin.ts @@ -1,9 +1,8 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { Queue } from "../../Queue"; import { GuildReactionRoles } from "../../data/GuildReactionRoles"; import { GuildSavedMessages } from "../../data/GuildSavedMessages"; import { LogsPlugin } from "../Logs/LogsPlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { ClearReactionRolesCmd } from "./commands/ClearReactionRolesCmd"; import { InitReactionRolesCmd } from "./commands/InitReactionRolesCmd"; import { RefreshReactionRolesCmd } from "./commands/RefreshReactionRolesCmd"; @@ -33,14 +32,8 @@ const defaultOptions: PluginOptions = { ], }; -export const ReactionRolesPlugin = zeppelinGuildPlugin()({ +export const ReactionRolesPlugin = guildPlugin()({ name: "reaction_roles", - showInDocs: true, - info: { - prettyName: "Reaction roles", - legacy: "Consider using the [Role buttons](/docs/plugins/role_buttons) plugin instead.", - configSchema: zReactionRolesConfig, - }, dependencies: () => [LogsPlugin], configParser: (input) => zReactionRolesConfig.parse(input), diff --git a/backend/src/plugins/ReactionRoles/info.ts b/backend/src/plugins/ReactionRoles/info.ts new file mode 100644 index 00000000..2ceebe5d --- /dev/null +++ b/backend/src/plugins/ReactionRoles/info.ts @@ -0,0 +1,10 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { zReactionRolesConfig } from "./types"; + +export const reactionRolesPluginInfo: ZeppelinPluginInfo = { + prettyName: "Reaction roles", + description: "Consider using the [Role buttons](https://zeppelin.gg/docs/plugins/role_buttons) plugin instead.", + legacy: true, + configSchema: zReactionRolesConfig, + showInDocs: true, +}; diff --git a/backend/src/plugins/Reminders/RemindersPlugin.ts b/backend/src/plugins/Reminders/RemindersPlugin.ts index 5e86ab49..d43961c3 100644 --- a/backend/src/plugins/Reminders/RemindersPlugin.ts +++ b/backend/src/plugins/Reminders/RemindersPlugin.ts @@ -1,8 +1,7 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { onGuildEvent } from "../../data/GuildEvents"; import { GuildReminders } from "../../data/GuildReminders"; import { TimeAndDatePlugin } from "../TimeAndDate/TimeAndDatePlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { RemindCmd } from "./commands/RemindCmd"; import { RemindersCmd } from "./commands/RemindersCmd"; import { RemindersDeleteCmd } from "./commands/RemindersDeleteCmd"; @@ -23,13 +22,8 @@ const defaultOptions: PluginOptions = { ], }; -export const RemindersPlugin = zeppelinGuildPlugin()({ +export const RemindersPlugin = guildPlugin()({ name: "reminders", - showInDocs: true, - info: { - prettyName: "Reminders", - configSchema: zRemindersConfig, - }, dependencies: () => [TimeAndDatePlugin], configParser: (input) => zRemindersConfig.parse(input), diff --git a/backend/src/plugins/Reminders/info.ts b/backend/src/plugins/Reminders/info.ts new file mode 100644 index 00000000..0110d36f --- /dev/null +++ b/backend/src/plugins/Reminders/info.ts @@ -0,0 +1,8 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { zRemindersConfig } from "./types"; + +export const remindersPluginInfo: ZeppelinPluginInfo = { + prettyName: "Reminders", + configSchema: zRemindersConfig, + showInDocs: true, +}; diff --git a/backend/src/plugins/RoleButtons/RoleButtonsPlugin.ts b/backend/src/plugins/RoleButtons/RoleButtonsPlugin.ts index 3f1e34ea..d7f9111a 100644 --- a/backend/src/plugins/RoleButtons/RoleButtonsPlugin.ts +++ b/backend/src/plugins/RoleButtons/RoleButtonsPlugin.ts @@ -1,17 +1,14 @@ +import { guildPlugin } from "knub"; import { GuildRoleButtons } from "../../data/GuildRoleButtons"; import { LogsPlugin } from "../Logs/LogsPlugin"; import { RoleManagerPlugin } from "../RoleManager/RoleManagerPlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { resetButtonsCmd } from "./commands/resetButtons"; import { onButtonInteraction } from "./events/buttonInteraction"; import { applyAllRoleButtons } from "./functions/applyAllRoleButtons"; -import { pluginInfo } from "./info"; import { RoleButtonsPluginType, zRoleButtonsConfig } from "./types"; -export const RoleButtonsPlugin = zeppelinGuildPlugin()({ +export const RoleButtonsPlugin = guildPlugin()({ name: "role_buttons", - info: pluginInfo, - showInDocs: true, defaultOptions: { config: { diff --git a/backend/src/plugins/RoleButtons/info.ts b/backend/src/plugins/RoleButtons/info.ts index 6076419c..f729d006 100644 --- a/backend/src/plugins/RoleButtons/info.ts +++ b/backend/src/plugins/RoleButtons/info.ts @@ -1,8 +1,9 @@ +import { ZeppelinPluginInfo } from "../../types"; import { trimPluginDescription } from "../../utils"; -import { ZeppelinGuildPluginBlueprint } from "../ZeppelinPluginBlueprint"; import { zRoleButtonsConfig } from "./types"; -export const pluginInfo: ZeppelinGuildPluginBlueprint["info"] = { +export const roleButtonsPluginInfo: ZeppelinPluginInfo = { + showInDocs: true, prettyName: "Role buttons", description: trimPluginDescription(` Allow users to pick roles by clicking on buttons diff --git a/backend/src/plugins/RoleManager/RoleManagerPlugin.ts b/backend/src/plugins/RoleManager/RoleManagerPlugin.ts index 34427d98..ffecf97c 100644 --- a/backend/src/plugins/RoleManager/RoleManagerPlugin.ts +++ b/backend/src/plugins/RoleManager/RoleManagerPlugin.ts @@ -1,7 +1,7 @@ +import { guildPlugin } from "knub"; import { GuildRoleQueue } from "../../data/GuildRoleQueue"; import { mapToPublicFn } from "../../pluginUtils"; import { LogsPlugin } from "../Logs/LogsPlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { addPriorityRole } from "./functions/addPriorityRole"; import { addRole } from "./functions/addRole"; import { removePriorityRole } from "./functions/removePriorityRole"; @@ -9,9 +9,8 @@ import { removeRole } from "./functions/removeRole"; import { runRoleAssignmentLoop } from "./functions/runRoleAssignmentLoop"; import { RoleManagerPluginType, zRoleManagerConfig } from "./types"; -export const RoleManagerPlugin = zeppelinGuildPlugin()({ +export const RoleManagerPlugin = guildPlugin()({ name: "role_manager", - showInDocs: false, dependencies: () => [LogsPlugin], configParser: (input) => zRoleManagerConfig.parse(input), diff --git a/backend/src/plugins/RoleManager/info.ts b/backend/src/plugins/RoleManager/info.ts new file mode 100644 index 00000000..985a6111 --- /dev/null +++ b/backend/src/plugins/RoleManager/info.ts @@ -0,0 +1,6 @@ +import { ZeppelinPluginInfo } from "../../types"; + +export const roleManagerPluginInfo: ZeppelinPluginInfo = { + prettyName: "Role manager", + showInDocs: false, +}; diff --git a/backend/src/plugins/Roles/RolesPlugin.ts b/backend/src/plugins/Roles/RolesPlugin.ts index 0e181cfa..89b3b6c9 100644 --- a/backend/src/plugins/Roles/RolesPlugin.ts +++ b/backend/src/plugins/Roles/RolesPlugin.ts @@ -1,9 +1,7 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { GuildLogs } from "../../data/GuildLogs"; -import { trimPluginDescription } from "../../utils"; import { LogsPlugin } from "../Logs/LogsPlugin"; import { RoleManagerPlugin } from "../RoleManager/RoleManagerPlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { AddRoleCmd } from "./commands/AddRoleCmd"; import { MassAddRoleCmd } from "./commands/MassAddRoleCmd"; import { MassRemoveRoleCmd } from "./commands/MassRemoveRoleCmd"; @@ -32,16 +30,8 @@ const defaultOptions: PluginOptions = { ], }; -export const RolesPlugin = zeppelinGuildPlugin()({ +export const RolesPlugin = guildPlugin()({ name: "roles", - showInDocs: true, - info: { - prettyName: "Roles", - description: trimPluginDescription(` - Enables authorised users to add and remove whitelisted roles with a command. - `), - configSchema: zRolesConfig, - }, dependencies: () => [LogsPlugin, RoleManagerPlugin], configParser: (input) => zRolesConfig.parse(input), diff --git a/backend/src/plugins/Roles/info.ts b/backend/src/plugins/Roles/info.ts new file mode 100644 index 00000000..cb876584 --- /dev/null +++ b/backend/src/plugins/Roles/info.ts @@ -0,0 +1,12 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { trimPluginDescription } from "../../utils"; +import { zRolesConfig } from "./types"; + +export const rolesPluginInfo: ZeppelinPluginInfo = { + showInDocs: true, + prettyName: "Roles", + description: trimPluginDescription(` + Enables authorised users to add and remove whitelisted roles with a command. + `), + configSchema: zRolesConfig, +}; diff --git a/backend/src/plugins/SelfGrantableRoles/SelfGrantableRolesPlugin.ts b/backend/src/plugins/SelfGrantableRoles/SelfGrantableRolesPlugin.ts index 6f0d666b..9a9e770c 100644 --- a/backend/src/plugins/SelfGrantableRoles/SelfGrantableRolesPlugin.ts +++ b/backend/src/plugins/SelfGrantableRoles/SelfGrantableRolesPlugin.ts @@ -1,6 +1,4 @@ -import { CooldownManager, PluginOptions } from "knub"; -import { trimPluginDescription } from "../../utils"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; +import { CooldownManager, PluginOptions, guildPlugin } from "knub"; import { RoleAddCmd } from "./commands/RoleAddCmd"; import { RoleHelpCmd } from "./commands/RoleHelpCmd"; import { RoleRemoveCmd } from "./commands/RoleRemoveCmd"; @@ -13,60 +11,8 @@ const defaultOptions: PluginOptions = { }, }; -export const SelfGrantableRolesPlugin = zeppelinGuildPlugin()({ +export const SelfGrantableRolesPlugin = guildPlugin()({ name: "self_grantable_roles", - showInDocs: true, - - info: { - prettyName: "Self-grantable roles", - description: trimPluginDescription(` - Allows users to grant themselves roles via a command - `), - configurationGuide: trimPluginDescription(` - ### Basic configuration - In this example, users can add themselves platform roles on the channel 473087035574321152 by using the - \`!role\` command. For example, \`!role pc ps4\` to add both the "pc" and "ps4" roles as specified below. - - ~~~yml - self_grantable_roles: - config: - entries: - basic: - roles: - "543184300250759188": ["pc", "computer"] - "534710505915547658": ["ps4", "ps", "playstation"] - "473085927053590538": ["xbox", "xb1", "xb"] - overrides: - - channel: "473087035574321152" - config: - entries: - basic: - can_use: true - ~~~ - - ### Maximum number of roles - This is identical to the basic example above, but users can only choose 1 role. - - ~~~yml - self_grantable_roles: - config: - entries: - basic: - roles: - "543184300250759188": ["pc", "computer"] - "534710505915547658": ["ps4", "ps", "playstation"] - "473085927053590538": ["xbox", "xb1", "xb"] - max_roles: 1 - overrides: - - channel: "473087035574321152" - config: - entries: - basic: - can_use: true - ~~~ - `), - configSchema: zSelfGrantableRolesConfig, - }, configParser: (input) => zSelfGrantableRolesConfig.parse(input), defaultOptions, diff --git a/backend/src/plugins/SelfGrantableRoles/info.ts b/backend/src/plugins/SelfGrantableRoles/info.ts new file mode 100644 index 00000000..e6b9db28 --- /dev/null +++ b/backend/src/plugins/SelfGrantableRoles/info.ts @@ -0,0 +1,55 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { trimPluginDescription } from "../../utils"; +import { zSelfGrantableRolesConfig } from "./types"; + +export const selfGrantableRolesPluginInfo: ZeppelinPluginInfo = { + showInDocs: true, + prettyName: "Self-grantable roles", + description: trimPluginDescription(` + Allows users to grant themselves roles via a command + `), + configurationGuide: trimPluginDescription(` + ### Basic configuration + In this example, users can add themselves platform roles on the channel 473087035574321152 by using the + \`!role\` command. For example, \`!role pc ps4\` to add both the "pc" and "ps4" roles as specified below. + + ~~~yml + self_grantable_roles: + config: + entries: + basic: + roles: + "543184300250759188": ["pc", "computer"] + "534710505915547658": ["ps4", "ps", "playstation"] + "473085927053590538": ["xbox", "xb1", "xb"] + overrides: + - channel: "473087035574321152" + config: + entries: + basic: + can_use: true + ~~~ + + ### Maximum number of roles + This is identical to the basic example above, but users can only choose 1 role. + + ~~~yml + self_grantable_roles: + config: + entries: + basic: + roles: + "543184300250759188": ["pc", "computer"] + "534710505915547658": ["ps4", "ps", "playstation"] + "473085927053590538": ["xbox", "xb1", "xb"] + max_roles: 1 + overrides: + - channel: "473087035574321152" + config: + entries: + basic: + can_use: true + ~~~ + `), + configSchema: zSelfGrantableRolesConfig, +}; diff --git a/backend/src/plugins/Slowmode/SlowmodePlugin.ts b/backend/src/plugins/Slowmode/SlowmodePlugin.ts index 174f38a9..8e97adb1 100644 --- a/backend/src/plugins/Slowmode/SlowmodePlugin.ts +++ b/backend/src/plugins/Slowmode/SlowmodePlugin.ts @@ -1,10 +1,9 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { GuildLogs } from "../../data/GuildLogs"; import { GuildSavedMessages } from "../../data/GuildSavedMessages"; import { GuildSlowmodes } from "../../data/GuildSlowmodes"; import { SECONDS } from "../../utils"; import { LogsPlugin } from "../Logs/LogsPlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { SlowmodeClearCmd } from "./commands/SlowmodeClearCmd"; import { SlowmodeDisableCmd } from "./commands/SlowmodeDisableCmd"; import { SlowmodeGetCmd } from "./commands/SlowmodeGetCmd"; @@ -35,13 +34,8 @@ const defaultOptions: PluginOptions = { ], }; -export const SlowmodePlugin = zeppelinGuildPlugin()({ +export const SlowmodePlugin = guildPlugin()({ name: "slowmode", - showInDocs: true, - info: { - prettyName: "Slowmode", - configSchema: zSlowmodeConfig, - }, // prettier-ignore dependencies: () => [ diff --git a/backend/src/plugins/Slowmode/info.ts b/backend/src/plugins/Slowmode/info.ts new file mode 100644 index 00000000..4dc4de79 --- /dev/null +++ b/backend/src/plugins/Slowmode/info.ts @@ -0,0 +1,8 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { zSlowmodeConfig } from "./types"; + +export const slowmodePluginInfo: ZeppelinPluginInfo = { + showInDocs: true, + prettyName: "Slowmode", + configSchema: zSlowmodeConfig, +}; diff --git a/backend/src/plugins/Spam/SpamPlugin.ts b/backend/src/plugins/Spam/SpamPlugin.ts index 54ec540c..b4d27ae3 100644 --- a/backend/src/plugins/Spam/SpamPlugin.ts +++ b/backend/src/plugins/Spam/SpamPlugin.ts @@ -1,11 +1,9 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { GuildArchives } from "../../data/GuildArchives"; import { GuildLogs } from "../../data/GuildLogs"; import { GuildMutes } from "../../data/GuildMutes"; import { GuildSavedMessages } from "../../data/GuildSavedMessages"; -import { trimPluginDescription } from "../../utils"; import { LogsPlugin } from "../Logs/LogsPlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { SpamVoiceStateUpdateEvt } from "./events/SpamVoiceEvt"; import { SpamPluginType, zSpamConfig } from "./types"; import { clearOldRecentActions } from "./util/clearOldRecentActions"; @@ -42,18 +40,8 @@ const defaultOptions: PluginOptions = { ], }; -export const SpamPlugin = zeppelinGuildPlugin()({ +export const SpamPlugin = guildPlugin()({ name: "spam", - showInDocs: true, - info: { - prettyName: "Spam protection", - description: trimPluginDescription(` - Basic spam detection and auto-muting. - For more advanced spam filtering, check out the Automod plugin! - `), - legacy: true, - configSchema: zSpamConfig, - }, dependencies: () => [LogsPlugin], configParser: (input) => zSpamConfig.parse(input), diff --git a/backend/src/plugins/Spam/info.ts b/backend/src/plugins/Spam/info.ts new file mode 100644 index 00000000..757fc294 --- /dev/null +++ b/backend/src/plugins/Spam/info.ts @@ -0,0 +1,14 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { trimPluginDescription } from "../../utils"; +import { zSpamConfig } from "./types"; + +export const spamPluginInfo: ZeppelinPluginInfo = { + showInDocs: true, + prettyName: "Spam protection", + description: trimPluginDescription(` + Basic spam detection and auto-muting. + For more advanced spam filtering, check out the Automod plugin! + `), + legacy: true, + configSchema: zSpamConfig, +}; diff --git a/backend/src/plugins/Starboard/StarboardPlugin.ts b/backend/src/plugins/Starboard/StarboardPlugin.ts index 4ca3c441..7e12102c 100644 --- a/backend/src/plugins/Starboard/StarboardPlugin.ts +++ b/backend/src/plugins/Starboard/StarboardPlugin.ts @@ -1,9 +1,7 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { GuildSavedMessages } from "../../data/GuildSavedMessages"; import { GuildStarboardMessages } from "../../data/GuildStarboardMessages"; import { GuildStarboardReactions } from "../../data/GuildStarboardReactions"; -import { trimPluginDescription } from "../../utils"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { MigratePinsCmd } from "./commands/MigratePinsCmd"; import { StarboardReactionAddEvt } from "./events/StarboardReactionAddEvt"; import { StarboardReactionRemoveAllEvt, StarboardReactionRemoveEvt } from "./events/StarboardReactionRemoveEvts"; @@ -26,101 +24,8 @@ const defaultOptions: PluginOptions = { ], }; -export const StarboardPlugin = zeppelinGuildPlugin()({ +export const StarboardPlugin = guildPlugin()({ name: "starboard", - showInDocs: true, - - info: { - prettyName: "Starboard", - description: trimPluginDescription(` - This plugin allows you to set up starboards on your server. Starboards are like user voted pins where messages with enough reactions get immortalized on a "starboard" channel. - `), - configurationGuide: trimPluginDescription(` - ### Note on emojis - To specify emoji in the config, you need to use the emoji's "raw form". - To obtain this, post the emoji with a backslash in front of it. - - - Example with a default emoji: ":star:" => "⭐" - - Example with a custom emoji: ":mrvnSmile:" => "<:mrvnSmile:543000534102310933>" - - ### Basic starboard - Any message on the server that gets 5 star reactions will be posted into the starboard channel (604342689038729226). - - ~~~yml - starboard: - config: - boards: - basic: - channel_id: "604342689038729226" - stars_required: 5 - ~~~ - - ### Basic starboard with custom color - Any message on the server that gets 5 star reactions will be posted into the starboard channel (604342689038729226), with the given color (0x87CEEB). - - ~~~yml - starboard: - config: - boards: - basic: - channel_id: "604342689038729226" - stars_required: 5 - color: 0x87CEEB - ~~~ - - ### Custom star emoji - This is identical to the basic starboard above, but accepts two emoji: the regular star and a custom :mrvnSmile: emoji - - ~~~yml - starboard: - config: - boards: - basic: - channel_id: "604342689038729226" - star_emoji: ["⭐", "<:mrvnSmile:543000534102310933>"] - stars_required: 5 - ~~~ - - ### Limit starboard to a specific channel - This is identical to the basic starboard above, but only works from a specific channel (473087035574321152). - - ~~~yml - starboard: - config: - boards: - basic: - enabled: false # The starboard starts disabled and is then enabled in a channel override below - channel_id: "604342689038729226" - stars_required: 5 - overrides: - - channel: "473087035574321152" - config: - boards: - basic: - enabled: true - ~~~ - - ### Limit starboard to a specific level (and above) - This is identical to the basic starboard above, but only works for a specific level (>=50). - - ~~~yml - starboard: - config: - boards: - levelonly: - enabled: false # The starboard starts disabled and is then enabled in a level override below - channel_id: "604342689038729226" - stars_required: 1 - overrides: - - level: ">=50" - config: - boards: - levelonly: - enabled: true - ~~~ - `), - configSchema: zStarboardConfig, - }, configParser: (input) => zStarboardConfig.parse(input), defaultOptions, diff --git a/backend/src/plugins/Starboard/info.ts b/backend/src/plugins/Starboard/info.ts new file mode 100644 index 00000000..fffe701f --- /dev/null +++ b/backend/src/plugins/Starboard/info.ts @@ -0,0 +1,96 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { trimPluginDescription } from "../../utils"; +import { zStarboardConfig } from "./types"; + +export const starboardPluginInfo: ZeppelinPluginInfo = { + showInDocs: true, + prettyName: "Starboard", + description: trimPluginDescription(` + This plugin allows you to set up starboards on your server. Starboards are like user voted pins where messages with enough reactions get immortalized on a "starboard" channel. + `), + configurationGuide: trimPluginDescription(` + ### Note on emojis + To specify emoji in the config, you need to use the emoji's "raw form". + To obtain this, post the emoji with a backslash in front of it. + + - Example with a default emoji: ":star:" => "⭐" + - Example with a custom emoji: ":mrvnSmile:" => "<:mrvnSmile:543000534102310933>" + + ### Basic starboard + Any message on the server that gets 5 star reactions will be posted into the starboard channel (604342689038729226). + + ~~~yml + starboard: + config: + boards: + basic: + channel_id: "604342689038729226" + stars_required: 5 + ~~~ + + ### Basic starboard with custom color + Any message on the server that gets 5 star reactions will be posted into the starboard channel (604342689038729226), with the given color (0x87CEEB). + + ~~~yml + starboard: + config: + boards: + basic: + channel_id: "604342689038729226" + stars_required: 5 + color: 0x87CEEB + ~~~ + + ### Custom star emoji + This is identical to the basic starboard above, but accepts two emoji: the regular star and a custom :mrvnSmile: emoji + + ~~~yml + starboard: + config: + boards: + basic: + channel_id: "604342689038729226" + star_emoji: ["⭐", "<:mrvnSmile:543000534102310933>"] + stars_required: 5 + ~~~ + + ### Limit starboard to a specific channel + This is identical to the basic starboard above, but only works from a specific channel (473087035574321152). + + ~~~yml + starboard: + config: + boards: + basic: + enabled: false # The starboard starts disabled and is then enabled in a channel override below + channel_id: "604342689038729226" + stars_required: 5 + overrides: + - channel: "473087035574321152" + config: + boards: + basic: + enabled: true + ~~~ + + ### Limit starboard to a specific level (and above) + This is identical to the basic starboard above, but only works for a specific level (>=50). + + ~~~yml + starboard: + config: + boards: + levelonly: + enabled: false # The starboard starts disabled and is then enabled in a level override below + channel_id: "604342689038729226" + stars_required: 1 + overrides: + - level: ">=50" + config: + boards: + levelonly: + enabled: true + ~~~ + `), + configSchema: zStarboardConfig, +}; diff --git a/backend/src/plugins/Tags/TagsPlugin.ts b/backend/src/plugins/Tags/TagsPlugin.ts index c68f90bf..8f603e5b 100644 --- a/backend/src/plugins/Tags/TagsPlugin.ts +++ b/backend/src/plugins/Tags/TagsPlugin.ts @@ -1,23 +1,20 @@ import { Snowflake } from "discord.js"; import humanizeDuration from "humanize-duration"; -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import moment from "moment-timezone"; import { GuildArchives } from "../../data/GuildArchives"; import { GuildLogs } from "../../data/GuildLogs"; import { GuildSavedMessages } from "../../data/GuildSavedMessages"; import { GuildTags } from "../../data/GuildTags"; import { mapToPublicFn } from "../../pluginUtils"; -import { convertDelayStringToMS, trimPluginDescription } from "../../utils"; +import { convertDelayStringToMS } from "../../utils"; import { LogsPlugin } from "../Logs/LogsPlugin"; import { TimeAndDatePlugin } from "../TimeAndDate/TimeAndDatePlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { TagCreateCmd } from "./commands/TagCreateCmd"; import { TagDeleteCmd } from "./commands/TagDeleteCmd"; import { TagEvalCmd } from "./commands/TagEvalCmd"; import { TagListCmd } from "./commands/TagListCmd"; import { TagSourceCmd } from "./commands/TagSourceCmd"; -import { generateTemplateMarkdown } from "./docs"; -import { TemplateFunctions } from "./templateFunctions"; import { TagsPluginType, zTagsConfig } from "./types"; import { findTagByName } from "./util/findTagByName"; import { onMessageCreate } from "./util/onMessageCreate"; @@ -54,24 +51,8 @@ const defaultOptions: PluginOptions = { ], }; -export const TagsPlugin = zeppelinGuildPlugin()({ +export const TagsPlugin = guildPlugin()({ name: "tags", - showInDocs: true, - info: { - prettyName: "Tags", - description: "Tags are a way to store and reuse information.", - configurationGuide: trimPluginDescription(` - ### Template Functions - You can use template functions in your tags. These functions are called when the tag is rendered. - You can use these functions to render dynamic content, or to access information from the message and/or user calling the tag. - You use them by adding a \`{}\` on your tag. - - Here are the functions you can use in your tags: - - ${generateTemplateMarkdown(TemplateFunctions)} - `), - configSchema: zTagsConfig, - }, dependencies: () => [LogsPlugin], defaultOptions, diff --git a/backend/src/plugins/Tags/docs.ts b/backend/src/plugins/Tags/docs.ts deleted file mode 100644 index 61f4dfcb..00000000 --- a/backend/src/plugins/Tags/docs.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { trimPluginDescription } from "../../utils"; -import { TemplateFunction } from "./types"; - -export function generateTemplateMarkdown(definitions: TemplateFunction[]): string { - return definitions - .map((def) => { - const usage = def.signature ?? `(${def.arguments.join(", ")})`; - const examples = def.examples?.map((ex) => `> \`{${ex}}\``).join("\n") ?? null; - return trimPluginDescription(` - ## ${def.name} - **${def.description}**\n - __Usage__: \`{${def.name}${usage}}\`\n - ${examples ? `__Examples__:\n${examples}` : ""}\n\n - `); - }) - .join("\n\n"); -} diff --git a/backend/src/plugins/Tags/info.ts b/backend/src/plugins/Tags/info.ts new file mode 100644 index 00000000..5f9c5fba --- /dev/null +++ b/backend/src/plugins/Tags/info.ts @@ -0,0 +1,36 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { trimPluginDescription } from "../../utils"; +import { TemplateFunctions } from "./templateFunctions"; +import { TemplateFunction, zTagsConfig } from "./types"; + +export const tagsPluginInfo: ZeppelinPluginInfo = { + showInDocs: true, + prettyName: "Tags", + description: "Tags are a way to store and reuse information.", + configurationGuide: trimPluginDescription(` + ### Template Functions + You can use template functions in your tags. These functions are called when the tag is rendered. + You can use these functions to render dynamic content, or to access information from the message and/or user calling the tag. + You use them by adding a \`{}\` on your tag. + + Here are the functions you can use in your tags: + + ${generateTemplateMarkdown(TemplateFunctions)} + `), + configSchema: zTagsConfig, +}; + +function generateTemplateMarkdown(definitions: TemplateFunction[]): string { + return definitions + .map((def) => { + const usage = def.signature ?? `(${def.arguments.join(", ")})`; + const examples = def.examples?.map((ex) => `> \`{${ex}}\``).join("\n") ?? null; + return trimPluginDescription(` + ## ${def.name} + **${def.description}**\n + __Usage__: \`{${def.name}${usage}}\`\n + ${examples ? `__Examples__:\n${examples}` : ""}\n\n + `); + }) + .join("\n\n"); +} diff --git a/backend/src/plugins/TimeAndDate/TimeAndDatePlugin.ts b/backend/src/plugins/TimeAndDate/TimeAndDatePlugin.ts index 885604a2..c7924d53 100644 --- a/backend/src/plugins/TimeAndDate/TimeAndDatePlugin.ts +++ b/backend/src/plugins/TimeAndDate/TimeAndDatePlugin.ts @@ -1,8 +1,6 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { GuildMemberTimezones } from "../../data/GuildMemberTimezones"; import { mapToPublicFn } from "../../pluginUtils"; -import { trimPluginDescription } from "../../utils"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { ResetTimezoneCmd } from "./commands/ResetTimezoneCmd"; import { SetTimezoneCmd } from "./commands/SetTimezoneCmd"; import { ViewTimezoneCmd } from "./commands/ViewTimezoneCmd"; @@ -31,16 +29,8 @@ const defaultOptions: PluginOptions = { ], }; -export const TimeAndDatePlugin = zeppelinGuildPlugin()({ +export const TimeAndDatePlugin = guildPlugin()({ name: "time_and_date", - showInDocs: true, - info: { - prettyName: "Time and date", - description: trimPluginDescription(` - Allows controlling the displayed time/date formats and timezones - `), - configSchema: zTimeAndDateConfig, - }, configParser: (input) => zTimeAndDateConfig.parse(input), defaultOptions, diff --git a/backend/src/plugins/TimeAndDate/info.ts b/backend/src/plugins/TimeAndDate/info.ts new file mode 100644 index 00000000..22441d32 --- /dev/null +++ b/backend/src/plugins/TimeAndDate/info.ts @@ -0,0 +1,12 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { trimPluginDescription } from "../../utils"; +import { zTimeAndDateConfig } from "./types"; + +export const timeAndDatePluginInfo: ZeppelinPluginInfo = { + showInDocs: true, + prettyName: "Time and date", + description: trimPluginDescription(` + Allows controlling the displayed time/date formats and timezones + `), + configSchema: zTimeAndDateConfig, +}; diff --git a/backend/src/plugins/UsernameSaver/UsernameSaverPlugin.ts b/backend/src/plugins/UsernameSaver/UsernameSaverPlugin.ts index e64d3c98..b731bd27 100644 --- a/backend/src/plugins/UsernameSaver/UsernameSaverPlugin.ts +++ b/backend/src/plugins/UsernameSaver/UsernameSaverPlugin.ts @@ -1,12 +1,11 @@ +import { guildPlugin } from "knub"; import { Queue } from "../../Queue"; import { UsernameHistory } from "../../data/UsernameHistory"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { MessageCreateUpdateUsernameEvt, VoiceChannelJoinUpdateUsernameEvt } from "./events/UpdateUsernameEvts"; import { UsernameSaverPluginType, zUsernameSaverConfig } from "./types"; -export const UsernameSaverPlugin = zeppelinGuildPlugin()({ +export const UsernameSaverPlugin = guildPlugin()({ name: "username_saver", - showInDocs: false, configParser: (input) => zUsernameSaverConfig.parse(input), diff --git a/backend/src/plugins/UsernameSaver/info.ts b/backend/src/plugins/UsernameSaver/info.ts new file mode 100644 index 00000000..4a9b5bba --- /dev/null +++ b/backend/src/plugins/UsernameSaver/info.ts @@ -0,0 +1,6 @@ +import { ZeppelinPluginInfo } from "../../types"; + +export const usernameSaverPluginInfo: ZeppelinPluginInfo = { + showInDocs: false, + prettyName: "Username saver", +}; diff --git a/backend/src/plugins/Utility/UtilityPlugin.ts b/backend/src/plugins/Utility/UtilityPlugin.ts index 5f44118e..92debe49 100644 --- a/backend/src/plugins/Utility/UtilityPlugin.ts +++ b/backend/src/plugins/Utility/UtilityPlugin.ts @@ -1,5 +1,5 @@ import { GuildMember, Snowflake } from "discord.js"; -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { GuildArchives } from "../../data/GuildArchives"; import { GuildCases } from "../../data/GuildCases"; import { GuildLogs } from "../../data/GuildLogs"; @@ -10,7 +10,6 @@ import { discardRegExpRunner, getRegExpRunner } from "../../regExpRunners"; import { LogsPlugin } from "../Logs/LogsPlugin"; import { ModActionsPlugin } from "../ModActions/ModActionsPlugin"; import { TimeAndDatePlugin } from "../TimeAndDate/TimeAndDatePlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { AboutCmd } from "./commands/AboutCmd"; import { AvatarCmd } from "./commands/AvatarCmd"; import { BanSearchCmd } from "./commands/BanSearchCmd"; @@ -112,13 +111,8 @@ const defaultOptions: PluginOptions = { ], }; -export const UtilityPlugin = zeppelinGuildPlugin()({ +export const UtilityPlugin = guildPlugin()({ name: "utility", - showInDocs: true, - info: { - prettyName: "Utility", - configSchema: zUtilityConfig, - }, dependencies: () => [TimeAndDatePlugin, ModActionsPlugin, LogsPlugin], configParser: (input) => zUtilityConfig.parse(input), diff --git a/backend/src/plugins/Utility/info.ts b/backend/src/plugins/Utility/info.ts new file mode 100644 index 00000000..1cedf4b1 --- /dev/null +++ b/backend/src/plugins/Utility/info.ts @@ -0,0 +1,8 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { zUtilityConfig } from "./types"; + +export const utilityPluginInfo: ZeppelinPluginInfo = { + showInDocs: true, + prettyName: "Utility", + configSchema: zUtilityConfig, +}; diff --git a/backend/src/plugins/WelcomeMessage/WelcomeMessagePlugin.ts b/backend/src/plugins/WelcomeMessage/WelcomeMessagePlugin.ts index ba8f9de3..a8fb9261 100644 --- a/backend/src/plugins/WelcomeMessage/WelcomeMessagePlugin.ts +++ b/backend/src/plugins/WelcomeMessage/WelcomeMessagePlugin.ts @@ -1,7 +1,6 @@ -import { PluginOptions } from "knub"; +import { PluginOptions, guildPlugin } from "knub"; import { GuildLogs } from "../../data/GuildLogs"; import { LogsPlugin } from "../Logs/LogsPlugin"; -import { zeppelinGuildPlugin } from "../ZeppelinPluginBlueprint"; import { SendWelcomeMessageEvt } from "./events/SendWelcomeMessageEvt"; import { WelcomeMessagePluginType, zWelcomeMessageConfig } from "./types"; @@ -13,13 +12,8 @@ const defaultOptions: PluginOptions = { }, }; -export const WelcomeMessagePlugin = zeppelinGuildPlugin()({ +export const WelcomeMessagePlugin = guildPlugin()({ name: "welcome_message", - showInDocs: true, - info: { - prettyName: "Welcome message", - configSchema: zWelcomeMessageConfig, - }, dependencies: () => [LogsPlugin], configParser: (input) => zWelcomeMessageConfig.parse(input), diff --git a/backend/src/plugins/WelcomeMessage/info.ts b/backend/src/plugins/WelcomeMessage/info.ts new file mode 100644 index 00000000..b1e394b8 --- /dev/null +++ b/backend/src/plugins/WelcomeMessage/info.ts @@ -0,0 +1,8 @@ +import { ZeppelinPluginInfo } from "../../types"; +import { zWelcomeMessageConfig } from "./types"; + +export const welcomeMessagePluginInfo: ZeppelinPluginInfo = { + showInDocs: true, + prettyName: "Welcome message", + configSchema: zWelcomeMessageConfig, +}; diff --git a/backend/src/plugins/ZeppelinPlugin.ts b/backend/src/plugins/ZeppelinPlugin.ts deleted file mode 100644 index 3937f53a..00000000 --- a/backend/src/plugins/ZeppelinPlugin.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { ZeppelinGlobalPluginBlueprint, ZeppelinGuildPluginBlueprint } from "./ZeppelinPluginBlueprint"; - -export type ZeppelinPlugin = ZeppelinGuildPluginBlueprint | ZeppelinGlobalPluginBlueprint; diff --git a/backend/src/plugins/ZeppelinPluginBlueprint.ts b/backend/src/plugins/ZeppelinPluginBlueprint.ts deleted file mode 100644 index 338182df..00000000 --- a/backend/src/plugins/ZeppelinPluginBlueprint.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { - BasePluginType, - globalPlugin, - GlobalPluginBlueprint, - GlobalPluginData, - guildPlugin, - GuildPluginBlueprint, - GuildPluginData, -} from "knub"; -import { ZodTypeAny } from "zod"; -import { TMarkdown } from "../types"; - -/** - * GUILD PLUGINS - */ - -export interface ZeppelinGuildPluginBlueprint = GuildPluginData> - extends GuildPluginBlueprint { - showInDocs?: boolean; - info?: { - prettyName: string; - description?: TMarkdown; - usageGuide?: TMarkdown; - configurationGuide?: TMarkdown; - legacy?: boolean | string; - configSchema?: ZodTypeAny; - }; -} - -export function zeppelinGuildPlugin(blueprint: TBlueprint): TBlueprint; - -export function zeppelinGuildPlugin(): < - TBlueprint extends ZeppelinGuildPluginBlueprint>, ->( - blueprint: TBlueprint, -) => TBlueprint; - -export function zeppelinGuildPlugin(...args) { - if (args.length) { - const blueprint = guildPlugin( - ...(args as Parameters), - ) as unknown as ZeppelinGuildPluginBlueprint; - return blueprint; - } else { - return zeppelinGuildPlugin as (name, blueprint) => ZeppelinGuildPluginBlueprint; - } -} - -/** - * GLOBAL PLUGINS - */ - -export interface ZeppelinGlobalPluginBlueprint - extends GlobalPluginBlueprint> {} - -export function zeppelinGlobalPlugin( - blueprint: TBlueprint, -): TBlueprint; - -export function zeppelinGlobalPlugin(): < - TBlueprint extends ZeppelinGlobalPluginBlueprint, ->( - blueprint: TBlueprint, -) => TBlueprint; - -export function zeppelinGlobalPlugin(...args) { - if (args.length) { - const blueprint = globalPlugin( - ...(args as Parameters), - ) as unknown as ZeppelinGlobalPluginBlueprint; - return blueprint; - } else { - return zeppelinGlobalPlugin as (name, blueprint) => ZeppelinGlobalPluginBlueprint; - } -} diff --git a/backend/src/plugins/availablePlugins.ts b/backend/src/plugins/availablePlugins.ts index 3df9c347..3e7dd2cd 100644 --- a/backend/src/plugins/availablePlugins.ts +++ b/backend/src/plugins/availablePlugins.ts @@ -1,3 +1,4 @@ +import { GlobalPluginBlueprint, GuildPluginBlueprint } from "knub"; import { AutoDeletePlugin } from "./AutoDelete/AutoDeletePlugin"; import { AutoReactionsPlugin } from "./AutoReactions/AutoReactionsPlugin"; import { AutomodPlugin } from "./Automod/AutomodPlugin"; @@ -37,10 +38,9 @@ import { TimeAndDatePlugin } from "./TimeAndDate/TimeAndDatePlugin"; import { UsernameSaverPlugin } from "./UsernameSaver/UsernameSaverPlugin"; import { UtilityPlugin } from "./Utility/UtilityPlugin"; import { WelcomeMessagePlugin } from "./WelcomeMessage/WelcomeMessagePlugin"; -import { ZeppelinGlobalPluginBlueprint, ZeppelinGuildPluginBlueprint } from "./ZeppelinPluginBlueprint"; // prettier-ignore -export const guildPlugins: Array> = [ +export const guildPlugins: Array> = [ AutoDeletePlugin, AutoReactionsPlugin, GuildInfoSaverPlugin, @@ -81,14 +81,14 @@ export const guildPlugins: Array> = [ ]; // prettier-ignore -export const globalPlugins: Array> = [ +export const globalPlugins: Array> = [ GuildConfigReloaderPlugin, BotControlPlugin, GuildAccessMonitorPlugin, ]; // prettier-ignore -export const baseGuildPlugins: Array> = [ +export const baseGuildPlugins: Array> = [ GuildInfoSaverPlugin, MessageSaverPlugin, NameHistoryPlugin, diff --git a/backend/src/plugins/pluginInfo.ts b/backend/src/plugins/pluginInfo.ts new file mode 100644 index 00000000..0d9305b2 --- /dev/null +++ b/backend/src/plugins/pluginInfo.ts @@ -0,0 +1,109 @@ +import { ZeppelinPluginInfo } from "../types"; +import { AutoDeletePlugin } from "./AutoDelete/AutoDeletePlugin"; +import { autoDeletePluginInfo } from "./AutoDelete/info"; +import { AutoReactionsPlugin } from "./AutoReactions/AutoReactionsPlugin"; +import { autoReactionsInfo } from "./AutoReactions/info"; +import { AutomodPlugin } from "./Automod/AutomodPlugin"; +import { automodPluginInfo } from "./Automod/info"; +import { CasesPlugin } from "./Cases/CasesPlugin"; +import { casesPluginInfo } from "./Cases/info"; +import { CensorPlugin } from "./Censor/CensorPlugin"; +import { censorPluginInfo } from "./Censor/info"; +import { CompanionChannelsPlugin } from "./CompanionChannels/CompanionChannelsPlugin"; +import { companionChannelsPluginInfo } from "./CompanionChannels/info"; +import { ContextMenuPlugin } from "./ContextMenus/ContextMenuPlugin"; +import { contextMenuPluginInfo } from "./ContextMenus/info"; +import { CountersPlugin } from "./Counters/CountersPlugin"; +import { countersPluginInfo } from "./Counters/info"; +import { CustomEventsPlugin } from "./CustomEvents/CustomEventsPlugin"; +import { customEventsPluginInfo } from "./CustomEvents/info"; +import { GuildInfoSaverPlugin } from "./GuildInfoSaver/GuildInfoSaverPlugin"; +import { guildInfoSaverPluginInfo } from "./GuildInfoSaver/info"; +import { InternalPosterPlugin } from "./InternalPoster/InternalPosterPlugin"; +import { internalPosterPluginInfo } from "./InternalPoster/info"; +import { LocateUserPlugin } from "./LocateUser/LocateUserPlugin"; +import { locateUserPluginInfo } from "./LocateUser/info"; +import { LogsPlugin } from "./Logs/LogsPlugin"; +import { logsPluginInfo } from "./Logs/info"; +import { MessageSaverPlugin } from "./MessageSaver/MessageSaverPlugin"; +import { messageSaverPluginInfo } from "./MessageSaver/info"; +import { ModActionsPlugin } from "./ModActions/ModActionsPlugin"; +import { modActionsPluginInfo } from "./ModActions/info"; +import { MutesPlugin } from "./Mutes/MutesPlugin"; +import { mutesPluginInfo } from "./Mutes/info"; +import { NameHistoryPlugin } from "./NameHistory/NameHistoryPlugin"; +import { nameHistoryPluginInfo } from "./NameHistory/info"; +import { PersistPlugin } from "./Persist/PersistPlugin"; +import { persistPluginInfo } from "./Persist/info"; +import { PhishermanPlugin } from "./Phisherman/PhishermanPlugin"; +import { phishermanPluginInfo } from "./Phisherman/info"; +import { PingableRolesPlugin } from "./PingableRoles/PingableRolesPlugin"; +import { pingableRolesPluginInfo } from "./PingableRoles/info"; +import { PostPlugin } from "./Post/PostPlugin"; +import { postPluginInfo } from "./Post/info"; +import { ReactionRolesPlugin } from "./ReactionRoles/ReactionRolesPlugin"; +import { reactionRolesPluginInfo } from "./ReactionRoles/info"; +import { RemindersPlugin } from "./Reminders/RemindersPlugin"; +import { remindersPluginInfo } from "./Reminders/info"; +import { RoleButtonsPlugin } from "./RoleButtons/RoleButtonsPlugin"; +import { roleButtonsPluginInfo } from "./RoleButtons/info"; +import { RoleManagerPlugin } from "./RoleManager/RoleManagerPlugin"; +import { roleManagerPluginInfo } from "./RoleManager/info"; +import { RolesPlugin } from "./Roles/RolesPlugin"; +import { rolesPluginInfo } from "./Roles/info"; +import { SelfGrantableRolesPlugin } from "./SelfGrantableRoles/SelfGrantableRolesPlugin"; +import { selfGrantableRolesPluginInfo } from "./SelfGrantableRoles/info"; +import { SlowmodePlugin } from "./Slowmode/SlowmodePlugin"; +import { slowmodePluginInfo } from "./Slowmode/info"; +import { SpamPlugin } from "./Spam/SpamPlugin"; +import { spamPluginInfo } from "./Spam/info"; +import { StarboardPlugin } from "./Starboard/StarboardPlugin"; +import { starboardPluginInfo } from "./Starboard/info"; +import { TagsPlugin } from "./Tags/TagsPlugin"; +import { tagsPluginInfo } from "./Tags/info"; +import { TimeAndDatePlugin } from "./TimeAndDate/TimeAndDatePlugin"; +import { timeAndDatePluginInfo } from "./TimeAndDate/info"; +import { UsernameSaverPlugin } from "./UsernameSaver/UsernameSaverPlugin"; +import { usernameSaverPluginInfo } from "./UsernameSaver/info"; +import { UtilityPlugin } from "./Utility/UtilityPlugin"; +import { utilityPluginInfo } from "./Utility/info"; +import { WelcomeMessagePlugin } from "./WelcomeMessage/WelcomeMessagePlugin"; +import { welcomeMessagePluginInfo } from "./WelcomeMessage/info"; + +export const guildPluginInfo: Record = { + [AutoDeletePlugin.name]: autoDeletePluginInfo, + [AutoReactionsPlugin.name]: autoReactionsInfo, + [GuildInfoSaverPlugin.name]: guildInfoSaverPluginInfo, + [CensorPlugin.name]: censorPluginInfo, + [LocateUserPlugin.name]: locateUserPluginInfo, + [LogsPlugin.name]: logsPluginInfo, + [PersistPlugin.name]: persistPluginInfo, + [PingableRolesPlugin.name]: pingableRolesPluginInfo, + [PostPlugin.name]: postPluginInfo, + [ReactionRolesPlugin.name]: reactionRolesPluginInfo, + [MessageSaverPlugin.name]: messageSaverPluginInfo, + [ModActionsPlugin.name]: modActionsPluginInfo, + [NameHistoryPlugin.name]: nameHistoryPluginInfo, + [RemindersPlugin.name]: remindersPluginInfo, + [RolesPlugin.name]: rolesPluginInfo, + [SelfGrantableRolesPlugin.name]: selfGrantableRolesPluginInfo, + [SlowmodePlugin.name]: slowmodePluginInfo, + [SpamPlugin.name]: spamPluginInfo, + [StarboardPlugin.name]: starboardPluginInfo, + [TagsPlugin.name]: tagsPluginInfo, + [UsernameSaverPlugin.name]: usernameSaverPluginInfo, + [UtilityPlugin.name]: utilityPluginInfo, + [WelcomeMessagePlugin.name]: welcomeMessagePluginInfo, + [CasesPlugin.name]: casesPluginInfo, + [MutesPlugin.name]: mutesPluginInfo, + [AutomodPlugin.name]: automodPluginInfo, + [CompanionChannelsPlugin.name]: companionChannelsPluginInfo, + [CustomEventsPlugin.name]: customEventsPluginInfo, + [TimeAndDatePlugin.name]: timeAndDatePluginInfo, + [CountersPlugin.name]: countersPluginInfo, + [ContextMenuPlugin.name]: contextMenuPluginInfo, + [PhishermanPlugin.name]: phishermanPluginInfo, + [InternalPosterPlugin.name]: internalPosterPluginInfo, + [RoleManagerPlugin.name]: roleManagerPluginInfo, + [RoleButtonsPlugin.name]: roleButtonsPluginInfo, +}; diff --git a/backend/src/types.ts b/backend/src/types.ts index 409c4dc6..b9c2e4d8 100644 --- a/backend/src/types.ts +++ b/backend/src/types.ts @@ -1,5 +1,5 @@ import { BaseConfig, Knub } from "knub"; -import z from "zod"; +import z, { ZodTypeAny } from "zod"; import { zSnowflake } from "./utils"; export interface ZeppelinGuildConfig extends BaseConfig { @@ -34,11 +34,13 @@ export type TZeppelinKnub = Knub; export type TMarkdown = string; export interface ZeppelinPluginInfo { + showInDocs: boolean; prettyName: string; description?: TMarkdown; usageGuide?: TMarkdown; configurationGuide?: TMarkdown; legacy?: boolean; + configSchema?: ZodTypeAny; } export interface CommandInfo { diff --git a/package-lock.json b/package-lock.json index 101c528c..870ac79d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ "fp-ts": "^2.0.1", "humanize-duration": "^3.15.0", "js-yaml": "^3.13.1", - "knub": "^32.0.0-next.18", + "knub": "^32.0.0-next.20", "knub-command-manager": "^9.1.0", "last-commit-log": "^2.1.0", "lodash.chunk": "^4.2.0", @@ -13250,9 +13250,9 @@ } }, "node_modules/knub": { - "version": "32.0.0-next.18", - "resolved": "https://registry.npmjs.org/knub/-/knub-32.0.0-next.18.tgz", - "integrity": "sha512-RCTozeB6WK17kh76uHKah9eSdN5nfbgrvPDCuq/fV5saZIpG1XBpbLNYJHPjvuoqMqk7BQYbR8OK1VrT52Wj8A==", + "version": "32.0.0-next.20", + "resolved": "https://registry.npmjs.org/knub/-/knub-32.0.0-next.20.tgz", + "integrity": "sha512-RNi6VC4H83HShujPRuIUsuuHhVwvWY4qIaVQSswZPUGtCgY+h8rKtPQ5mCcNAroMJJWr4rVXVXUG7fOfY/ZyBg==", "dependencies": { "discord-api-types": "^0.37.67", "discord.js": "^14.14.1",