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() {