fix: publish finally fixed

This commit is contained in:
2022-08-22 17:41:19 +02:00
parent 4d40a07afd
commit 84d6d821c9

View File

@@ -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 extends string = string> = [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<Pick<DefaultPublishOptions, "defaultMemberPermissions">>
| Required<Pick<DefaultPublishOptions, "dmPermission">>
| Required<Pick<DefaultPublishOptions, "guildIds">>
| Required<Pick<BasePublishOptions, "defaultMemberPermissions">>
| (
| Required<Pick<BasePublishOptions, "dmPermission">>
| Required<Pick<BasePublishOptions, "guildIds">>
)
);