From 6d018ea060536f52e77d68b76a84e774cf46a01f Mon Sep 17 00:00:00 2001 From: Jacob Nguyen <76754747+jacoobes@users.noreply.github.com> Date: Thu, 4 Jan 2024 03:08:22 -0600 Subject: [PATCH] feat: fromCallback.ts (#109) --- plugins/fromCallback.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 plugins/fromCallback.ts diff --git a/plugins/fromCallback.ts b/plugins/fromCallback.ts new file mode 100644 index 0000000..87e2b03 --- /dev/null +++ b/plugins/fromCallback.ts @@ -0,0 +1,37 @@ +//@ts-nocheck +/** + * @plugin + * fromCallback turns a callback into a plugin result. + * if the callback returns truthy value, plugin continues. + * This control plugin works for every command type. The arguments of the callback + * mirror the execute method on the current module. + * @author @jacoobes [<@182326315813306368>] + * @version 1.0.0 + * @example + * ```ts + * const myServer = "941002690211766332"; + * export default commandModule({ + * type: CommandType.Both, + * plugins: [ + * //This plugin prevents this command module from executing in other servers except myServer + * fromCallback((ctx, args) => ctx.guildId == myServer) + * ], + * execute: ctx => { + * ctx.reply("I only respond in myServer!"); + * } + * }) + * ``` + * @end + */ + + +import { PluginType, makePlugin, controller } from "@sern/handler"; + +export const fromCallback = (cb: (...args: any[]) => boolean) => + makePlugin(PluginType.Control, (...args) => { + //console.log(args) + if(cb.apply(null, args)) { + return controller.next(); + } + return controller.stop(); + });