diff --git a/scripts/generateEquicordPluginList.ts b/scripts/generateEquicordPluginList.ts index 4ce76732..1805ada4 100644 --- a/scripts/generateEquicordPluginList.ts +++ b/scripts/generateEquicordPluginList.ts @@ -20,15 +20,21 @@ import { Dirent, readdirSync, readFileSync, writeFileSync } from "fs"; import { access, readFile } from "fs/promises"; import { join, sep } from "path"; import { normalize as posixNormalize, sep as posixSep } from "path/posix"; -import { BigIntLiteral, createSourceFile, Identifier, isArrayLiteralExpression, isCallExpression, isExportAssignment, isIdentifier, isObjectLiteralExpression, isPropertyAccessExpression, isPropertyAssignment, isSatisfiesExpression, isStringLiteral, isVariableStatement, NamedDeclaration, NodeArray, ObjectLiteralExpression, ScriptTarget, StringLiteral, SyntaxKind } from "typescript"; +import { BigIntLiteral, createSourceFile, Identifier, isArrayLiteralExpression, isCallExpression, isExportAssignment, isIdentifier, isObjectLiteralExpression, isPropertyAccessExpression, isPropertyAssignment, isSatisfiesExpression, isStringLiteral, isVariableStatement, NamedDeclaration, NodeArray, ObjectLiteralExpression, PropertyAssignment, ScriptTarget, StringLiteral, SyntaxKind } from "typescript"; import { getPluginTarget } from "./utils.mjs"; +import { ApplicationCommandOptionType } from "@api/Commands"; interface Dev { name: string; id: string; } +interface Command { + name: string; + description: string; +} + interface PluginData { name: string; description: string; @@ -37,6 +43,7 @@ interface PluginData { dependencies: string[]; hasPatches: boolean; hasCommands: boolean; + commands: Command[]; required: boolean; enabledByDefault: boolean; target: "discordDesktop" | "vencordDesktop" | "equicordDesktop" | "desktop" | "web" | "dev"; @@ -161,6 +168,35 @@ async function parseFile(fileName: string) { break; case "commands": data.hasCommands = true; + if (!isArrayLiteralExpression(value)) throw fail("commands is not an array literal"); + data.commands = value.elements.map((e) => { + if (!isObjectLiteralExpression(e)) { + throw fail("commands array contains non-object literals"); + } + + const nameProperty = e.properties.find((p): p is PropertyAssignment => { + return isPropertyAssignment(p) && isIdentifier(p.name) && p.name.escapedText === 'name'; + }); + + const descriptionProperty = e.properties.find((p): p is PropertyAssignment => { + return isPropertyAssignment(p) && isIdentifier(p.name) && p.name.escapedText === 'description'; + }); + + if (!nameProperty || !descriptionProperty) throw fail("Command missing required properties"); + + const name = isStringLiteral(nameProperty.initializer) + ? nameProperty.initializer.text + : ''; + const description = isStringLiteral(descriptionProperty.initializer) + ? descriptionProperty.initializer.text + : ''; + + return { + name, + description + }; + }); + break; case "authors": if (!isArrayLiteralExpression(value)) throw fail("authors is not an array literal"); diff --git a/src/equicordplugins/cuteNekos/index.ts b/src/equicordplugins/cuteNekos/index.ts index 30002205..e7d7a0f5 100644 --- a/src/equicordplugins/cuteNekos/index.ts +++ b/src/equicordplugins/cuteNekos/index.ts @@ -18,10 +18,10 @@ async function getcuteneko(): Promise { export default definePlugin({ name: "CuteNekos", authors: [Devs.echo], - description: "Neko Command", + description: "Send Nekos to others", commands: [{ name: "nekos", - description: "Baby don't hurt me no more", + description: "Send Neko", execute: async opts => ({ content: await getcuteneko() }) diff --git a/src/equicordplugins/cutePats/index.ts b/src/equicordplugins/cutePats/index.ts index c6e0cb49..5ffaabde 100644 --- a/src/equicordplugins/cutePats/index.ts +++ b/src/equicordplugins/cutePats/index.ts @@ -8,7 +8,6 @@ import { EquicordDevs } from "@utils/constants"; import definePlugin from "@utils/types"; async function getcutepats(): Promise { - // Indi wants bad things const res = await fetch("https://api.waifu.pics/sfw/pat"); const url = (await res.json()).url as string; return url; @@ -19,10 +18,10 @@ async function getcutepats(): Promise { export default definePlugin({ name: "CutePats", authors: [EquicordDevs.thororen], - description: "Pat Command", + description: "Sending Head Pats", commands: [{ name: "pat", - description: "Baby don't hurt me no more", + description: "Sends a headpat gif", execute: async opts => ({ content: await getcutepats() }) diff --git a/src/equicordplugins/gifRoulette/index.tsx b/src/equicordplugins/gifRoulette/index.tsx index 2eee86f8..7a6ac1e3 100644 --- a/src/equicordplugins/gifRoulette/index.tsx +++ b/src/equicordplugins/gifRoulette/index.tsx @@ -44,7 +44,7 @@ export default definePlugin({ commands: [ { name: "gifroulette", - description: "Time to tempt your fate", + description: "Tempt fate and send a gif", execute: (opts, other) => ({ content: getMessage(opts, other) }),