From a3311c6c84dc528e45f3993fa880b22cd67457ae Mon Sep 17 00:00:00 2001 From: Error-Cezar Date: Mon, 15 Dec 2025 15:29:14 +0000 Subject: [PATCH] Re-formated client detection (#562) * Reformated client detection * no more export * formatting --------- Co-authored-by: thororen1234 <78185467+thororen1234@users.noreply.github.com> --- .../components/FormatSetting.tsx | 13 +-- .../discordDevBanner/components/consts.ts | 30 +++---- .../discordDevBanner/components/icons.tsx | 84 +++++++++++++++++++ .../discordDevBanner/components/index.tsx | 1 + .../components/makeDevBanner.tsx | 16 ++-- .../discordDevBanner/icons/ChromiumIcon.tsx | 22 ----- .../discordDevBanner/icons/DevBannerIcon.tsx | 19 ----- .../discordDevBanner/icons/DiscordIcon.tsx | 19 ----- .../discordDevBanner/icons/ElectronIcon.tsx | 18 ---- .../discordDevBanner/icons/EquicordIcon.tsx | 21 ----- .../discordDevBanner/icons/index.tsx | 11 --- src/globals.d.ts | 1 + src/plugins/_core/supportHelper.tsx | 75 +++++++++++++---- src/plugins/betterGifPicker/index.ts | 12 +-- 14 files changed, 173 insertions(+), 169 deletions(-) create mode 100644 src/equicordplugins/discordDevBanner/components/icons.tsx delete mode 100644 src/equicordplugins/discordDevBanner/icons/ChromiumIcon.tsx delete mode 100644 src/equicordplugins/discordDevBanner/icons/DevBannerIcon.tsx delete mode 100644 src/equicordplugins/discordDevBanner/icons/DiscordIcon.tsx delete mode 100644 src/equicordplugins/discordDevBanner/icons/ElectronIcon.tsx delete mode 100644 src/equicordplugins/discordDevBanner/icons/EquicordIcon.tsx delete mode 100644 src/equicordplugins/discordDevBanner/icons/index.tsx diff --git a/src/equicordplugins/discordDevBanner/components/FormatSetting.tsx b/src/equicordplugins/discordDevBanner/components/FormatSetting.tsx index 1b739be1d..0b411e8ea 100644 --- a/src/equicordplugins/discordDevBanner/components/FormatSetting.tsx +++ b/src/equicordplugins/discordDevBanner/components/FormatSetting.tsx @@ -7,7 +7,7 @@ import { Paragraph } from "@components/Paragraph"; import { useState } from "@webpack/common"; -import { chromiumVariables, discordVariables, electronVariables, equicordVariables, makeDevBanner, miscVariables, settings } from "."; +import { makeDevBanner, settings, settingVariables } from "."; export function FormatSetting(setValue) { @@ -32,16 +32,7 @@ export function FormatSetting(setValue) { The format for the Discord Dev Banner. You can use the following variables: {"\n\n"} - {discordVariables.join("\n")} - {"\n\n"} - {equicordVariables.join("\n")} - {"\n\n"} - {electronVariables.join("\n")} - {"\n\n"} - {chromiumVariables.join("\n")} - {"\n\n"} - {miscVariables.join("\n")} - {"\n\n"} + {settingVariables.join("\n")} Preview: diff --git a/src/equicordplugins/discordDevBanner/components/consts.ts b/src/equicordplugins/discordDevBanner/components/consts.ts index ecc4714b6..97228cb23 100644 --- a/src/equicordplugins/discordDevBanner/components/consts.ts +++ b/src/equicordplugins/discordDevBanner/components/consts.ts @@ -25,7 +25,7 @@ export const names: Record = { staging: "Staging" }; -export const discordVariables = [ +export const settingVariables = [ "Discord Variables:", "{discordIcon} - Discord icon", "{devbannerIcon} - Dev banner icon", @@ -33,32 +33,34 @@ export const discordVariables = [ "{buildChannel} - Discord build channel (e.g. Stable)", "{buildNumber} - Discord build number (e.g. 123456)", "{buildHash} - Discord build hash (e.g. 123456789)", -]; - -export const equicordVariables = [ + "", "Equicord Variables:", "{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)", -]; - -export const electronVariables = [ + "", + "Equibop Specific Variables:", + "{equibopHash} - Equibop build hash (e.g. 123456789)", + "{equibopPlatform} - Platform Equibop is running on (e.g. Dev)", + "", + "Client Variables:", + "{clientIcon} - Desktop icon", + "{clientName} - The name of your current client", + "{clientVersion} - Version of your client (e.g. 1.0.0)", + "", "Electron Variables:", "{electronIcon} - Electron icon", "{electronName} - The word 'Electron'", "{electronVersion} - Electron runtime version (e.g. 25.0.0)", -]; - -export const chromiumVariables = [ + "", "Chromium Variables:", "{chromiumIcon} - Chromium icon", "{chromiumName} - The word 'Chromium'", "{chromiumVersion} - Chromium engine version (e.g. 125.0.0.0)", -]; - -export const miscVariables = [ + "", "Miscellaneous Variables:", - "{newline} or \\n - Newline character" + "{newline} or \\n - Newline character", + "", ]; diff --git a/src/equicordplugins/discordDevBanner/components/icons.tsx b/src/equicordplugins/discordDevBanner/components/icons.tsx new file mode 100644 index 000000000..d19cbb665 --- /dev/null +++ b/src/equicordplugins/discordDevBanner/components/icons.tsx @@ -0,0 +1,84 @@ +/* + * 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 ChromiumIcon = (props: React.PropsWithChildren>) => ( + + + + + + +); + +export const ClientIcon = (props: React.PropsWithChildren>) => ( + + + +); + + +export const DevBannerIcon = (props: React.PropsWithChildren>) => ( + + + +); + +export const DiscordIcon = (props: React.PropsWithChildren>) => ( + + + +); + +export const ElectronIcon = (props: React.PropsWithChildren>) => ( + + +); + +export const EquicordIcon = (props: React.PropsWithChildren>) => ( + + + + + +); diff --git a/src/equicordplugins/discordDevBanner/components/index.tsx b/src/equicordplugins/discordDevBanner/components/index.tsx index 0276a5bc9..15539b6cc 100644 --- a/src/equicordplugins/discordDevBanner/components/index.tsx +++ b/src/equicordplugins/discordDevBanner/components/index.tsx @@ -6,4 +6,5 @@ export * from "./consts"; export * from "./FormatSetting"; +export * from "./icons"; export * from "./makeDevBanner"; diff --git a/src/equicordplugins/discordDevBanner/components/makeDevBanner.tsx b/src/equicordplugins/discordDevBanner/components/makeDevBanner.tsx index 69592cbde..3d26b164b 100644 --- a/src/equicordplugins/discordDevBanner/components/makeDevBanner.tsx +++ b/src/equicordplugins/discordDevBanner/components/makeDevBanner.tsx @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import { ChromiumIcon, DevBannerIcon, DiscordIcon, ElectronIcon, EquicordIcon } from "@equicordplugins/discordDevBanner/icons"; +import { detectClient } from "@plugins/_core/supportHelper"; import { gitHashShort } from "@shared/vencordUserAgent"; import { React } from "@webpack/common"; import SettingsPlugin from "plugins/_core/settings"; import { JSX } from "react"; -import { names, settings } from "."; +import { ChromiumIcon, ClientIcon, DevBannerIcon, DiscordIcon, ElectronIcon, EquicordIcon, names, settings } from "."; export function makeDevBanner(state?: string): string | JSX.Element { const { RELEASE_CHANNEL, BUILD_NUMBER, VERSION_HASH } = window.GLOBAL_ENV; @@ -19,19 +19,21 @@ export function makeDevBanner(state?: string): string | JSX.Element { const format = settings.store.format ?? "{devbannerIcon} {buildChannel} {buildNumber} ({buildHash}) | {equicordIcon} {equicordName} {equicordVersion} ({equicordHash})"; const baseFormat = state ?? format; + const clientInfo = detectClient(); + const replaced = baseFormat - .replace(/{discordName}/g, "Discord") .replace(/{buildChannel}/g, buildChannel) .replace(/{buildNumber}/g, BUILD_NUMBER) .replace(/{buildHash}/g, VERSION_HASH.slice(0, 9)) - .replace(/{equicordName}/g, "Equicord") .replace(/{equicordVersion}/g, VERSION) .replace(/{equicordHash}/g, gitHashShort) .replace(/{equicordPlatform}/g, getVersionInfo(false)) - .replace(/{electronName}/g, "Electron") .replace(/{electronVersion}/g, electronVersion) - .replace(/{chromiumName}/g, "Chromium") .replace(/{chromiumVersion}/g, chromiumVersion) + .replace(/{clientName}/g, clientInfo.name) + .replace(/{clientVersion}/g, `v${clientInfo?.version ?? "0.0.0"}`) + .replace(/{equibopHash}/g, clientInfo.shortHash ?? "Not Supported") + .replace(/{equibopPlatform}/g, `v${clientInfo?.dev ? "DevBuild" : "Standalone"}`) .replace(/\\n|{newline}/g, "__NEWLINE__"); if (!replaced.includes("__NEWLINE__") && !/{.*Icon}/.test(baseFormat)) { @@ -50,6 +52,8 @@ export function makeDevBanner(state?: string): string | JSX.Element { return ; case "{devbannerIcon}": return ; + case "{clientIcon}": + return ; case "__NEWLINE__": return
; default: diff --git a/src/equicordplugins/discordDevBanner/icons/ChromiumIcon.tsx b/src/equicordplugins/discordDevBanner/icons/ChromiumIcon.tsx deleted file mode 100644 index 03f24abd7..000000000 --- a/src/equicordplugins/discordDevBanner/icons/ChromiumIcon.tsx +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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 ChromiumIcon = (props: React.PropsWithChildren>) => ( - - - - - - -); diff --git a/src/equicordplugins/discordDevBanner/icons/DevBannerIcon.tsx b/src/equicordplugins/discordDevBanner/icons/DevBannerIcon.tsx deleted file mode 100644 index adeaf2053..000000000 --- a/src/equicordplugins/discordDevBanner/icons/DevBannerIcon.tsx +++ /dev/null @@ -1,19 +0,0 @@ -/* - * 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 DevBannerIcon = (props: React.PropsWithChildren>) => ( - - - -); diff --git a/src/equicordplugins/discordDevBanner/icons/DiscordIcon.tsx b/src/equicordplugins/discordDevBanner/icons/DiscordIcon.tsx deleted file mode 100644 index 9f7954f80..000000000 --- a/src/equicordplugins/discordDevBanner/icons/DiscordIcon.tsx +++ /dev/null @@ -1,19 +0,0 @@ -/* - * 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>) => ( - - - -); diff --git a/src/equicordplugins/discordDevBanner/icons/ElectronIcon.tsx b/src/equicordplugins/discordDevBanner/icons/ElectronIcon.tsx deleted file mode 100644 index a78877043..000000000 --- a/src/equicordplugins/discordDevBanner/icons/ElectronIcon.tsx +++ /dev/null @@ -1,18 +0,0 @@ -/* - * 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 ElectronIcon = (props: React.PropsWithChildren>) => ( - - -); diff --git a/src/equicordplugins/discordDevBanner/icons/EquicordIcon.tsx b/src/equicordplugins/discordDevBanner/icons/EquicordIcon.tsx deleted file mode 100644 index 5dd04fdba..000000000 --- a/src/equicordplugins/discordDevBanner/icons/EquicordIcon.tsx +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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 EquicordIcon = (props: React.PropsWithChildren>) => ( - - - - - -); diff --git a/src/equicordplugins/discordDevBanner/icons/index.tsx b/src/equicordplugins/discordDevBanner/icons/index.tsx deleted file mode 100644 index 0f553cb25..000000000 --- a/src/equicordplugins/discordDevBanner/icons/index.tsx +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Vencord, a Discord client mod - * Copyright (c) 2025 Vendicated and contributors - * SPDX-License-Identifier: GPL-3.0-or-later - */ - -export * from "../icons/ChromiumIcon"; -export * from "../icons/DevBannerIcon"; -export * from "../icons/DiscordIcon"; -export * from "../icons/ElectronIcon"; -export * from "../icons/EquicordIcon"; diff --git a/src/globals.d.ts b/src/globals.d.ts index b4b127a45..193e8a7e3 100644 --- a/src/globals.d.ts +++ b/src/globals.d.ts @@ -63,6 +63,7 @@ declare global { export var Vesktop: any; export var Equibop: any; export var VesktopNative: any; + export var unsafeWindow: any; interface Window extends Record { } } diff --git a/src/plugins/_core/supportHelper.tsx b/src/plugins/_core/supportHelper.tsx index 4dc6e2dfe..b6ae7a9e0 100644 --- a/src/plugins/_core/supportHelper.tsx +++ b/src/plugins/_core/supportHelper.tsx @@ -64,6 +64,16 @@ const AsyncFunction = async function () { }.constructor; const ShowCurrentGame = getUserSettingLazy("status", "showCurrentGame")!; const ShowEmbeds = getUserSettingLazy("textAndImages", "renderEmbeds")!; +interface clientData { + name: string; + version?: string | null | undefined; + info?: string | boolean | null | undefined; + spoofed?: string | null | undefined; + shortHash?: string | null | undefined; + hash?: string | null | undefined; + dev?: boolean | null | undefined; +} + async function forceUpdate() { const outdated = await checkForUpdates(); if (outdated) { @@ -74,26 +84,55 @@ async function forceUpdate() { return outdated; } +export function detectClient(): clientData { + if (IS_DISCORD_DESKTOP) { + return { + name: "Discord", + version: DiscordNative.app.getVersion(), + }; + } + if (IS_VESKTOP) return { + name: "Vesktop", + version: VesktopNative.app.getVersion(), + }; + + if (IS_EQUIBOP) { + const equibopGitHash = tryOrElse(() => VesktopNative.app.getGitHash?.(), null); + const spoofInfo = tryOrElse(() => VesktopNative.app.getPlatformSpoofInfo?.(), null); + const isDevBuild = tryOrElse(() => VesktopNative.app.isDevBuild?.(), false); + const shortHash = equibopGitHash?.slice(0, 7); + return { + name: "Equibop", + version: VesktopNative.app.getVersion(), + spoofed: spoofInfo?.spoofed ? `${platformName()} (spoofed from ${spoofInfo.originalPlatform})` : null, + dev: isDevBuild, + shortHash: shortHash, + hash: equibopGitHash, + }; + } + + if ("legcord" in window) return { + name: "LegCord", + version: window.legcord.version, + }; + + if ("goofcord" in window) return { + name: "GoofCord", + version: window.goofcord.version, + }; + + const name = typeof unsafeWindow !== "undefined" ? "UserScript" : "Web"; + return { + name: name, + info: navigator.userAgent + }; +} + async function generateDebugInfoMessage() { const { RELEASE_CHANNEL } = window.GLOBAL_ENV; - const client = (() => { - if (IS_DISCORD_DESKTOP) return `Discord Desktop v${DiscordNative.app.getVersion()}`; - if (IS_VESKTOP) return `Vesktop v${VesktopNative.app.getVersion()}`; - if (IS_EQUIBOP) { - const equibopGitHash = tryOrElse(() => VesktopNative.app.getGitHash?.(), null); - if (equibopGitHash) { - const shortHash = equibopGitHash.slice(0, 7); - return `Equibop v${VesktopNative.app.getVersion()} • [${shortHash}]()`; - } - return `Equibop v${VesktopNative.app.getVersion()}`; - } - if ("legcord" in window) return `LegCord v${window.legcord.version}`; - - // @ts-expect-error - const name = typeof unsafeWindow !== "undefined" ? "UserScript" : "Web"; - return `${name} (${navigator.userAgent})`; - })(); + const clientInfo = detectClient(); + const clientString = `${clientInfo.name} ${clientInfo.version ? "" : `v${clientInfo.version}`} ${clientInfo.info ? "" : `• ${clientInfo.info}`}`; const spoofInfo = IS_EQUIBOP ? tryOrElse(() => VesktopNative.app.getPlatformSpoofInfo?.(), null) : null; const platformDisplay = spoofInfo?.spoofed @@ -104,7 +143,7 @@ async function generateDebugInfoMessage() { Equicord: `v${VERSION} • [${gitHashShort}]()` + `${IS_EQUIBOP ? "" : SettingsPlugin.getVersionInfo()} - ${Intl.DateTimeFormat("en-US", { dateStyle: "medium" }).format(BUILD_TIMESTAMP)}`, - Client: `${RELEASE_CHANNEL} ~ ${client}`, + Client: `${RELEASE_CHANNEL} ~ ${clientString}`, Platform: platformDisplay }; diff --git a/src/plugins/betterGifPicker/index.ts b/src/plugins/betterGifPicker/index.ts index 184664b5a..99ad9071c 100644 --- a/src/plugins/betterGifPicker/index.ts +++ b/src/plugins/betterGifPicker/index.ts @@ -6,7 +6,7 @@ import { definePluginSettings } from "@api/Settings"; import { Devs, EquicordDevs } from "@utils/constants"; -import definePlugin, { makeRange, OptionType } from "@utils/types"; +import definePlugin, { OptionType } from "@utils/types"; let closeSuppressCount = 0; const settings = definePluginSettings({ @@ -15,13 +15,6 @@ const settings = definePluginSettings({ type: OptionType.BOOLEAN, default: false }, - gifAmount: { - description: "Keeps the gif picker open after selecting a gif", - type: OptionType.SLIDER, - default: 2, - markers: makeRange(1, 20, 1), - stickToMarkers: true - } }); export default definePlugin({ @@ -67,8 +60,7 @@ export default definePlugin({ onGifSelect() { if (!settings.store.keepOpen) return; - - closeSuppressCount = settings.store.gifAmount; + closeSuppressCount = 2; }, consumeCloseSuppress() {