feat(higherorders.ts): a new function that acts as a command options builder

This commit is contained in:
Jacob Nguyen
2022-02-19 13:12:42 -06:00
parent dc30f0288c
commit 651009c9ed
2 changed files with 38 additions and 3 deletions

View File

@@ -1,4 +1,5 @@
import type { Message } from 'discord.js';
import type { Application, ApplicationCommandOptionData, Message } from 'discord.js';
import type { OptionData } from './options';
type MsgFnArgs = [msgOrInter: Message, prefix?: string];
type MsgFn = (...args: MsgFnArgs) => boolean;
@@ -8,10 +9,18 @@ type MsgFn = (...args: MsgFnArgs) => boolean;
* @param {MsgFn} fn any function that has argument `MsgFnArgs` returning boolean
* @returns {(message: Message, prefix: string) => boolean}
*/
export function AllTrue(...fns : MsgFn[]) :
(message: Message, prefix: string) => boolean {
export function AllTrue(...fns: MsgFn[]):
(message: Message, prefix: string) => boolean {
return (message: Message, prefix: string) => {
return fns.every(g => g(message, prefix));
};
}
/**
* A HoF that acts as a ligtweight slash command options builder, enabling user with intellisense
* @param { T extends keyof OptionData } type type of option
* @returns { (optionData: Omit<OptionData[T], 'type'>) => ApplicationCommandOptionData | Omit<OptionData[T], 'type'> } creates options
*/
export function Option<T extends keyof OptionData>(type: T) {
return (optionData: Omit<OptionData[T], 'type'>) => { return { type, ...optionData }; };
}

View File

@@ -0,0 +1,26 @@
import type {
ApplicationCommandAutocompleteOption,
ApplicationCommandChannelOptionData,
ApplicationCommandChoicesOption,
ApplicationCommandNonOptionsData,
ApplicationCommandNumericOptionData,
ApplicationCommandSubCommandData,
ApplicationCommandSubGroupData
} from 'discord.js';
type BaseOption = { name : string, description : string, required : false };
export interface OptionData {
SUB_COMMAND: ApplicationCommandSubCommandData
SUB_COMMAND_GROUP: ApplicationCommandSubGroupData
NONE: ApplicationCommandNonOptionsData
CHANNEL: ApplicationCommandChannelOptionData
CHOICE: ApplicationCommandChoicesOption
AUTO: ApplicationCommandAutocompleteOption
NUMBER: ApplicationCommandNumericOptionData
INTEGER: ApplicationCommandNumericOptionData
USER : { type: "USER" } & BaseOption
MENTIONABLE: { type : "MENTIONABLE" } & BaseOption
ROLE : { type: "ROLE" } & BaseOption
BOOLEAN : { type: "BOOLEAN" } & BaseOption
}