From 1e34d429ad3987000b3b9a09d226e4afa2f01142 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Sun, 3 Aug 2025 21:30:59 -0400 Subject: [PATCH] DiscordDevBanner: More Settings --- .../discordDevBanner/components/index.tsx | 71 +++++++++++++++++++ .../discordDevBanner/index.tsx | 48 ++++++++++--- .../discordDevBanner/settings.tsx | 30 ++++++-- .../discordDevBanner/styles.css | 21 ++++++ 4 files changed, 156 insertions(+), 14 deletions(-) create mode 100644 src/equicordplugins/discordDevBanner/components/index.tsx diff --git a/src/equicordplugins/discordDevBanner/components/index.tsx b/src/equicordplugins/discordDevBanner/components/index.tsx new file mode 100644 index 000000000..b66cc4ae8 --- /dev/null +++ b/src/equicordplugins/discordDevBanner/components/index.tsx @@ -0,0 +1,71 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2025 Vendicated and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { SVGProps } from "react"; + +export const DiscordIcon = (props: React.PropsWithChildren>) => ( + + + +); + +export const EquicordIcon = (props: React.PropsWithChildren>) => ( + + + + + +); + +export const ElectronIcon = (props: React.PropsWithChildren>) => ( + + +); + +export const ChromeIcon = (props: React.PropsWithChildren>) => ( + + + + + + +); + +export const DevBannerIcon = (props: React.PropsWithChildren>) => ( + + + +); diff --git a/src/equicordplugins/discordDevBanner/index.tsx b/src/equicordplugins/discordDevBanner/index.tsx index 71c028dae..84259b98a 100644 --- a/src/equicordplugins/discordDevBanner/index.tsx +++ b/src/equicordplugins/discordDevBanner/index.tsx @@ -8,10 +8,13 @@ import "./styles.css"; import { EquicordDevs } from "@utils/constants"; import definePlugin from "@utils/types"; +import { React } from "@webpack/common"; import SettingsPlugin from "plugins/_core/settings"; +import { JSX } from "react"; import gitHash from "~git-hash"; +import { ChromeIcon, DevBannerIcon, DiscordIcon, ElectronIcon, EquicordIcon } from "./components"; import { settings } from "./settings"; function getVersion(): string { @@ -23,15 +26,16 @@ function getVersion(): string { return ""; } -export function transform(state?: string): string { +export function transform(state?: string): string | JSX.Element { const { RELEASE_CHANNEL, BUILD_NUMBER, VERSION_HASH } = window.GLOBAL_ENV; - const buildChannel: string = names[RELEASE_CHANNEL] || RELEASE_CHANNEL.charAt(0).toUpperCase() + RELEASE_CHANNEL.slice(1); - const { chromiumVersion, electronVersion, } = SettingsPlugin; - const format = settings.store.format ?? "{buildChannel} {buildNumber} ({buildHash}) | {equicordName} {equicordVersion} ({equicordHash})"; + const buildChannel = names[RELEASE_CHANNEL] || RELEASE_CHANNEL.charAt(0).toUpperCase() + RELEASE_CHANNEL.slice(1); + const { chromiumVersion, electronVersion } = SettingsPlugin; + const format = + settings.store.format ?? + "{devBannerIcon} {buildChannel} {buildNumber} ({buildHash}) | {equicordIcon} {equicordName} {equicordVersion} ({equicordHash})"; const baseFormat = state ?? format; - const formatted = baseFormat - .replace(/{discordName}/g, "Discord") + const replaced = baseFormat .replace(/{buildChannel}/g, buildChannel) .replace(/{buildNumber}/g, BUILD_NUMBER) .replace(/{buildHash}/g, VERSION_HASH.slice(0, 9)) @@ -42,9 +46,33 @@ export function transform(state?: string): string { .replace(/{electronName}/g, "Electron") .replace(/{electronVersion}/g, electronVersion) .replace(/{chromiumName}/g, "Chromium") - .replace(/{chromiumVersion}/g, chromiumVersion); + .replace(/{chromiumVersion}/g, chromiumVersion) + .replace(/\\n|{newline}/g, "__NEWLINE__"); - return formatted; + if (!replaced.includes("__NEWLINE__") && !/{.*Icon}/.test(baseFormat)) { + return replaced; + } + + const parts = replaced.split(/({.*?}|__NEWLINE__)/).filter(Boolean).map((part, i) => { + switch (part) { + case "{discordIcon}": + return ; + case "{equicordIcon}": + return ; + case "{electronIcon}": + return ; + case "{chromiumIcon}": + return ; + case "{devBannerIcon}": + return ; + case "__NEWLINE__": + return
; + default: + return {part}; + } + }); + + return
{parts}
; } const names: Record = { @@ -72,8 +100,8 @@ export default definePlugin({ replace: "$1null;" }, { - match: /\i\.\i\.format\(.{0,40}\)/, - replace: "$self.transform()" + match: /children:\[.*?\{\}\)\]/g, + replace: "children:$self.transform()" }, ] } diff --git a/src/equicordplugins/discordDevBanner/settings.tsx b/src/equicordplugins/discordDevBanner/settings.tsx index c14e3b4ff..86b3771fe 100644 --- a/src/equicordplugins/discordDevBanner/settings.tsx +++ b/src/equicordplugins/discordDevBanner/settings.tsx @@ -6,7 +6,7 @@ import { definePluginSettings } from "@api/Settings"; import { OptionType } from "@utils/types"; -import { Forms, TextInput, useState } from "@webpack/common"; +import { Forms, useState } from "@webpack/common"; import { transform } from "."; @@ -25,18 +25,24 @@ function FormatSetting(setValue) { const [error, setError] = useState(null); const placeholderInfo = [ + "{discordIcon} - Discord icon", "{discordName} - The word 'Discord'", "{buildChannel} - Discord build channel (e.g. Stable)", "{buildNumber} - Discord build number (e.g. 123456)", "{buildHash} - Discord build hash (e.g. 123456789)", + "{equicordIcon} - Equicord icon", "{equicordName} - The word 'Equicord'", "{equicordVersion} - Version of Equicord (e.g. 1.0.0)", "{equicordHash} - Equicord build hash (e.g. 123456789)", "{equicordPlatform} - Platform Equicord is running on (e.g. Dev)", + "{electronIcon} - Electron icon", "{electronName} - The word 'Electron'", "{electronVersion} - Electron runtime version (e.g. 25.0.0)", + "{chromiumIcon} - Chromium icon", "{chromiumName} - The word 'Chromium'", "{chromiumVersion} - Chromium engine version (e.g. 125.0.0.0)", + "{devBannerIcon} - Dev banner icon", + "{newline} or \\n - Newline character" ]; function handleChange(newValue) { @@ -61,13 +67,29 @@ function FormatSetting(setValue) { {"\n\n"} - Preview: {preview} - Preview: + {preview} +