From 4bddcee40bdc669f28a80543d58a238f92915bbb Mon Sep 17 00:00:00 2001 From: Vendicated Date: Tue, 25 Oct 2022 12:19:56 +0200 Subject: [PATCH] Add autogenerated plugin list, closes #151 --- README.md | 2 +- scripts/genPluginList.js | 65 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 scripts/genPluginList.js diff --git a/README.md b/README.md index 5aacda3..595fd5a 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ A Discord client mod that does things differently - Works on Discord's latest update that breaks all other mods - Browser Support (experimental): Run Vencord in your Browser instead of the desktop app - Custom Css and Themes: Manually edit `%appdata%/Vencord/settings/quickCss.css` / `~/.config/Vencord/settings/quickCss.css` with your favourite editor and the client will automatically apply your changes. To import BetterDiscord themes, just add `@import url(theUrl)` on the top of this file. (Make sure the url is a github raw URL or similar and only contains plain text, and NOT a nice looking website) -- Many Usefulâ„¢ plugins - [List](https://github.com/Vendicated/Vencord/tree/main/src/plugins) +- Many Usefulâ„¢ plugins - [See a full List](https://gist.github.com/Vendicated/8696cde7b92548064a3ae92ead84d033) - Experiments - Proper context isolation -> Works in newer Electron versions (Confirmed working on versions 13-22) - Inline patches: Patch Discord's code with regex replacements! See [the experiments plugin](src/plugins/experiments.ts) for an example. While being more complex, this is more powerful than monkey patching since you can patch only small parts of functions instead of fully replacing them, access non exported/local variables and even replace constants (like in the aforementioned experiments patch!) diff --git a/scripts/genPluginList.js b/scripts/genPluginList.js new file mode 100644 index 0000000..20cf9d0 --- /dev/null +++ b/scripts/genPluginList.js @@ -0,0 +1,65 @@ +/* + * Vencord, a modification for Discord's desktop app + * Copyright (c) 2022 Vendicated and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +*/ + +// A script to automatically generate a list of all plugins. +// Just copy paste the entire file into a running Vencord install and it will prompt you +// to save the file + +(() => { + // eslint-disable-next-line spaced-comment + /// + /** + * @type {typeof import("~plugins").default} + */ + const Plugins = Vencord.Plugins.plugins; + + const header = ` + + +# Vencord Plugins +`; + + let tableOfContents = "\n\n"; + + let list = "\n\n"; + + for (const p of Object.values(Plugins).sort((a, b) => a.name.localeCompare(b.name))) { + tableOfContents += `- [${p.name}](#${encodeURIComponent(p.name)})\n`; + + list += `## ${p.name} + +${p.description} + +**Authors**: ${p.authors.map(a => a.name).join(", ")} +`; + + if (p.commands?.length) { + list += "\n\n### Commands\n"; + for (const cmd of p.commands) { + list += `${cmd.name} - ${cmd.description}\n\n`; + } + } + list += "\n\n"; + } + + const data = new Blob([header.trimStart(), tableOfContents, list.trimEnd()], { type: "text/plain" }); + data.arrayBuffer().then(buf => + DiscordNative.fileManager.saveWithDialog(new Uint8Array(buf), "plugins.md") + ); + +})();