import * as t from "io-ts"; import { BasePluginType, globalPlugin, GlobalPluginBlueprint, GlobalPluginData, guildPlugin, GuildPluginBlueprint, GuildPluginData, } from "knub"; 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?: t.Type; }; } 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; } }