From e563521416052808bcec57057b921f0c0b6ca594 Mon Sep 17 00:00:00 2001 From: ArjixWasTaken <53124886+ArjixWasTaken@users.noreply.github.com> Date: Thu, 6 Oct 2022 01:11:32 +0300 Subject: Add commands API (#38) --- src/plugins/apiCommands.ts | 22 ++++++++++++ src/plugins/index.ts | 83 ++++++++++++++++++++++++++++++---------------- src/plugins/lenny.ts | 20 +++++++++++ src/plugins/nitroBypass.ts | 4 +-- 4 files changed, 99 insertions(+), 30 deletions(-) create mode 100644 src/plugins/apiCommands.ts create mode 100644 src/plugins/lenny.ts (limited to 'src/plugins') diff --git a/src/plugins/apiCommands.ts b/src/plugins/apiCommands.ts new file mode 100644 index 0000000..7c02dd9 --- /dev/null +++ b/src/plugins/apiCommands.ts @@ -0,0 +1,22 @@ +import definePlugin from "../utils/types"; +import { Devs } from "../utils/constants"; + +export default definePlugin({ + name: "CommandsAPI", + authors: [Devs.Arjix], + description: "Api required by anything that uses commands", + patches: [ + { + find: `"giphy","tenor"`, + replacement: [ + { + // Matches BUILT_IN_COMMANDS. This is not exported so this is + // the only way. _init() just returns the same object to make the + // patch simpler, the resulting code is x=Vencord.Api.Commands._init(y).filter(...) + match: /(?<=\w=)(\w)(\.filter\(.{0,30}giphy)/, + replace: "Vencord.Api.Commands._init($1)$2", + } + ], + } + ], +}); diff --git a/src/plugins/index.ts b/src/plugins/index.ts index e03c588..44f1e83 100644 --- a/src/plugins/index.ts +++ b/src/plugins/index.ts @@ -1,4 +1,5 @@ import Plugins from "plugins"; +import { registerCommand, unregisterCommand } from "../api/Commands"; import { Settings } from "../api/settings"; import Logger from "../utils/logger"; import { Patch, Plugin } from "../utils/types"; @@ -17,44 +18,70 @@ for (const plugin of Object.values(Plugins)) if (plugin.patches && Settings.plug } export function startAllPlugins() { - for (const plugin in Plugins) if (Settings.plugins[plugin].enabled) { - startPlugin(Plugins[plugin]); + for (const name in Plugins) if (Settings.plugins[name].enabled) { + startPlugin(Plugins[name]); } } export function startPlugin(p: Plugin) { - if (!p.start) return true; - - logger.info("Starting plugin", p.name); - if (p.started) { - logger.warn(`${p.name} already started`); - return false; + if (p.start) { + logger.info("Starting plugin", p.name); + if (p.started) { + logger.warn(`${p.name} already started`); + return false; + } + try { + p.start(); + p.started = true; + } catch (e) { + logger.error(`Failed to start ${p.name}\n`, e); + return false; + } } - try { - p.start(); - p.started = true; - return true; - } catch (err: any) { - logger.error(`Failed to start ${p.name}\n`, err); - return false; + if (p.commands?.length) { + logger.info("Registering commands of plugin", p.name); + for (const cmd of p.commands) { + try { + registerCommand(cmd, p.name); + } catch (e) { + logger.error(`Failed to register command ${cmd.name}\n`, e); + return false; + } + } + } + + return true; } export function stopPlugin(p: Plugin) { - if (!p.stop) return true; - - logger.info("Stopping plugin", p.name); - if (!p.started) { - logger.warn(`${p.name} already stopped / never started`); - return false; + if (p.stop) { + logger.info("Stopping plugin", p.name); + if (!p.started) { + logger.warn(`${p.name} already stopped`); + return false; + } + try { + p.stop(); + p.started = false; + } catch (e) { + logger.error(`Failed to stop ${p.name}\n`, e); + return false; + } } - try { - p.stop(); - p.started = false; - return true; - } catch (err: any) { - logger.error(`Failed to stop ${p.name}\n`, err); - return false; + + if (p.commands?.length) { + logger.info("Unregistering commands of plugin", p.name); + for (const cmd of p.commands) { + try { + unregisterCommand(cmd.name); + } catch (e) { + logger.error(`Failed to unregister command ${cmd.name}\n`, e); + return false; + } + } } + + return true; } diff --git a/src/plugins/lenny.ts b/src/plugins/lenny.ts new file mode 100644 index 0000000..901febc --- /dev/null +++ b/src/plugins/lenny.ts @@ -0,0 +1,20 @@ +import definePlugin from "../utils/types"; +import { Devs } from "../utils/constants"; +import { findOption, OptionalMessageOption } from "../api/Commands"; + +export default definePlugin({ + name: "lenny", + description: "( ͡° ͜ʖ ͡°)", + authors: [Devs.Arjix], + dependencies: ["CommandsAPI"], + commands: [ + { + name: "lenny", + description: "Sends a lenny face", + options: [OptionalMessageOption], + execute: (opts) => ({ + content: findOption(opts, "message", "") + " ( ͡° ͜ʖ ͡°)" + }), + }, + ] +}); diff --git a/src/plugins/nitroBypass.ts b/src/plugins/nitroBypass.ts index 4a0ed44..d96ff0d 100644 --- a/src/plugins/nitroBypass.ts +++ b/src/plugins/nitroBypass.ts @@ -61,7 +61,7 @@ export default definePlugin({ const emojiString = `<${emoji.animated ? 'a' : ''}:${emoji.originalName || emoji.name}:${emoji.id}>`; const url = emoji.url.replace(/\?size=[0-9]+/, `?size=48`); messageObj.content = messageObj.content.replace(emojiString, (match, offset, origStr) => { - return `${getWordBoundary(origStr, offset-1)}${url}${getWordBoundary(origStr, offset+match.length)}`; + return `${getWordBoundary(origStr, offset - 1)}${url}${getWordBoundary(origStr, offset + match.length)}`; }); } }); @@ -76,7 +76,7 @@ export default definePlugin({ const url = emoji.url.replace(/\?size=[0-9]+/, `?size=48`); messageObj.content = messageObj.content.replace(emojiStr, (match, offset, origStr) => { - return `${getWordBoundary(origStr, offset-1)}${url}${getWordBoundary(origStr, offset+match.length)}`; + return `${getWordBoundary(origStr, offset - 1)}${url}${getWordBoundary(origStr, offset + match.length)}`; }); } }); -- cgit