Less confusing plugin names (bulk plugin rename) (#214)

Co-authored-by: Nuckyz <61953774+Nuckyz@users.noreply.github.com>
This commit is contained in:
Ven 2022-11-14 18:05:41 +01:00 committed by GitHub
parent a96f8a89f3
commit 82e444e196
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 94 additions and 45 deletions

View File

@ -19,10 +19,12 @@
import plugins from "~plugins";
import IpcEvents from "../utils/IpcEvents";
import Logger from "../utils/Logger";
import { mergeDefaults } from "../utils/misc";
import { OptionType } from "../utils/types";
import { React } from "../webpack/common";
const logger = new Logger("Settings");
export interface Settings {
notifyAboutUpdates: boolean;
useQuickCss: boolean;
@ -169,3 +171,21 @@ export function addSettingsListener(path: string, onUpdate: (newValue: any, path
(onUpdate as SubscriptionCallback)._path = path;
subscriptions.add(onUpdate);
}
export function migratePluginSettings(name: string, ...oldNames: string[]) {
const { plugins } = settings;
if (name in plugins) return;
for (const oldName of oldNames) {
if (oldName in plugins) {
logger.info(`Migrating settings from old name ${oldName} to ${name}`);
plugins[name] = plugins[oldName];
delete plugins[oldName];
VencordNative.ipc.invoke(
IpcEvents.SET_SETTINGS,
JSON.stringify(settings, null, 4)
);
break;
}
}
}

View File

@ -16,6 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { migratePluginSettings } from "../api/settings";
import { Devs } from "../utils/constants";
import definePlugin from "../utils/types";
@ -33,8 +34,9 @@ const nameMap = {
customitem: "MenuItem",
};
migratePluginSettings("MenuItemDeobfuscatorAPI", "MenuItemDeobfuscatorApi");
export default definePlugin({
name: "MenuItemDeobfuscatorApi",
name: "MenuItemDeobfuscatorAPI",
description: "Deobfuscates Discord's Menu Item module",
authors: [Devs.Ven],
patches: [

View File

@ -16,11 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { migratePluginSettings } from "../api/settings";
import { Devs } from "../utils/constants";
import definePlugin from "../utils/types";
migratePluginSettings("NoticesAPI", "NoticesApi");
export default definePlugin({
name: "NoticesApi",
name: "NoticesAPI",
description: "Fixes notices being automatically dismissed",
authors: [Devs.Ven],
required: true,

View File

@ -21,8 +21,9 @@ import {
addPreSendListener,
MessageObject,
removePreEditListener,
removePreSendListener,
removePreSendListener
} from "../../api/MessageEvents";
import { migratePluginSettings } from "../../api/settings";
import { Devs } from "../../utils/constants";
import definePlugin from "../../utils/types";
import { defaultRules } from "./defaultRules";
@ -31,8 +32,9 @@ import { defaultRules } from "./defaultRules";
const reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
const reHasRegExpChar = RegExp(reRegExpChar.source);
migratePluginSettings("ClearURLs", "clearURLs");
export default definePlugin({
name: "clearURLs",
name: "ClearURLs",
description: "Removes tracking garbage from URLs",
authors: [Devs.adryd],
dependencies: ["MessageEventsAPI"],

View File

@ -16,9 +16,10 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { Settings } from "../api/settings";
import { migratePluginSettings, Settings } from "../api/settings";
import { CheckedTextInput } from "../components/CheckedTextInput";
import { Devs } from "../utils/constants";
import Logger from "../utils/Logger";
import { lazyWebpack, makeLazy } from "../utils/misc";
import { ModalContent, ModalHeader, ModalRoot, openModal } from "../utils/modal";
import definePlugin from "../utils/types";
@ -60,12 +61,12 @@ async function doClone(guildId: string, id: string, name: string, isAnimated: bo
image: reader.result
}).then(() => {
Toasts.show({
message: `Successfully yoinked ${name}!`,
message: `Successfully cloned ${name}!`,
type: Toasts.Type.SUCCESS,
id: Toasts.genId()
});
}).catch(e => {
console.error("[EmoteYoink] Failed to upload emoji", e);
}).catch((e: any) => {
new Logger("EmoteCloner").error("Failed to upload emoji", e);
Toasts.show({
message: "Oopsie something went wrong :( Check console!!!",
type: Toasts.Type.FAILURE,
@ -174,18 +175,19 @@ function CloneModal({ id, name: emojiName, isAnimated }: { id: string; name: str
);
}
migratePluginSettings("EmoteCloner", "EmoteYoink");
export default definePlugin({
name: "EmoteYoink",
description: "Clone emotes to your own server",
name: "EmoteCloner",
description: "Adds a Clone context menu item to emotes to clone them your own server",
authors: [Devs.Ven],
dependencies: ["MenuItemDeobfuscatorApi"],
dependencies: ["MenuItemDeobfuscatorAPI"],
patches: [{
// Literally copy pasted from ReverseImageSearch lol
find: "open-native-link",
replacement: {
match: /id:"open-native-link".{0,200}\(\{href:(.{0,3}),.{0,200}\},"open-native-link"\)/,
replace: "$&,Vencord.Plugins.plugins.EmoteYoink.makeMenu(arguments[2])"
replace: "$&,Vencord.Plugins.plugins.EmoteCloner.makeMenu(arguments[2])"
},
},
@ -214,9 +216,9 @@ export default definePlugin({
const isAnimated = new URL(htmlElement.src).pathname.endsWith(".gif");
return <Menu.MenuItem
id="yoink"
key="yoink"
label="Yoink"
id="emote-cloner"
key="emote-cloner"
label="Clone"
action={() =>
openModal(modalProps => (
<ModalRoot {...modalProps}>

View File

@ -17,6 +17,7 @@
*/
import { addPreEditListener, addPreSendListener, removePreEditListener, removePreSendListener } from "../api/MessageEvents";
import { migratePluginSettings } from "../api/settings";
import { Devs } from "../utils/constants";
import { ApngDisposeOp, getGifEncoder, importApngJs } from "../utils/dependencies";
import { lazyWebpack } from "../utils/misc";
@ -55,8 +56,10 @@ interface StickerPack {
stickers: Sticker[];
}
migratePluginSettings("FakeNitro", "NitroBypass");
export default definePlugin({
name: "NitroBypass",
name: "FakeNitro",
authors: [Devs.Arjix, Devs.D3SOX, Devs.Ven],
description: "Allows you to stream in nitro quality and send fake emojis/stickers.",
dependencies: ["MessageEventsAPI"],
@ -64,7 +67,7 @@ export default definePlugin({
patches: [
{
find: "canUseAnimatedEmojis:function",
predicate: () => Settings.plugins.NitroBypass.enableEmojiBypass === true,
predicate: () => Settings.plugins.FakeNitro.enableEmojiBypass === true,
replacement: [
"canUseAnimatedEmojis",
"canUseEmojisEverywhere"
@ -77,7 +80,7 @@ export default definePlugin({
},
{
find: "canUseAnimatedEmojis:function",
predicate: () => Settings.plugins.NitroBypass.enableStickerBypass === true,
predicate: () => Settings.plugins.FakeNitro.enableStickerBypass === true,
replacement: {
match: /canUseStickersEverywhere:function\(.+?}/,
replace: "canUseStickersEverywhere:function(e){return true;}"
@ -92,7 +95,7 @@ export default definePlugin({
},
{
find: "canUseAnimatedEmojis:function",
predicate: () => Settings.plugins.NitroBypass.enableStreamQualityBypass === true,
predicate: () => Settings.plugins.FakeNitro.enableStreamQualityBypass === true,
replacement: [
"canUseHighVideoUploadQuality",
"canStreamHighQuality",
@ -106,7 +109,7 @@ export default definePlugin({
},
{
find: "STREAM_FPS_OPTION.format",
predicate: () => Settings.plugins.NitroBypass.enableStreamQualityBypass === true,
predicate: () => Settings.plugins.FakeNitro.enableStreamQualityBypass === true,
replacement: {
match: /(userPremiumType|guildPremiumTier):.{0,10}TIER_\d,?/g,
replace: ""
@ -154,7 +157,7 @@ export default definePlugin({
},
getStickerLink(stickerId: string) {
return `https://media.discordapp.net/stickers/${stickerId}.png?size=${Settings.plugins.NitroBypass.stickerSize}`;
return `https://media.discordapp.net/stickers/${stickerId}.png?size=${Settings.plugins.FakeNitro.stickerSize}`;
},
async sendAnimatedSticker(stickerLink: string, stickerId: string, channelId: string) {
@ -167,7 +170,7 @@ export default definePlugin({
const { frames, width, height } = await parseURL(stickerLink);
const gif = new GIFEncoder();
const resolution = Settings.plugins.NitroBypass.stickerSize;
const resolution = Settings.plugins.FakeNitro.stickerSize;
const canvas = document.createElement("canvas");
canvas.width = resolution;
@ -210,7 +213,7 @@ export default definePlugin({
},
start() {
const settings = Settings.plugins.NitroBypass;
const settings = Settings.plugins.FakeNitro;
if (!settings.enableEmojiBypass && !settings.enableStickerBypass) {
return;
}

View File

@ -17,6 +17,7 @@
*/
import { addClickListener, removeClickListener } from "../api/MessageEvents";
import { migratePluginSettings } from "../api/settings";
import { Devs } from "../utils/constants";
import { lazyWebpack } from "../utils/misc";
import definePlugin from "../utils/types";
@ -27,9 +28,11 @@ let isDeletePressed = false;
const keydown = (e: KeyboardEvent) => e.key === "Backspace" && (isDeletePressed = true);
const keyup = (e: KeyboardEvent) => e.key === "Backspace" && (isDeletePressed = false);
migratePluginSettings("MessageClickActions", "MessageQuickActions");
export default definePlugin({
name: "MessageQuickActions",
description: "Quick Delete, Quick edit",
name: "MessageClickActions",
description: "Hold Delete and click to delete, double click to edit",
authors: [Devs.Ven],
dependencies: ["MessageEventsAPI"],

View File

@ -17,12 +17,14 @@
*/
import { findOption, OptionalMessageOption } from "../api/Commands";
import { migratePluginSettings } from "../api/settings";
import { Devs } from "../utils/constants";
import definePlugin from "../utils/types";
migratePluginSettings("MoreKaomoji", "moarKaomojis");
export default definePlugin({
name: "moarKaomojis",
description: "Adds more Kaomojis to discord. ヽ(´▽`)/",
name: "MoreKaomoji",
description: "Adds more Kaomoji to discord. ヽ(´▽`)/",
authors: [Devs.JacobTm],
dependencies: ["CommandsAPI"],
commands: [

View File

@ -16,11 +16,14 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { migratePluginSettings } from "../api/settings";
import { Devs } from "../utils/constants";
import definePlugin from "../utils/types";
migratePluginSettings("NoDevtoolsWarning", "STFU");
export default definePlugin({
name: "STFU",
name: "NoDevtoolsWarning",
description: "Disables the 'HOLD UP' banner in the console",
authors: [Devs.Ven],
patches: [{

View File

@ -18,6 +18,7 @@
import { Message } from "discord-types/general";
import { migratePluginSettings } from "../api/settings";
import { Devs } from "../utils/constants";
import { lazyWebpack } from "../utils/misc";
import definePlugin from "../utils/types";
@ -30,8 +31,10 @@ const isMac = navigator.platform.includes("Mac"); // bruh
let replyIdx = -1;
let editIdx = -1;
migratePluginSettings("QuickReply", "InteractionKeybinds");
export default definePlugin({
name: "InteractionKeybinds",
name: "QuickReply",
authors: [Devs.obscurity, Devs.Ven],
description: "Reply to (ctrl + up/down) and edit (ctrl + shift + up/down) messages via keybinds",

View File

@ -30,9 +30,9 @@ const Engines = {
export default definePlugin({
name: "ReverseImageSearch",
description: "yes",
description: "Adds ImageSearch to image context menus",
authors: [Devs.Ven],
dependencies: ["MenuItemDeobfuscatorApi"],
dependencies: ["MenuItemDeobfuscatorAPI"],
patches: [{
find: "open-native-link",
replacement: {

View File

@ -24,7 +24,7 @@ export default definePlugin({
name: "SpotifyControls",
description: "Spotify Controls",
authors: [Devs.Ven, Devs.afn, Devs.KraXen72],
dependencies: ["MenuItemDeobfuscatorApi"],
dependencies: ["MenuItemDeobfuscatorAPI"],
patches: [
{
find: "showTaglessAccountPanel:",

View File

@ -16,13 +16,15 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { migratePluginSettings } from "../api/settings";
import { Devs } from "../utils/constants";
import definePlugin, { OptionType } from "../utils/types";
import { Settings } from "../Vencord";
migratePluginSettings("SpotifyCrack", "Ify");
export default definePlugin({
name: "Ify",
description: "Disables Spotify auto-pausing, allows activity to continue playing when idling and bypasses premium checks, allowing you to listen along with others.",
name: "SpotifyCrack",
description: "Free listen along, no auto-pausing in voice chat, and allows activity to continue playing when idling",
authors: [
Devs.Cyn,
Devs.Nuckyz
@ -36,14 +38,14 @@ export default definePlugin({
}],
}, {
find: '.displayName="SpotifyStore"',
predicate: () => Settings.plugins.Ify.noSpotifyAutoPause,
predicate: () => Settings.plugins.SpotifyCrack.noSpotifyAutoPause,
replacement: {
match: /function (.{1,2})\(\).{0,200}SPOTIFY_AUTO_PAUSED\);.{0,}}}}/,
replace: "function $1(){}"
}
}, {
find: '.displayName="SpotifyStore"',
predicate: () => Settings.plugins.Ify.keepSpotifyActivityOnIdle,
predicate: () => Settings.plugins.SpotifyCrack.keepSpotifyActivityOnIdle,
replacement: {
match: /(shouldShowActivity=function\(\){.{1,50})&&!.{1,6}\.isIdle\(\)(.{0,}?})/,
replace: (_, functionDeclarationAndExpression, restOfFunction) => `${functionDeclarationAndExpression}${restOfFunction}`

View File

@ -17,6 +17,7 @@
*/
import { ApplicationCommandInputType, sendBotMessage } from "../api/Commands";
import { migratePluginSettings } from "../api/settings";
import { Devs } from "../utils/constants";
import { lazyWebpack } from "../utils/misc";
import definePlugin from "../utils/types";
@ -74,9 +75,10 @@ function sendMessage(channelId, message) {
});
}
migratePluginSettings("SpotifyShareCommands", "Sendify");
export default definePlugin({
name: "Sendify",
description: "Send your current Spotify music to chat",
name: "SpotifyShareCommands",
description: "Share your current Spotify track, album or artist via slash command (/track, /album, /artist)",
authors: [Devs.katlyn],
dependencies: ["CommandsAPI"],
commands: [

View File

@ -16,6 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { migratePluginSettings } from "../api/settings";
import { Devs } from "../utils/constants";
import definePlugin from "../utils/types";
import { SelectedChannelStore } from "../webpack/common";
@ -25,9 +26,10 @@ const timers = {} as Record<string, {
i: number;
}>;
migratePluginSettings("VoiceChatDoubleClick", "vcDoubleClick");
export default definePlugin({
name: "vcDoubleClick",
description: "Join VCs via DoubleClick instead of single click",
name: "VoiceChatDoubleClick",
description: "Join voice chats via double click instead of single click",
authors: [Devs.Ven, Devs.D3SOX],
patches: [
{
@ -40,12 +42,12 @@ export default definePlugin({
// voice channels
{
match: /onClick:(.*)function\(\)\{(e\.handleClick.+?)}/g,
replace: "onClick:$1function(){Vencord.Plugins.plugins.vcDoubleClick.schedule(()=>{$2}, e)}",
replace: "onClick:$1function(){Vencord.Plugins.plugins.VoiceChatDoubleClick.schedule(()=>{$2}, e)}",
},
// stage channels
{
match: /onClick:(.{0,15})this\.handleClick,/g,
replace: "onClick:$1(...args)=>Vencord.Plugins.plugins.vcDoubleClick.schedule(()=>{this.handleClick(...args);}, args[0]),",
replace: "onClick:$1(...args)=>Vencord.Plugins.plugins.VoiceChatDoubleClick.schedule(()=>{this.handleClick(...args);}, args[0]),",
}
],
},

View File

@ -36,7 +36,7 @@ export default new class ViewIcons implements PluginDef {
authors = [Devs.Ven];
description = "Makes Avatars/Banners in user profiles clickable, and adds Guild Context Menu Entries to View Banner/Icon.";
dependencies = ["MenuItemDeobfuscatorApi"];
dependencies = ["MenuItemDeobfuscatorAPI"];
openImage(url: string) {
const u = new URL(url);

View File

@ -216,10 +216,10 @@ interface Menu {
/**
* Discord's Context menu items.
* To use anything but Menu.ContextMenu, your plugin HAS TO
* depend on MenuItemDeobfuscatorApi. Otherwise they will throw
* depend on MenuItemDeobfuscatorAPI. Otherwise they will throw
*/
export const Menu = proxyLazy(() => {
const hasDeobfuscator = Vencord.Settings.plugins.MenuItemDeobfuscatorApi.enabled;
const hasDeobfuscator = Vencord.Settings.plugins.MenuItemDeobfuscatorAPI.enabled;
const menuItems = ["MenuSeparator", "MenuGroup", "MenuItem", "MenuCheckboxItem", "MenuRadioItem", "MenuControlItem"];
const map = mapMangledModule("♫ ⊂(。◕‿‿◕。⊂) ♪", {