diff --git a/src/plugins/publish.ts b/src/plugins/publish.ts index e1a0b9d..9f0febb 100644 --- a/src/plugins/publish.ts +++ b/src/plugins/publish.ts @@ -1,23 +1,4 @@ -// @ts-nocheck -/** - * This is publish plugin, it allows you to publish your slash commands with ease. - * - * @author @EvolutionX-10 [<@697795666373640213>] - * @version 1.2.1 - * @example - * ```ts - * import { publish } from "../plugins/publish"; - * import { commandModule } from "@sern/handler"; - * export default commandModule({ - * plugins: [ publish() ], // put an object containing permissions, ids for guild commands, boolean for dmPermission - * // plugins: [ publish({ guildIds: [], dmPermission: true})] - * execute: (ctx) => { - * //your code here - * } - * }) - * ``` - */ - import { +import { CommandPlugin, CommandType, PluginType, @@ -39,10 +20,16 @@ export function publish( async execute({ client }, { mod: module }, controller) { const defaultOptions = { guildIds: [], - dmPermission: true, + + dmPermission: undefined, + defaultMemberPermissions: null, }; - options = { ...defaultOptions, ...options }; - let { defaultMemberPermissions, dmPermission, guildIds } = options; + + options = { ...defaultOptions, ...options } as PublishOptions & + ValidPublishOptions; + let { defaultMemberPermissions, dmPermission, guildIds } = + options as unknown as ValidPublishOptions; + function c(e: unknown) { console.error("publish command didnt work for", module.name!); console.error(e); @@ -57,8 +44,6 @@ export function publish( dmPermission, }; - if (!Array.isArray(guildIds)) guildIds = [guildIds!]; - if (!guildIds.length) { const cmd = (await client.application!.commands.fetch()).find( (c) => c.name === module.name @@ -134,15 +119,31 @@ export const CommandTypeRaw = { [CommandType.Slash]: ApplicationCommandType.ChatInput, } as const; -interface DefaultPublishOptions { - guildIds?: string | string[]; +type NonEmptyArray = [T, ...T[]]; + +interface ValidPublishOptions { + guildIds: string[]; + dmPermission: boolean; + defaultMemberPermissions: PermissionResolvable; +} +interface GuildPublishOptions { + guildIds?: NonEmptyArray; + defaultMemberPermissions?: PermissionResolvable; + dmPermission?: never; +} +interface GlobalPublishOptions { defaultMemberPermissions?: PermissionResolvable; dmPermission?: boolean; + guildIds?: never; } -type PublishOptions = DefaultPublishOptions & +type BasePublishOptions = GuildPublishOptions | GlobalPublishOptions; + +type PublishOptions = BasePublishOptions & ( - | Required> - | Required> - | Required> + | Required> + | ( + | Required> + | Required> + ) ); \ No newline at end of file