From f969d80dc3da915080a8e8190e575ee8c9841a07 Mon Sep 17 00:00:00 2001 From: Lillith Date: Fri, 28 Jun 2024 17:57:28 -0400 Subject: [PATCH] feat(plugin): DefaultStatusForever --- src/plugins/defaultStatusForever/README.md | 5 +++ src/plugins/defaultStatusForever/index.tsx | 48 ++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/plugins/defaultStatusForever/README.md create mode 100644 src/plugins/defaultStatusForever/index.tsx diff --git a/src/plugins/defaultStatusForever/README.md b/src/plugins/defaultStatusForever/README.md new file mode 100644 index 000000000..89b2bcdc0 --- /dev/null +++ b/src/plugins/defaultStatusForever/README.md @@ -0,0 +1,5 @@ +# DefaultStatusForever + +Makes the custom status screen default to "Don't Clear" as the duration + +![The custom status screen, with "Don't Clear" selected and as the first option](https://github.com/Vendicated/Vencord/assets/44179559/e8cf0ca1-589c-43ef-9a6d-4fa3ed03a1f9) diff --git a/src/plugins/defaultStatusForever/index.tsx b/src/plugins/defaultStatusForever/index.tsx new file mode 100644 index 000000000..27a7752b4 --- /dev/null +++ b/src/plugins/defaultStatusForever/index.tsx @@ -0,0 +1,48 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2024 Vendicated and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { Devs } from "@utils/constants"; +import definePlugin from "@utils/types"; + +interface Choice { + key: number; + value: any; + label: string; +} + +export default definePlugin({ + name: "DefaultStatusForever", + description: "Make statuses default to last forever", + authors: [Devs.ImLvna], + + patches: [ + { + // hardcode default status duration to null + find: "this.clearAfterOptions", + replacement: { + match: /(?<=value:)\i(?=,options:this.clearAfterOptions)/, + replace: "null" + } + }, + { + // reorder the list to put "Dont't Clear" at the top + find: "get clearAfterOptions", + replacement: { + match: /(?<=get clearAfterOptions\(\){return).*?}]/, + replace: " $self.patchChoices($&)" + } + } + ], + + patchChoices(choices: Choice[]) { + const nullChoice = choices.find(choice => choice.value === null); + if (nullChoice) { + choices.splice(choices.indexOf(nullChoice), 1); + choices.unshift(nullChoice); + } + return choices; + } +});