mirror of
https://github.com/sern-handler/handler
synced 2026-06-17 05:12:16 +00:00
64 lines
1.6 KiB
TypeScript
64 lines
1.6 KiB
TypeScript
import { CommandType, EventType, PluginType } from '../structures';
|
|
import type { Plugin, PluginResult } from '../../types/plugin';
|
|
import type { CommandArgs, EventArgs } from './args';
|
|
import type { ClientEvents } from 'discord.js';
|
|
|
|
export function makePlugin<V extends unknown[]>(
|
|
type: PluginType,
|
|
execute: (...args: any[]) => any,
|
|
): Plugin<V> {
|
|
return {
|
|
type,
|
|
execute,
|
|
} as Plugin<V>;
|
|
}
|
|
/**
|
|
* @since 2.5.0
|
|
* @__PURE__
|
|
*/
|
|
export function EventInitPlugin<I extends EventType>(
|
|
execute: (...args: EventArgs<I, PluginType.Init>) => PluginResult,
|
|
) {
|
|
return makePlugin(PluginType.Init, execute);
|
|
}
|
|
/**
|
|
* @since 2.5.0
|
|
* @__PURE__
|
|
*/
|
|
export function CommandInitPlugin<I extends CommandType>(
|
|
execute: (...args: CommandArgs<I, PluginType.Init>) => PluginResult,
|
|
) {
|
|
return makePlugin(PluginType.Init, execute);
|
|
}
|
|
/**
|
|
* @since 2.5.0
|
|
* @__PURE__
|
|
*/
|
|
export function CommandControlPlugin<I extends CommandType>(
|
|
execute: (...args: CommandArgs<I, PluginType.Control>) => PluginResult,
|
|
) {
|
|
return makePlugin(PluginType.Control, execute);
|
|
}
|
|
/**
|
|
* @since 2.5.0
|
|
* @__PURE__
|
|
*/
|
|
export function EventControlPlugin<I extends EventType>(
|
|
execute: (...args: EventArgs<I, PluginType.Control>) => PluginResult,
|
|
) {
|
|
return makePlugin(PluginType.Control, execute);
|
|
}
|
|
|
|
/**
|
|
* @since 2.5.0
|
|
* @Experimental
|
|
* A specialized function for creating control plugins with discord.js ClientEvents.
|
|
* Will probably be moved one day!
|
|
*/
|
|
export function DiscordEventControlPlugin<T extends keyof ClientEvents>(
|
|
name: T,
|
|
execute: (...args: ClientEvents[T]) => PluginResult,
|
|
) {
|
|
return makePlugin(PluginType.Control, execute);
|
|
}
|