mirror of
https://github.com/sern-handler/handler
synced 2026-06-06 01:16:55 +00:00
feat(higherorders.ts): a new function that acts as a command options builder
This commit is contained in:
@@ -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 }; };
|
||||
}
|
||||
26
src/handler/utilities/options.ts
Normal file
26
src/handler/utilities/options.ts
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user