From c9a486b2dc89fc1200aab0bf5e293020c230b2e0 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Mon, 2 Feb 2026 21:02:28 -0500 Subject: [PATCH 01/49] Revert "revert canary only patches" This reverts commit 833c0e6e156ca1fe2c807cdcb74bbb6ba5122e2f. --- src/equicordplugins/questify/index.tsx | 4 ++-- src/plugins/experiments/index.tsx | 4 ++-- src/plugins/platformIndicators/index.tsx | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/equicordplugins/questify/index.tsx b/src/equicordplugins/questify/index.tsx index 670ce92c9..459aa637c 100644 --- a/src/equicordplugins/questify/index.tsx +++ b/src/equicordplugins/questify/index.tsx @@ -1288,8 +1288,8 @@ export default definePlugin({ // Allows in-progress Quests to still show. find: "QUESTS_BAR,questId", replacement: { - match: /return null==(\i)\?null:\(/, - replace: "return !$self.shouldHideQuestPopup($1)&&" + match: /(?=if\(null==(\i)\)return null;)(.{0,125}?quest:\i}\);return)/, + replace: "const hidePopup=$self.shouldHideQuestPopup($1);$2!hidePopup&&" } }, { diff --git a/src/plugins/experiments/index.tsx b/src/plugins/experiments/index.tsx index 7e889c8f5..f336d855b 100644 --- a/src/plugins/experiments/index.tsx +++ b/src/plugins/experiments/index.tsx @@ -20,7 +20,7 @@ import { React } from "@webpack/common"; import hideBugReport from "./hideBugReport.css?managed"; const KbdStyles = findByPropsLazy("key", "combo"); -const BugReporterExperiment = findLazy(m => m?.definition?.id === "2024-09_bug_reporter"); +const BugReporterExperiment = findLazy(m => m?.definition?.name === "2026-01-bug-reporter"); const modKey = IS_MAC ? "cmd" : "ctrl"; const altKey = IS_MAC ? "opt" : "alt"; @@ -160,7 +160,7 @@ export default definePlugin({ return !!labelCleaned && urlEndCleaned !== undefined && labelCleaned === urlEndCleaned; }, - start: () => !BugReporterExperiment.getCurrentConfig().hasBugReporterAccess && enableStyle(hideBugReport), + start: () => !BugReporterExperiment.getConfig().hasBugReporterAccess && enableStyle(hideBugReport), stop: () => disableStyle(hideBugReport), settingsAboutComponent: () => { diff --git a/src/plugins/platformIndicators/index.tsx b/src/plugins/platformIndicators/index.tsx index 3923d1233..cfdbe09ac 100644 --- a/src/plugins/platformIndicators/index.tsx +++ b/src/plugins/platformIndicators/index.tsx @@ -261,8 +261,8 @@ export default definePlugin({ }, { // Fix sizes for mobile indicators which aren't online - match: /(?<=\(\i\.status,)(\i)(?=,(\i),\i\))/, - replace: (_, userStatus, isMobile) => `${isMobile}?"online":${userStatus}` + match: /(?<=\(\i\.status,)(\i)(?=,\{.{0,15}isMobile:(\i))/, + replace: '$2?"online":$1' }, { // Make isMobile true no matter the status From 0f76d104a81b1fec7afbe3b6fe7de7a60364ca6d Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Tue, 3 Feb 2026 10:50:58 -0500 Subject: [PATCH 02/49] BetterInvites: Fix --- src/equicordplugins/betterInvites/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/equicordplugins/betterInvites/index.tsx b/src/equicordplugins/betterInvites/index.tsx index a33463dac..550e4fd25 100644 --- a/src/equicordplugins/betterInvites/index.tsx +++ b/src/equicordplugins/betterInvites/index.tsx @@ -33,7 +33,7 @@ function lurk(id: string) { export default definePlugin({ name: "BetterInvites", - description: "See invites expiration date, view inviter profile and preview discoverable servers before joining by clicking their name", + description: "See invites expiration date, view inviter profile and preview servers before joining by clicking the name", authors: [EquicordDevs.iamme, Devs.thororen], patches: [ { From 8c367d45f4a4f9f554a9632c3ec2643e3d59ce78 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Tue, 3 Feb 2026 10:55:42 -0500 Subject: [PATCH 03/49] ProfileSets --- .../profileSets/utils/profile.ts | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/src/equicordplugins/profileSets/utils/profile.ts b/src/equicordplugins/profileSets/utils/profile.ts index 765334b53..7579b610a 100644 --- a/src/equicordplugins/profileSets/utils/profile.ts +++ b/src/equicordplugins/profileSets/utils/profile.ts @@ -168,68 +168,78 @@ export async function getCurrentProfile(guildId?: string): Promise Date: Tue, 3 Feb 2026 14:14:24 -0500 Subject: [PATCH 04/49] Update profile.ts --- src/equicordplugins/profileSets/utils/profile.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/equicordplugins/profileSets/utils/profile.ts b/src/equicordplugins/profileSets/utils/profile.ts index 7579b610a..ecd9f6e54 100644 --- a/src/equicordplugins/profileSets/utils/profile.ts +++ b/src/equicordplugins/profileSets/utils/profile.ts @@ -170,7 +170,6 @@ export async function getCurrentProfile(guildId?: string): Promise Date: Tue, 3 Feb 2026 20:29:11 -0500 Subject: [PATCH 05/49] OnePingPerDM Shorter Desc --- src/plugins/onePingPerDM/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/onePingPerDM/index.ts b/src/plugins/onePingPerDM/index.ts index dfc0a3bf9..05dba7e80 100644 --- a/src/plugins/onePingPerDM/index.ts +++ b/src/plugins/onePingPerDM/index.ts @@ -47,7 +47,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "OnePingPerDM", - description: "If unread messages are sent by a user in DMs multiple times, you'll only receive one audio ping. Read the messages to reset the limit", + description: "If unread messages are sent by a user in DMs multiple times, you'll only receive one audio ping.", authors: [Devs.ProffDea], isModified: true, settings, From b2b4031702ae8ecb060b4b4c80fcfd3ccb2b4d30 Mon Sep 17 00:00:00 2001 From: Key Date: Wed, 4 Feb 2026 17:11:07 +0000 Subject: [PATCH 06/49] fix(MessageClickActions): deferDoubleClickForTriple (#724) --- src/plugins/messageClickActions/index.ts | 28 ++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/plugins/messageClickActions/index.ts b/src/plugins/messageClickActions/index.ts index a016b25d1..b75c44ef0 100644 --- a/src/plugins/messageClickActions/index.ts +++ b/src/plugins/messageClickActions/index.ts @@ -200,6 +200,11 @@ const settings = definePluginSettings({ markers: makeRange(50, 500, 50), default: 150 }, + deferDoubleClickForTriple: { + type: OptionType.BOOLEAN, + description: "Delay double-click to allow triple-click actions (disables triple-click when off)", + default: true + }, selectionHoldTimeout: { type: OptionType.NUMBER, description: "Timeout to allow text selection (ms)", @@ -538,6 +543,12 @@ export default definePlugin({ } if (isTripleClick) { + if (!settings.store.deferDoubleClickForTriple) { + mouseDownCount = 0; + doubleClickDetected = false; + secondMouseDownTime = 0; + return; + } if (doubleClickTimeout) { clearTimeout(doubleClickTimeout); doubleClickTimeout = null; @@ -556,7 +567,14 @@ export default definePlugin({ } const canDoubleClick = (isModifierPressed(doubleClickModifier) || doubleClickModifier === "NONE") && doubleClickAction !== "NONE"; - const canTripleClick = isModifierPressed(tripleClickModifier) && tripleClickAction !== "NONE"; + const canTripleClick = + settings.store.deferDoubleClickForTriple && + isModifierPressed(tripleClickModifier) && + tripleClickAction !== "NONE"; + const shouldDeferDoubleClick = + canDoubleClick && + canTripleClick && + doubleClickModifier === tripleClickModifier; if (isDoubleClick) { doubleClickFired = true; @@ -576,7 +594,7 @@ export default definePlugin({ } }; - if (canTripleClick && canDoubleClick) { + if (shouldDeferDoubleClick) { if (doubleClickTimeout) { clearTimeout(doubleClickTimeout); } @@ -613,8 +631,10 @@ export default definePlugin({ secondMouseDownTime = 0; }; - const hasDoubleClickAction = settings.store.doubleClickAction !== "NONE" || settings.store.doubleClickOthersAction !== "NONE"; - if (hasDoubleClickAction && singleClickModifier === "NONE") { + const canDoubleClickWithCurrentModifier = + doubleClickAction !== "NONE" && + (doubleClickModifier === "NONE" || isModifierPressed(doubleClickModifier)); + if (canDoubleClickWithCurrentModifier && singleClickModifier === "NONE") { singleClickTimeout = setTimeout(() => { executeSingleClick(); singleClickTimeout = null; From 12b3331dfc04afc96abd148b48ca742656dda312 Mon Sep 17 00:00:00 2001 From: Jake <134332787+justjxke@users.noreply.github.com> Date: Wed, 4 Feb 2026 17:11:48 +0000 Subject: [PATCH 07/49] add/cleanChannelGroups (#723) * Add cleanChannelGroups * update patches --------- Co-authored-by: thororen1234 <78185467+thororen1234@users.noreply.github.com> --- .../cleanerChannelGroups/index.ts | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/equicordplugins/cleanerChannelGroups/index.ts diff --git a/src/equicordplugins/cleanerChannelGroups/index.ts b/src/equicordplugins/cleanerChannelGroups/index.ts new file mode 100644 index 000000000..73f5ba4ce --- /dev/null +++ b/src/equicordplugins/cleanerChannelGroups/index.ts @@ -0,0 +1,29 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2026 Vendicated and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { EquicordDevs } from "@utils/constants"; +import definePlugin from "@utils/types"; + +export default definePlugin({ + name: "CleanerChannelGroups", + description: "Hides all channels in collapsed categories, even if they have unread messages.", + authors: [EquicordDevs.justjxke], + patches: [ + { + find: '"placeholder-channel-id"', + replacement: [ + { + match: /this\.category\.isCollapsed&&\(.{0,600}?\)\?\{renderLevel:3,threadIds:/, + replace: "this.category.isCollapsed?{renderLevel:3,threadIds:" + }, + { + match: /(?<=!this.category.isCollapsed.{0,50}\i=)(\i\(this\.record,.{0,5},\i\.hideMutedChannels\);)/, + replace: "this.category.isCollapsed?[]:$1" + } + ] + } + ] +}); From 1267b958baadbd5f69e200372833768636c63771 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Wed, 4 Feb 2026 14:16:50 -0500 Subject: [PATCH 08/49] Fix Prism Dev Const --- src/equicordplugins/_api/headerBar.ts | 4 ++-- src/equicordplugins/_api/userArea.ts | 4 ++-- src/equicordplugins/betterUserArea/index.ts | 4 ++-- src/equicordplugins/components.dev/index.tsx | 4 ++-- src/equicordplugins/elementHighlighter.dev/index.tsx | 4 ++-- src/equicordplugins/exitSounds/index.tsx | 4 ++-- .../quickThemeSwitcher.discordDesktop/index.tsx | 4 ++-- src/equicordplugins/quoter/index.tsx | 2 +- src/equicordplugins/scheduledMessages/index.tsx | 4 ++-- src/equicordplugins/showSongName/index.tsx | 4 ++-- src/equicordplugins/urlHighlighter/index.tsx | 4 ++-- src/plugins/showMeYourName/index.tsx | 2 +- src/plugins/voiceMessages/index.tsx | 2 +- 13 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/equicordplugins/_api/headerBar.ts b/src/equicordplugins/_api/headerBar.ts index 134a3b7aa..1660a6082 100644 --- a/src/equicordplugins/_api/headerBar.ts +++ b/src/equicordplugins/_api/headerBar.ts @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; export default definePlugin({ name: "HeaderBarAPI", description: "API to add buttons to the header bar and channel toolbar.", - authors: [EquicordDevs.prism], + authors: [Devs.prism], patches: [ { diff --git a/src/equicordplugins/_api/userArea.ts b/src/equicordplugins/_api/userArea.ts index 251b06243..c273015d4 100644 --- a/src/equicordplugins/_api/userArea.ts +++ b/src/equicordplugins/_api/userArea.ts @@ -6,7 +6,7 @@ import { isPluginEnabled } from "@api/PluginManager"; import betterUserArea from "@equicordplugins/betterUserArea"; -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; import { findCssClassesLazy } from "@webpack"; @@ -15,7 +15,7 @@ const { iconForeground } = findCssClassesLazy("iconForeground", "autocompleteRow export default definePlugin({ name: "UserAreaAPI", description: "API to add buttons to the user area panel.", - authors: [EquicordDevs.prism], + authors: [Devs.prism], patches: [ { diff --git a/src/equicordplugins/betterUserArea/index.ts b/src/equicordplugins/betterUserArea/index.ts index 22d36b745..fdde42738 100644 --- a/src/equicordplugins/betterUserArea/index.ts +++ b/src/equicordplugins/betterUserArea/index.ts @@ -5,7 +5,7 @@ */ import { definePluginSettings } from "@api/Settings"; -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; const settings = definePluginSettings({ @@ -50,7 +50,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "BetterUserArea", description: "Customize and make the user area more clean.", - authors: [EquicordDevs.prism], + authors: [Devs.prism], settings, patches: [ { diff --git a/src/equicordplugins/components.dev/index.tsx b/src/equicordplugins/components.dev/index.tsx index 78d6a3c4a..4506cb656 100644 --- a/src/equicordplugins/components.dev/index.tsx +++ b/src/equicordplugins/components.dev/index.tsx @@ -7,7 +7,7 @@ import "./styles.css"; import SettingsPlugin, { settingsSectionMap } from "@plugins/_core/settings"; -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin, { StartAt } from "@utils/types"; import { openUserSettingsPanel } from "@webpack/common"; @@ -40,7 +40,7 @@ function ComponentsIcon(props: React.SVGProps) { export default definePlugin({ name: "Components", description: "Adds a new tab to settings to browse Discord components.", - authors: [EquicordDevs.prism], + authors: [Devs.prism], dependencies: ["Settings"], startAt: StartAt.WebpackReady, toolboxActions: { diff --git a/src/equicordplugins/elementHighlighter.dev/index.tsx b/src/equicordplugins/elementHighlighter.dev/index.tsx index f5081c12a..edbda06bb 100644 --- a/src/equicordplugins/elementHighlighter.dev/index.tsx +++ b/src/equicordplugins/elementHighlighter.dev/index.tsx @@ -8,7 +8,7 @@ import "./styles.css"; import { definePluginSettings } from "@api/Settings"; import { Button } from "@components/Button"; -import { EquicordDevs, IS_MAC } from "@utils/constants"; +import { Devs, IS_MAC } from "@utils/constants"; import { classNameFactory } from "@utils/css"; import { copyWithToast } from "@utils/discord"; import definePlugin, { OptionType } from "@utils/types"; @@ -449,7 +449,7 @@ function onToggle(e: KeyboardEvent) { export default definePlugin({ name: "ElementHighlighter", description: "Highlight and inspect elements easily.", - authors: [EquicordDevs.prism], + authors: [Devs.prism], settings, start() { diff --git a/src/equicordplugins/exitSounds/index.tsx b/src/equicordplugins/exitSounds/index.tsx index 11052f304..3f161fbb6 100644 --- a/src/equicordplugins/exitSounds/index.tsx +++ b/src/equicordplugins/exitSounds/index.tsx @@ -10,7 +10,7 @@ import { playAudio } from "@api/AudioPlayer"; import { NavContextMenuPatchCallback } from "@api/ContextMenu"; import { definePluginSettings } from "@api/Settings"; import { Button } from "@components/Button"; -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import { classNameFactory } from "@utils/css"; import definePlugin, { OptionType } from "@utils/types"; import { findComponentByCodeLazy } from "@webpack"; @@ -104,7 +104,7 @@ let original: typeof ChannelActions.selectVoiceChannel; export default definePlugin({ name: "ExitSounds", description: "Play soundboard sounds when you disconnect from voice.", - authors: [EquicordDevs.prism], + authors: [Devs.prism], dependencies: ["AudioPlayerAPI"], settings, diff --git a/src/equicordplugins/quickThemeSwitcher.discordDesktop/index.tsx b/src/equicordplugins/quickThemeSwitcher.discordDesktop/index.tsx index 34d14ebc9..449e35239 100644 --- a/src/equicordplugins/quickThemeSwitcher.discordDesktop/index.tsx +++ b/src/equicordplugins/quickThemeSwitcher.discordDesktop/index.tsx @@ -8,7 +8,7 @@ import { definePluginSettings, Settings, SettingsStore } from "@api/Settings"; import { HeadingSecondary } from "@components/Heading"; import { Paragraph } from "@components/Paragraph"; import { debounce } from "@shared/debounce"; -import { EquicordDevs, IS_MAC } from "@utils/constants"; +import { Devs, IS_MAC } from "@utils/constants"; import definePlugin, { OptionType, StartAt } from "@utils/types"; import { showToast, Toasts } from "@webpack/common"; @@ -244,7 +244,7 @@ const handleThemeNamesChange = () => settings.store.autoRefresh && debouncedRefr export default definePlugin({ name: "QuickThemeSwitcher", description: "Quickly switch between themes using keyboard shortcuts.", - authors: [EquicordDevs.prism], + authors: [Devs.prism], settings, startAt: StartAt.DOMContentLoaded, settingsAboutComponent: () => ( diff --git a/src/equicordplugins/quoter/index.tsx b/src/equicordplugins/quoter/index.tsx index 0644e0e83..f8389de73 100644 --- a/src/equicordplugins/quoter/index.tsx +++ b/src/equicordplugins/quoter/index.tsx @@ -58,7 +58,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "Quoter", description: "Adds the ability to create an inspirational quote image from a message.", - authors: [Devs.Samwich, Devs.thororen, EquicordDevs.neoarz, EquicordDevs.prism], + authors: [Devs.Samwich, Devs.thororen, EquicordDevs.neoarz, Devs.prism], settings, async start() { diff --git a/src/equicordplugins/scheduledMessages/index.tsx b/src/equicordplugins/scheduledMessages/index.tsx index 25ff2edb5..7fee1cbd2 100644 --- a/src/equicordplugins/scheduledMessages/index.tsx +++ b/src/equicordplugins/scheduledMessages/index.tsx @@ -8,7 +8,7 @@ import "./styles.css"; import { MessageOptions } from "@api/MessageEvents"; import { definePluginSettings } from "@api/Settings"; -import { EquicordDevs } from "@utils/constants"; +import { Devs, EquicordDevs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; import { isScheduleModeEnabled, ScheduledMessagesButton, setScheduleModeEnabled } from "./components/ChatBarButton"; @@ -86,7 +86,7 @@ function handleReactionEvent(event: FluxReactionEvent): void { export default definePlugin({ name: "ScheduledMessages", description: "Schedule messages to be sent at a specific time or after a delay.", - authors: [EquicordDevs.mmeta, EquicordDevs.prism], + authors: [EquicordDevs.mmeta, Devs.prism], settings, flux: { diff --git a/src/equicordplugins/showSongName/index.tsx b/src/equicordplugins/showSongName/index.tsx index 9ce6ce8f4..96cdd5ae7 100644 --- a/src/equicordplugins/showSongName/index.tsx +++ b/src/equicordplugins/showSongName/index.tsx @@ -4,13 +4,13 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; export default definePlugin({ name: "ShowSongName", description: "Shows song name instead of artist for Spotify activity", - authors: [EquicordDevs.prism], + authors: [Devs.prism], patches: [ { diff --git a/src/equicordplugins/urlHighlighter/index.tsx b/src/equicordplugins/urlHighlighter/index.tsx index ac70ac4ca..1073bcf48 100644 --- a/src/equicordplugins/urlHighlighter/index.tsx +++ b/src/equicordplugins/urlHighlighter/index.tsx @@ -10,7 +10,7 @@ import { definePluginSettings } from "@api/Settings"; import { Button } from "@components/Button"; import ErrorBoundary from "@components/ErrorBoundary"; import { Heading } from "@components/Heading"; -import { EquicordDevs } from "@utils/constants"; +import { Devs } from "@utils/constants"; import { classNameFactory } from "@utils/css"; import definePlugin, { OptionType } from "@utils/types"; import { findComponentByCodeLazy } from "@webpack"; @@ -121,7 +121,7 @@ function getMatchingPattern(url: string): PatternEntry | null { export default definePlugin({ name: "UrlHighlighter", description: "Highlights URLs in messages that match your patterns.", - authors: [EquicordDevs.prism], + authors: [Devs.prism], settings, patches: [ diff --git a/src/plugins/showMeYourName/index.tsx b/src/plugins/showMeYourName/index.tsx index 3b92e3136..4bf214ed5 100644 --- a/src/plugins/showMeYourName/index.tsx +++ b/src/plugins/showMeYourName/index.tsx @@ -894,7 +894,7 @@ const settings = definePluginSettings({ export default definePlugin({ name: "ShowMeYourName", description: "Display any permutation of custom nicknames, friend nicknames, server nicknames, display names, and usernames in chat.", - authors: [Devs.Rini, Devs.TheKodeToad, EquicordDevs.Etorix, Devs.sadan, EquicordDevs.prism], + authors: [Devs.Rini, Devs.TheKodeToad, EquicordDevs.Etorix, Devs.sadan, Devs.prism], tags: ["SMYN", "Nicknames", "Custom Nicknames",], isModified: true, settings, diff --git a/src/plugins/voiceMessages/index.tsx b/src/plugins/voiceMessages/index.tsx index c6a0bc94f..1f5249127 100644 --- a/src/plugins/voiceMessages/index.tsx +++ b/src/plugins/voiceMessages/index.tsx @@ -282,7 +282,7 @@ export const settings = definePluginSettings({ export default definePlugin({ name: "VoiceMessages", description: "Allows you to send voice messages like on mobile. To do so, right click the upload button and click Send Voice Message.", - authors: [Devs.Ven, Devs.Vap, Devs.Nickyux, EquicordDevs.Z1xus, EquicordDevs.prism], + authors: [Devs.Ven, Devs.Vap, Devs.Nickyux, EquicordDevs.Z1xus, Devs.prism], settings, contextMenus: { From 1fad9a2c483da6f36cfda198f7fefb7fe515eeaf Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Wed, 4 Feb 2026 15:46:39 -0500 Subject: [PATCH 09/49] Fix Some Patches --- .../bannersEverywhere/index.tsx | 4 +- .../dragFavoriteEmotes/index.tsx | 6 +-- src/equicordplugins/inviteDefaults/index.ts | 4 +- src/equicordplugins/questify/index.tsx | 42 +++++++++---------- src/equicordplugins/stickerBlocker/index.tsx | 4 +- .../universalMention/index.tsx | 2 +- src/plugins/showMeYourName/index.tsx | 4 +- 7 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/equicordplugins/bannersEverywhere/index.tsx b/src/equicordplugins/bannersEverywhere/index.tsx index 3023ce951..5959a4022 100644 --- a/src/equicordplugins/bannersEverywhere/index.tsx +++ b/src/equicordplugins/bannersEverywhere/index.tsx @@ -65,8 +65,8 @@ export default definePlugin({ find: "role:\"listitem\",innerRef", replacement: { // We cant access the user id here, so we take the banner property we set earlier - match: /focusProps.\i\}=(\i).*?children:\[/, - replace: "$&$1.banner," + match: /children:\[(?=.{0,100}\.MEMBER_LIST)/, + replace: "$&arguments[0].banner," } } ], diff --git a/src/equicordplugins/dragFavoriteEmotes/index.tsx b/src/equicordplugins/dragFavoriteEmotes/index.tsx index d194b5df4..2b8e6b096 100644 --- a/src/equicordplugins/dragFavoriteEmotes/index.tsx +++ b/src/equicordplugins/dragFavoriteEmotes/index.tsx @@ -54,7 +54,7 @@ export default definePlugin({ replace: "$1arguments[0]?.collected?.isDragging?$self.dragItem():$2", }, { - match: /\[(\i\.\i)\](?=.{0,5}\[null!=)/, + match: /\[(\i\.\i)\](?=.{0,5}\[\i\?\?)/, replace: '[arguments[0].collected.isDragging?"":$1]', }, { @@ -62,11 +62,11 @@ export default definePlugin({ replace: "$1,[collected,drag]=$self.drag(arguments[0])", }, { - match: /(onFocus".{0,50}\(\i,{ref:)(\i),/, + match: /(onFocus:.{0,50}\(\i,{ref:)(\i),/, replace: '$1arguments[0]?.descriptor?.category==="FAVORITES"?drag:$2,collected:collected,', }, { - match: /(,\{key:\i,ref:\i)(?=\}\),)/, + match: /(key:\i,ref:\i)(?=\},\i)/, replace: '$1,style:{position:"relative"}', }, { diff --git a/src/equicordplugins/inviteDefaults/index.ts b/src/equicordplugins/inviteDefaults/index.ts index 288622324..597c96fec 100644 --- a/src/equicordplugins/inviteDefaults/index.ts +++ b/src/equicordplugins/inviteDefaults/index.ts @@ -52,7 +52,7 @@ export default definePlugin({ find: ".GUILD_CREATE_INVITE_SUGGESTION,defaultMaxAge", replacement: [ { - match: /(?<=maxAge:)null!=\(\i=null!=\i\?\i:\i\)\?\i:\i.\i/, + match: /(?<=maxAge:)\i\?\?\i\?\?\i\.\i/, replace: "$self.settings.store.inviteDuration" }, { @@ -60,7 +60,7 @@ export default definePlugin({ replace: "$self.settings.store.maxUses" }, { - match: /(?<=temporary:)null!=\i&&\i/, + match: /(?<=temporary:)\i\?\?!1/, replace: "$self.settings.store.temporaryMembership" } ] diff --git a/src/equicordplugins/questify/index.tsx b/src/equicordplugins/questify/index.tsx index 459aa637c..6ad569d70 100644 --- a/src/equicordplugins/questify/index.tsx +++ b/src/equicordplugins/questify/index.tsx @@ -1255,7 +1255,7 @@ export default definePlugin({ { // Hides the Quest icon from members list items when // a user is playing a game tied to an active Quest. - find: "),\"activity-\".concat", + find: '"ActivityStatus")', group: true, replacement: [ { @@ -1312,15 +1312,15 @@ export default definePlugin({ { // Replaces the default displayed Quest with the soonest to // be completed Quest which is actively being auto-completed. - find: "questDeliveryOverride)?", + find: '"useQuestBarQuest"})', replacement: { - match: /(?<=null}\);return )(\i\?\i:\i)/, + match: /(?<=null\);return )(\i\?\i:\i)/, replace: "$self.getQuestPanelOverride()??($1)" } }, { // Hides the Friends List "Active Now" promotion. - find: '"application-stream-"', + find: "`application-stream-", group: true, replacement: [ { @@ -1345,7 +1345,7 @@ export default definePlugin({ }, { // QUESTS_FETCH_QUEST_TO_DELIVER_BEGIN - match: /(?=var.{0,150}QUESTS_FETCH_QUEST_TO_DELIVER_BEGIN)/, + match: /(?=let.{0,150}QUESTS_FETCH_QUEST_TO_DELIVER_BEGIN)/, replace: "if($self.shouldPreventFetchingQuests())return;" } ] @@ -1356,7 +1356,7 @@ export default definePlugin({ // - Also see anywhere DynamicDropdown is used for refactoring. // // Various patches to the SearchableSelect component. - find: '"onSearchChange",', + find: ".popoutLayerContext,renderPopout:", group: true, replacement: [ { @@ -1386,8 +1386,8 @@ export default definePlugin({ }, { // Makes use of the custom popoutClassName prop if provided. - match: /(?<=onKeyDown"]\);return.{0,30}?className:\i\(\)\()/, - replace: "arguments[0]?.popoutClassName," + match: /"aria-busy":!0,className:\i\(\)\(/, + replace: "$&arguments[0]?.popoutClassName," }, { // Passes the custom optionClassName prop to the row renderer. @@ -1411,13 +1411,13 @@ export default definePlugin({ // Formats the Orbs balance on the Quests page with locale string formatting. find: '("BalanceCounter")', replacement: { - match: /(?<=\i=>"".concat\(\i).toFixed\(0\)(?=\)\))/, + match: /(?<=`\$\{\i).toFixed\(0\)(?=\}`)/, replace: ".toLocaleString(undefined,{maximumFractionDigits:0})" } }, { // Adds a maxDigits prop to the LowerBadge component which allows for not truncating, or for truncating at a specific threshold. - find: '"renderBadgeCount"])', + find: ".INTERACTIVE_TEXT_ACTIVE.css,shape", group: true, replacement: [ { @@ -1430,17 +1430,17 @@ export default definePlugin({ match: /(children:\i\(\i)/, replace: "$1,maxDigits" }, - { - // Makes use of the custom prop if provided by using custom logic for negatives and truncation. - // If the prop is not provided, assume default behavior for native badges or other plugins not - // utilizing the custom prop. - match: /function (\i\((\i))\){return (.{0,100}?k\+"\))/, - replace: "function $1,maxDigits){return maxDigits===undefined?($3):$self.formatLowerBadge($2,maxDigits)[0]" - } + // { + // Makes use of the custom prop if provided by using custom logic for negatives and truncation. + // If the prop is not provided, assume default behavior for native badges or other plugins not + // utilizing the custom prop. + // match: /function (\i\((\i))\)\{return (.{0,100}?k\+`)/, + // replace: "function $1,maxDigits){return maxDigits===undefined?($3):$self.formatLowerBadge($2,maxDigits)[0]" + // } ] }, { - find: "id:\"quest-tile-\".concat", + find: "id:`quest-tile-", group: true, replacement: [ { @@ -1481,7 +1481,7 @@ export default definePlugin({ }, { // Adds the "Questify" sort option to the sort dropdown. - find: '" has no rewards configured"', + find: "has no rewards configured`", replacement: { match: /(?=case (\i.\i).SUGGESTED)/, replace: "case $1.QUESTIFY:return \"Questify\";" @@ -1528,7 +1528,7 @@ export default definePlugin({ }, { // Set the initial filters. - match: /(get\(\i\)\)\)\?\i:)(\i)/, + match: /(get\(\i\)\)\?\?)(\i)/, replace: "$1$self.getLastFilterChoices()??$2" }, { @@ -1616,7 +1616,7 @@ export default definePlugin({ replace: "const questifyText=$self.getQuestUnacceptedButtonText(arguments[0].quest);" }, { - match: /(?<=}\),)(null==\i\|\|\i\(\))/, + match: /(?<=}\),)(\i\?\.\(\))/, replace: "!$self.processQuestForAutoComplete(arguments[0].quest)&&($1)" }, { diff --git a/src/equicordplugins/stickerBlocker/index.tsx b/src/equicordplugins/stickerBlocker/index.tsx index d10250b58..66656cda3 100644 --- a/src/equicordplugins/stickerBlocker/index.tsx +++ b/src/equicordplugins/stickerBlocker/index.tsx @@ -133,9 +133,9 @@ export default definePlugin({ authors: [Devs.Samwich], patches: [ { - find: /\i\.\i\.STICKER_MESSAGE/, + find: ".STICKERS_CONSTANTS_STICKER_DIMENSION)", replacement: { - match: /}\),\(null!=\i\?\i:(\i)\)\.name]}\);/, + match: /}\),\(\i\?\?\i\)\.name\]\}\);/, replace: "$& if($self.isBlocked($1.id)) return($self.blockedComponent($1));" } } diff --git a/src/equicordplugins/universalMention/index.tsx b/src/equicordplugins/universalMention/index.tsx index 1e893d2c2..2d8a977bb 100644 --- a/src/equicordplugins/universalMention/index.tsx +++ b/src/equicordplugins/universalMention/index.tsx @@ -60,7 +60,7 @@ export default definePlugin({ predicate: () => settings.store.globalMention || settings.store.onlyDMUsers, }, { - match: /(?<=\i=)\i\.recipients\.map\(.{0,100}:null\}\}\)/, + match: /(?<=\i=)\i\.recipients\.map\(.{0,100}\?\?null\}\)\)/, replace: "$self.useFilter(true)", } ], diff --git a/src/plugins/showMeYourName/index.tsx b/src/plugins/showMeYourName/index.tsx index 4bf214ed5..512378cf3 100644 --- a/src/plugins/showMeYourName/index.tsx +++ b/src/plugins/showMeYourName/index.tsx @@ -934,7 +934,7 @@ export default definePlugin({ replace: "const showMeYourNameMention=$self.getMentionNameElement(arguments[0]);$1" }, { - match: /(?<=onContextMenu:\i\},\i\),{children:)/, + match: /(?<=onContextMenu:\i,\.\.\.\i,children:)/, replace: "showMeYourNameMention??", predicate: () => !isPluginEnabled(mentionAvatars.name), } @@ -985,7 +985,7 @@ export default definePlugin({ // Replace names in reaction tooltips. find: "reactionTooltip1,", replacement: { - match: /(\i.\i.getName\((\i),null==(?:.{0,15}?)(\i)\))/, + match: /(\i.\i.getName\((\i),\i\?\.id,(\i)\))/, replace: "$self.getMemberListProfilesReactionsVoiceNameText({user:$3,guildId:$2,type:\"reactionsTooltip\"})??($1)" } }, From 94aea2baa43b9f0e2c293edd5fe54490f9a168de Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Wed, 4 Feb 2026 16:07:49 -0500 Subject: [PATCH 10/49] fix platform indicators find --- src/plugins/platformIndicators/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/platformIndicators/index.tsx b/src/plugins/platformIndicators/index.tsx index 8c6ba66d8..1751033e8 100644 --- a/src/plugins/platformIndicators/index.tsx +++ b/src/plugins/platformIndicators/index.tsx @@ -42,7 +42,7 @@ export interface Session { const SessionsStore = findStoreLazy("SessionsStore") as { getSessions(): Record; }; -const { useStatusFillColor } = mapMangledModuleLazy(".concat(.5625*", { +const { useStatusFillColor } = mapMangledModuleLazy("translate(${.5625*", { useStatusFillColor: filters.byCode(".hex") }); From 71864c42a613c93515cced973ed48ae2beef69df Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Wed, 4 Feb 2026 16:30:41 -0500 Subject: [PATCH 11/49] Fix Patches --- src/equicordplugins/_api/headerBar.ts | 2 +- src/equicordplugins/blockKeywords/index.ts | 4 ++-- src/equicordplugins/channelTabs/index.tsx | 10 +++++----- src/equicordplugins/equicordHelper/index.tsx | 8 ++++---- src/equicordplugins/favouriteAnything/index.tsx | 4 ++-- src/equicordplugins/githubRepos/index.tsx | 2 +- src/equicordplugins/messageColors/index.tsx | 5 +---- src/equicordplugins/messageLoggerEnhanced/index.tsx | 2 +- src/equicordplugins/moreStickers/index.tsx | 4 ++-- src/equicordplugins/splitLargeMessages/index.ts | 4 ++-- src/equicordplugins/tidalEmbeds/index.tsx | 2 +- src/equicordplugins/urlHighlighter/index.tsx | 4 ++-- src/plugins/noBlockedMessages/index.ts | 2 +- 13 files changed, 25 insertions(+), 28 deletions(-) diff --git a/src/equicordplugins/_api/headerBar.ts b/src/equicordplugins/_api/headerBar.ts index 1660a6082..8f7edc595 100644 --- a/src/equicordplugins/_api/headerBar.ts +++ b/src/equicordplugins/_api/headerBar.ts @@ -23,7 +23,7 @@ export default definePlugin({ { find: "Missing channel in Channel.renderHeaderToolbar", replacement: { - match: /(?<=renderHeaderToolbar",\(\)=>\{.{1,200}let (\i)=\[\];)/, + match: /(?<=renderHeaderToolbar"\);let (\i)=\[\];)/, replace: "Vencord.Api.HeaderBar._addChannelToolbarButtons($1);" } } diff --git a/src/equicordplugins/blockKeywords/index.ts b/src/equicordplugins/blockKeywords/index.ts index df585f679..3f7504373 100644 --- a/src/equicordplugins/blockKeywords/index.ts +++ b/src/equicordplugins/blockKeywords/index.ts @@ -73,10 +73,10 @@ export default definePlugin({ authors: [EquicordDevs.catcraft], patches: [ { - find: '"_channelMessages",{})', + find: "_channelMessages={}", predicate: () => settings.store.blockedWords !== "", replacement: { - match: /static commit\((.{1,2})\){/g, + match: /static commit\((\i)\)\{/g, replace: "$&$1=$self.blockMessagesWithKeywords($1);" } }, diff --git a/src/equicordplugins/channelTabs/index.tsx b/src/equicordplugins/channelTabs/index.tsx index 330adc80e..35e6888a3 100644 --- a/src/equicordplugins/channelTabs/index.tsx +++ b/src/equicordplugins/channelTabs/index.tsx @@ -61,12 +61,12 @@ export default definePlugin({ find: '"AppView"', replacement: [ { - match: /(\?void 0:(\i)\.channelId.{0,600})"div",{(?=className:\i\.\i)/, + match: /((\i\?.params)\?\.channelId.{0,600})"div",{(?=className:\i\.\i)/, replace: "$1$self.render,{currentChannel:$2,", predicate: () => settings.store.tabBarPosition === "top" }, { - match: /(\?void 0:(\i)\.channelId.{0,300})"div",{/, + match: /((\i\?.params)\?.channelId.{0,300})"div",{/, replace: "$1$self.render,{currentChannel:$2,", predicate: () => settings.store.tabBarPosition === "bottom" } @@ -74,9 +74,9 @@ export default definePlugin({ }, // intercept channel navigation to switch/create tabs { - find: '"transitionToGuild - Transitioning to "', + find: "`transitionToGuild - Transitioning to", replacement: { - match: /(\i\((\i),(\i),\i,\i\)\{)(.{0,25}"transitionToGuild)/, + match: /(\i\((\i),(\i),\i,\i\)\{)(.{0,25}`transitionToGuild)/, replace: "$1$self.handleNavigation($2,$3);$4" } }, @@ -106,7 +106,7 @@ export default definePlugin({ }, // prevent issues with the pins/inbox popouts being too tall { - find: "renderCloseButton()", + find: "#{intl::JUMP}),onClick:", replacement: { match: /\i&&\((\i).maxHeight.{0,5}\)/, replace: "$&;$1.maxHeight-=$self.containerHeight" diff --git a/src/equicordplugins/equicordHelper/index.tsx b/src/equicordplugins/equicordHelper/index.tsx index eea09f8f2..3f58e6c68 100644 --- a/src/equicordplugins/equicordHelper/index.tsx +++ b/src/equicordplugins/equicordHelper/index.tsx @@ -68,18 +68,18 @@ export default definePlugin({ find: "Unknown resolution:", replacement: [ { - match: /throw Error\("Unknown resolution: ".concat\((\i)\)\)/, + match: /throw Error\(`Unknown resolution: \$\{(\i)\}`\)/, replace: "return $1;" }, { - match: /throw Error\("Unknown frame rate: ".concat\((\i)\)\)/, + match: /throw Error\(`Unknown frame rate: \$\{(\i)\}`\)/, replace: "return $1;" } ] }, // When focused on voice channel or group chat voice call { - find: /\i\?\i.\i.SELF_VIDEO/, + find: ".STATUS_WARNING_BACKGROUND})})", predicate: () => settings.store.noMirroredCamera, replacement: { match: /mirror:\i/, @@ -115,7 +115,7 @@ export default definePlugin({ }, }, { - find: ".buttons.length)>=1", + find: ".USER_PROFILE_ACTIVITY_BUTTONS),", predicate: () => settings.store.showYourOwnActivityButtons && !isPluginEnabled(customRPC.name), replacement: { match: /.getId\(\)===\i.id/, diff --git a/src/equicordplugins/favouriteAnything/index.tsx b/src/equicordplugins/favouriteAnything/index.tsx index 6025a66fa..8780f309e 100644 --- a/src/equicordplugins/favouriteAnything/index.tsx +++ b/src/equicordplugins/favouriteAnything/index.tsx @@ -93,9 +93,9 @@ export default definePlugin({ }, // Add a proxyUrl prop alongside the src prop, which is used for video thumbnails. { - find: '"renderOverlayContent","renderLinkComponent"', + find: /disableArrowKeySeek:\i\}\)\}/, replacement: { - match: /src:\i(?=\})/, + match: /src:\i(?=,\.\.\.\i)/, replace: "$&,proxyUrl:this.props.src" } } diff --git a/src/equicordplugins/githubRepos/index.tsx b/src/equicordplugins/githubRepos/index.tsx index 5ec1aafc9..c621e4991 100644 --- a/src/equicordplugins/githubRepos/index.tsx +++ b/src/equicordplugins/githubRepos/index.tsx @@ -86,7 +86,7 @@ export default definePlugin({ patches: [ // User Popout { - find: ".hasAvatarForGuild(null==", + find: /onOpenUserProfileModal:\i\}\),\i/, replacement: { match: /userId:\i\.id,guild:\i.{0,15}\}\).{0,100}(?=\])/, replace: "$&,$self.ProfilePopoutComponent(arguments[0])" diff --git a/src/equicordplugins/messageColors/index.tsx b/src/equicordplugins/messageColors/index.tsx index 5d713e488..568718102 100644 --- a/src/equicordplugins/messageColors/index.tsx +++ b/src/equicordplugins/messageColors/index.tsx @@ -42,12 +42,9 @@ export default definePlugin({ // Changes text md rule regex, so it stops right before hsl( | rgb( // Without it discord will try to pass a string without those to color rule { - find: ".defaultRules.text)", - group: true, + find: ".defaultRules.text,match", replacement: { - // $)/) match: /\$\)\//, - // hsl(|rgb(|$& replace: requiredFirstCharacters.join("|") + "|$&" } }, diff --git a/src/equicordplugins/messageLoggerEnhanced/index.tsx b/src/equicordplugins/messageLoggerEnhanced/index.tsx index addcd7c19..fbed60174 100644 --- a/src/equicordplugins/messageLoggerEnhanced/index.tsx +++ b/src/equicordplugins/messageLoggerEnhanced/index.tsx @@ -261,7 +261,7 @@ export default definePlugin({ ] }, { - find: "THREAD_STARTER_MESSAGE?null==", + find: ".PREMIUM_REFERRAL&&(", replacement: { match: /deleted:\i\.deleted, editHistory:\i\.editHistory,/, replace: "deleted:$self.getDeleted(...arguments), editHistory:$self.getEdited(...arguments)," diff --git a/src/equicordplugins/moreStickers/index.tsx b/src/equicordplugins/moreStickers/index.tsx index 7495a10df..19a9b104b 100644 --- a/src/equicordplugins/moreStickers/index.tsx +++ b/src/equicordplugins/moreStickers/index.tsx @@ -47,10 +47,10 @@ export default definePlugin({ }] }, { - find: ".gifts)", + find: ".GIFT_PROMOTION]).", replacement: [ { - match: /(?<=(,\(null==\(\i=\i\.stickers\)\?void 0.*?\i\.push\(\(.{0,100})\},"sticker"\)\))/, + match: /(?<=(,\i\.stickers\?\.button.{0,50}\i\.push\(\(.{0,100})\},"sticker"\)\))/, replace: "$1,stickersType:\"stickers+\"},\"stickers+\"))" }, ] diff --git a/src/equicordplugins/splitLargeMessages/index.ts b/src/equicordplugins/splitLargeMessages/index.ts index 0e52af7f4..58609b569 100644 --- a/src/equicordplugins/splitLargeMessages/index.ts +++ b/src/equicordplugins/splitLargeMessages/index.ts @@ -134,9 +134,9 @@ export default definePlugin({ }, { - find: '(this,"hideAutocomplete"', // disable file conversion + find: ".onHideAutocomplete?", // disable file conversion replacement: { - match: /if\(\i.length>\i\)/, + match: /(?<=getData\(\i\.type\);)if\(\i.length>\i\)/, replace: "if(false)", }, } diff --git a/src/equicordplugins/tidalEmbeds/index.tsx b/src/equicordplugins/tidalEmbeds/index.tsx index 7ca7d629a..1e9269859 100644 --- a/src/equicordplugins/tidalEmbeds/index.tsx +++ b/src/equicordplugins/tidalEmbeds/index.tsx @@ -14,7 +14,7 @@ export default definePlugin({ dependencies: ["MessageUpdaterAPI"], patches: [ { - find: "}renderEmbeds(", + find: "renderEmbeds(", replacement: { match: /(?<=renderEmbeds\(\i\){.+?embeds\.map\(\((\i),\i\)?=>{)/, replace: "$&if($self.isTidalEmbed($1))return null;" diff --git a/src/equicordplugins/urlHighlighter/index.tsx b/src/equicordplugins/urlHighlighter/index.tsx index 1073bcf48..6fbe9ba77 100644 --- a/src/equicordplugins/urlHighlighter/index.tsx +++ b/src/equicordplugins/urlHighlighter/index.tsx @@ -126,9 +126,9 @@ export default definePlugin({ patches: [ { - find: '"messageId","channelId"', + find: ".MASKED_LINK),", replacement: { - match: /,children:null!=\i\?\i:\i/, + match: /,children:\i\?\?\i/, replace: "$&,...$self.getProps(arguments[0])" } } diff --git a/src/plugins/noBlockedMessages/index.ts b/src/plugins/noBlockedMessages/index.ts index 25db5d832..3c50240fa 100644 --- a/src/plugins/noBlockedMessages/index.ts +++ b/src/plugins/noBlockedMessages/index.ts @@ -106,7 +106,7 @@ export default definePlugin({ ] })), { - find: '"forum-post-action-bar-"', + find: "`forum-post-action-bar-", replacement: [ { match: /(?<=\);)(let \i=null,\i=\[\],\i=(\i))/, From 2efff3b5d4c0bbb810c3b77f51bab77bf8ca987a Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Wed, 4 Feb 2026 16:36:11 -0500 Subject: [PATCH 12/49] fix find for Slider --- src/webpack/common/components.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/webpack/common/components.ts b/src/webpack/common/components.ts index f06f830fa..57629cf7a 100644 --- a/src/webpack/common/components.ts +++ b/src/webpack/common/components.ts @@ -60,7 +60,7 @@ export const TextInput = waitForComponent("TextInput", filters.comp export const TextArea = waitForComponent("TextArea", filters.componentByCode("this.getPaddingRight()},id:")); export const Select = waitForComponent("Select", filters.componentByCode('"Select"')); export const SearchableSelect = waitForComponent("SearchableSelect", filters.componentByCode('"SearchableSelect"')); -export const Slider = waitForComponent("Slider", filters.componentByCode('"markDash".concat(')); +export const Slider = waitForComponent("Slider", filters.componentByCode("`markDash${null==")); export const Popout = waitForComponent("Popout", filters.componentByCode("ref:this.ref,", "renderPopout:this.renderPopout,")); export const Dialog = waitForComponent("Dialog", filters.componentByCode('role:"dialog",tabIndex:-1')); export const TabBar = waitForComponent("TabBar", filters.componentByCode("ref:this.tabBarRef,className:")); From 27ee50fd65bc7c1f0e70ff54fd18a2eb32bf6a5e Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Wed, 4 Feb 2026 16:42:06 -0500 Subject: [PATCH 13/49] Fix more plugins --- src/equicordplugins/_api/audioPlayer.ts | 2 +- src/equicordplugins/limitMiddleClickPaste/index.ts | 2 +- src/equicordplugins/noModalAnimation/index.ts | 4 ++-- src/equicordplugins/statusPresets/index.tsx | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/equicordplugins/_api/audioPlayer.ts b/src/equicordplugins/_api/audioPlayer.ts index 615eb93e4..e9e0d1906 100644 --- a/src/equicordplugins/_api/audioPlayer.ts +++ b/src/equicordplugins/_api/audioPlayer.ts @@ -24,7 +24,7 @@ export default definePlugin({ // Uses the audio as-is if external, otherwise checks for an internal Discord sound. // Also force loads the internal sounds module to account for the second patch group below, // as well as accounting for not calling the module in this patch when this.type is not DISCORD. - match: /(let \i=class.{0,900}?new Audio;\i.src=)((\i\(\d+\)).{0,50}concat\()this.name(,".mp3"\)\))/, + match: /(let \i=class.{0,900}?new Audio;\i.src=)((\i\(\d+\))\(`\.\/\$\{)this.name(\}\.mp3`\))/, replace: "$3;$1this.type!==$self.AudioType.DISCORD?this.audio:$2this.audio$4" }, { diff --git a/src/equicordplugins/limitMiddleClickPaste/index.ts b/src/equicordplugins/limitMiddleClickPaste/index.ts index 9219244ff..632eae2fe 100644 --- a/src/equicordplugins/limitMiddleClickPaste/index.ts +++ b/src/equicordplugins/limitMiddleClickPaste/index.ts @@ -113,7 +113,7 @@ export default definePlugin({ // Detects paste events triggered inside of Discord's text input. find: ",origin:\"clipboard\"});", replacement: { - match: /(?<="handlePaste",(\i)=>{)(?=var)/, + match: /(?<=handlePaste=(\i)=>{)(?=let)/, replace: "if($self.isPastingDisabled(true)){$1.preventDefault?.();$1.stopPropagation?.();return;}" } }, diff --git a/src/equicordplugins/noModalAnimation/index.ts b/src/equicordplugins/noModalAnimation/index.ts index 17433d8dd..b86bb95b3 100644 --- a/src/equicordplugins/noModalAnimation/index.ts +++ b/src/equicordplugins/noModalAnimation/index.ts @@ -29,8 +29,8 @@ export default definePlugin({ { find: '="ABOVE"', replacement: { - match: /:300/, - replace: ":0", + match: /\?\?300/, + replace: "??0", } }, { diff --git a/src/equicordplugins/statusPresets/index.tsx b/src/equicordplugins/statusPresets/index.tsx index 06e5db6f0..113b4052b 100644 --- a/src/equicordplugins/statusPresets/index.tsx +++ b/src/equicordplugins/statusPresets/index.tsx @@ -152,7 +152,7 @@ export default definePlugin({ { find: '"CustomStatusModalWithPreview"', replacement: { - match: /(?<=(\i)\.state\).*?)\{text:\i\.\i\.\i\(\i\.\i#{intl::SAVE}\)/, + match: /(?<=(\i)\?\.state\?\?.*?)\{text:\i\.\i\.\i\(\i\.\i#{intl::SAVE}\)/, replace: "$self.renderRememberButton($1),$&" } }, From 632e26c1419ee02904ee133e1fbd2763e95ac3f9 Mon Sep 17 00:00:00 2001 From: Etorix <92535668+EtorixDev@users.noreply.github.com> Date: Wed, 4 Feb 2026 13:51:52 -0800 Subject: [PATCH 14/49] Questify: Fixes. (#725) --- src/equicordplugins/questify/index.tsx | 36 +++++++++---------- .../questify/utils/components.tsx | 4 +-- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/src/equicordplugins/questify/index.tsx b/src/equicordplugins/questify/index.tsx index 6ad569d70..20a0b9cb9 100644 --- a/src/equicordplugins/questify/index.tsx +++ b/src/equicordplugins/questify/index.tsx @@ -1050,6 +1050,7 @@ function getQuestPanelTitleText(quest: Quest): string | null { } function getQuestPanelOverride(): Quest | null { + settings.use(["triggerQuestsRerender"]); let closestQuest: Quest | null = null; let closestTimeRemaining = Infinity; @@ -1079,20 +1080,15 @@ function getQuestPanelOverride(): Quest | null { }); if (!closestQuest) { - const completedQuests = Array.from(QuestsStore.quests.values() as Quest[]).filter(q => q.userStatus?.completedAt).sort((a, b) => { - const aTime = new Date(a.userStatus?.completedAt as string); - const bTime = new Date(b.userStatus?.completedAt as string); - return bTime.getTime() - aTime.getTime(); - }); + const completedUnclaimedQuests = (Array.from(QuestsStore.quests.values()) as Quest[]) + .filter(q => q.userStatus?.completedAt && getQuestStatus(q) === QuestStatus.Unclaimed) + .sort((a, b) => { + const aTime = new Date(a.userStatus?.completedAt as string).getTime(); + const bTime = new Date(b.userStatus?.completedAt as string).getTime(); + return bTime - aTime; + }); - completedQuests.forEach(quest => { - const completedQuest = quest.userStatus?.completedAt; - const questStatus = getQuestStatus(quest); - - if (completedQuest && questStatus === QuestStatus.Unclaimed) { - closestQuest = quest; - } - }); + closestQuest = completedUnclaimedQuests[0] ?? null; } return closestQuest; @@ -1430,13 +1426,13 @@ export default definePlugin({ match: /(children:\i\(\i)/, replace: "$1,maxDigits" }, - // { - // Makes use of the custom prop if provided by using custom logic for negatives and truncation. - // If the prop is not provided, assume default behavior for native badges or other plugins not - // utilizing the custom prop. - // match: /function (\i\((\i))\)\{return (.{0,100}?k\+`)/, - // replace: "function $1,maxDigits){return maxDigits===undefined?($3):$self.formatLowerBadge($2,maxDigits)[0]" - // } + { + // Makes use of the custom prop if provided by using custom logic for negatives and truncation. + // If the prop is not provided, assume default behavior for native badges or other plugins not + // utilizing the custom prop. + match: /(?<=function \i\((\i))(\){return )(\i<1e3.{0,60}?k\+`)/, + replace: ",maxDigits$2maxDigits===undefined?($3):$self.formatLowerBadge($1,maxDigits)[0]" + } ] }, { diff --git a/src/equicordplugins/questify/utils/components.tsx b/src/equicordplugins/questify/utils/components.tsx index afc1a8ceb..1f363a24b 100644 --- a/src/equicordplugins/questify/utils/components.tsx +++ b/src/equicordplugins/questify/utils/components.tsx @@ -14,9 +14,9 @@ import { formatLowerBadge } from "./misc"; // GuildlessServerListItem's built-in pill does not support unread state. export const GuildlessServerListItemComponent = findComponentByCodeLazy("tooltip:", "lowerBadgeSize:"); export const GuildedServerListItemPillComponent = findComponentByCodeLazy('"pill":"empty"'); -export const ServerListItemLowerBadgeComponent = findComponentByCodeLazy("BADGE_NOTIFICATION_BACKGROUND", '"renderBadgeCount"'); +export const ServerListItemLowerBadgeComponent = findComponentByCodeLazy("BADGE_NOTIFICATION_BACKGROUND", "let{count:"); export const ServerListItemUpperBadgeComponent = findComponentByCodeLazy("{icon:", ".ROUND,disableColor"); -export const RadioGroup = findComponentByCodeLazy(',["label","description"'); +export const RadioGroup = findComponentByCodeLazy(",{label:", ",description:", ",required:", ",errorMessage:", ",children:"); export const QuestTile = findComponentByCodeLazy(".rowIndex,trackGuildAndChannelMetadata"); export enum QuestRewardType { From e468d1242c7c21ef6d3bc52761fcb22eff259271 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Wed, 4 Feb 2026 17:14:31 -0500 Subject: [PATCH 15/49] Fix the rest of our stuff --- src/equicordplugins/ghosted/GhostedUsersModal.tsx | 2 +- .../notificationTitle.discordDesktop/index.tsx | 2 +- src/equicordplugins/remix/editor/Editor.tsx | 2 +- src/equicordplugins/sidebarChat/index.tsx | 6 +++--- src/equicordplugins/unreadBadgeCount/index.tsx | 2 +- src/plugins/decor/ui/modals/CreateDecorationModal.tsx | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/equicordplugins/ghosted/GhostedUsersModal.tsx b/src/equicordplugins/ghosted/GhostedUsersModal.tsx index 4316fe088..7b78e562a 100644 --- a/src/equicordplugins/ghosted/GhostedUsersModal.tsx +++ b/src/equicordplugins/ghosted/GhostedUsersModal.tsx @@ -20,7 +20,7 @@ function formatMessageDate(timestamp: string | Date): string { return `${month}/${day}/${year}`; } -const GroupDmsRecipientsIcon = findComponentByCodeLazy("\"recipients\",\"size\","); +const GroupDmsRecipientsIcon = findComponentByCodeLazy('["aria-hidden"],"aria-label":'); const SelectedChannelActionCreators = findByPropsLazy("selectPrivateChannel"); function GroupDmsIcon({ channel }: { channel: Channel; }) { diff --git a/src/equicordplugins/notificationTitle.discordDesktop/index.tsx b/src/equicordplugins/notificationTitle.discordDesktop/index.tsx index 7d6e19bce..56d8b3fef 100644 --- a/src/equicordplugins/notificationTitle.discordDesktop/index.tsx +++ b/src/equicordplugins/notificationTitle.discordDesktop/index.tsx @@ -11,7 +11,7 @@ import { findByCodeLazy, findByPropsLazy } from "@webpack"; import { ChannelStore, GuildStore, RelationshipStore, UserStore } from "@webpack/common"; const { getName } = findByPropsLazy("getName", "useName", "getNickname"); -const computeChannelName = findByCodeLazy(".isThread())return'\"'.concat("); +const computeChannelName = findByCodeLazy(".isThread())return`\""); const ChannelTypes = findByPropsLazy("DM", "GUILD_TEXT", "PUBLIC_THREAD", "UNKNOWN"); const ChannelTypesSets = findByPropsLazy("THREADS", "GUILD_TEXTUAL", "ALL_DMS"); diff --git a/src/equicordplugins/remix/editor/Editor.tsx b/src/equicordplugins/remix/editor/Editor.tsx index f33661fcc..b08ce807a 100644 --- a/src/equicordplugins/remix/editor/Editor.tsx +++ b/src/equicordplugins/remix/editor/Editor.tsx @@ -11,7 +11,7 @@ import { Canvas } from "./components/Canvas"; import { Toolbar } from "./components/Toolbar"; import { imageToBlob, urlToImage } from "./utils/canvas"; -const FileUpload = findComponentByCodeLazy(".currentTarget.files)", "lineClamp:1"); +const FileUpload = findComponentByCodeLazy(".currentTarget.files", "lineClamp:1"); export const Editor = (props: { url?: string; }) => { const [file, setFile] = useState(undefined); diff --git a/src/equicordplugins/sidebarChat/index.tsx b/src/equicordplugins/sidebarChat/index.tsx index 6a964716d..562d2638b 100644 --- a/src/equicordplugins/sidebarChat/index.tsx +++ b/src/equicordplugins/sidebarChat/index.tsx @@ -69,9 +69,9 @@ const WindowLaunchIcon = findComponentByCodeLazy("1-1h6a1 1 0 1 0 0-2H5Z"); const XSmallIcon = findComponentByCodeLazy("1.4L12 13.42l5.3 5.3Z"); const Chat = findComponentByCodeLazy("filterAfterTimestamp:", "chatInputType"); const Resize = findComponentByCodeLazy("sidebarType:", "RESIZE_HANDLE_WIDTH)"); -const ChannelHeader = findComponentByCodeLazy(".GUILD_ANNOUNCEMENT", '"channel-".concat'); +const ChannelHeader = findComponentByCodeLazy(".GUILD_ANNOUNCEMENT", "`channel-"); const PopoutWindow = findComponentByCodeLazy("Missing guestWindow reference"); -const FullChannelView = findComponentByCodeLazy("showFollowButton:(null"); +const FullChannelView = findComponentByCodeLazy(/showFollowButton:\i\?\.type===/); const WanderingCubesLoading = findComponentByCodeLazy('="wanderingCubes"'); const ChatInputTypes = findByPropsLazy("FORM", "NORMAL"); @@ -82,7 +82,7 @@ const ChannelSectionStore = findStoreLazy("ChannelSectionStore"); const requireChannelContextMenu = extractAndLoadChunksLazy( ["&&this.handleActivitiesPopoutClose(),"], - new RegExp(DefaultExtractAndLoadChunksRegex.source + ".{1,150}isFavorite") + new RegExp(DefaultExtractAndLoadChunksRegex.source + ".{1,250}hasActiveThread") ); const requireForumView = extractAndLoadChunksLazy( diff --git a/src/equicordplugins/unreadBadgeCount/index.tsx b/src/equicordplugins/unreadBadgeCount/index.tsx index 0ebc25bfd..0f08d06cd 100644 --- a/src/equicordplugins/unreadBadgeCount/index.tsx +++ b/src/equicordplugins/unreadBadgeCount/index.tsx @@ -14,7 +14,7 @@ import { ReadStateStore, useStateFromStores } from "@webpack/common"; const UserGuildSettingsStore = findStoreLazy("UserGuildSettingsStore"); const JoinedThreadsStore = findStoreLazy("JoinedThreadsStore"); -const NumberBadge = findComponentByCodeLazy("BADGE_NOTIFICATION_BACKGROUND", '"renderBadgeCount"'); +const NumberBadge = findComponentByCodeLazy("BADGE_NOTIFICATION_BACKGROUND", "let{count:"); const settings = definePluginSettings({ showOnMutedChannels: { diff --git a/src/plugins/decor/ui/modals/CreateDecorationModal.tsx b/src/plugins/decor/ui/modals/CreateDecorationModal.tsx index 0f0a4fb88..c99b00282 100644 --- a/src/plugins/decor/ui/modals/CreateDecorationModal.tsx +++ b/src/plugins/decor/ui/modals/CreateDecorationModal.tsx @@ -19,7 +19,7 @@ import { closeAllModals, ModalCloseButton, ModalContent, ModalFooter, ModalHeade import { filters, findComponentByCodeLazy, mapMangledModuleLazy } from "@webpack"; import { Button, FluxDispatcher, GuildStore, NavigationRouter, TextInput, useEffect, useMemo, UserStore, useState } from "@webpack/common"; -const FileUpload = findComponentByCodeLazy(".currentTarget.files)", "lineClamp:1"); +const FileUpload = findComponentByCodeLazy(".currentTarget.files", "lineClamp:1"); const { HelpMessage, HelpMessageTypes } = mapMangledModuleLazy('POSITIVE="positive', { HelpMessageTypes: filters.byProps("POSITIVE", "WARNING", "INFO"), From c0a495105eeb5cee724702a10989dc27c747a44b Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Wed, 4 Feb 2026 17:34:09 -0500 Subject: [PATCH 16/49] MenuItemDemanglerAPI: fix patch --- src/plugins/_api/menuItemDemangler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/_api/menuItemDemangler.ts b/src/plugins/_api/menuItemDemangler.ts index b6a03fe88..f71e8499b 100644 --- a/src/plugins/_api/menuItemDemangler.ts +++ b/src/plugins/_api/menuItemDemangler.ts @@ -29,7 +29,7 @@ export default definePlugin({ required: true, patches: [ { - find: '"Menu API', + find: "Menu API only allows Items", replacement: { match: /function.{0,80}type===(\i\.\i)\).{0,50}navigable:.+?Menu API/s, replace: (m, mod) => { From 12ce0c5c2c3f33f946d89401eb7575991baf2f34 Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Wed, 4 Feb 2026 17:42:47 -0500 Subject: [PATCH 17/49] experiments: fix patch --- src/plugins/experiments/index.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plugins/experiments/index.tsx b/src/plugins/experiments/index.tsx index cb456fc78..34de1df90 100644 --- a/src/plugins/experiments/index.tsx +++ b/src/plugins/experiments/index.tsx @@ -106,10 +106,11 @@ export default definePlugin({ }, // Enable experiment embed on sent experiment links { - find: '"Clear Treatment "', + find: "`Clear Treatment ${", replacement: [ { - match: /\i\.isStaff\(\)/, + // TODO: stable compat optional chaining remove once some time has passed + match: /\i\??\.isStaff\(\)/, replace: "true" }, // Fix some tricky experiments name causing a client crash From 60088fe006330d2e9373298b83c4dd23a3d12cb0 Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Wed, 4 Feb 2026 17:42:56 -0500 Subject: [PATCH 18/49] web context menu: fix finds --- src/plugins/webContextMenus.web/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/webContextMenus.web/index.ts b/src/plugins/webContextMenus.web/index.ts index f8c77ab95..51a3d770d 100644 --- a/src/plugins/webContextMenus.web/index.ts +++ b/src/plugins/webContextMenus.web/index.ts @@ -25,8 +25,8 @@ import { filters, mapMangledModuleLazy } from "@webpack"; import { ComponentDispatch } from "@webpack/common"; const ctxMenuCallbacks = mapMangledModuleLazy('.tagName)==="TEXTAREA"||', { - contextMenuCallbackWeb: filters.byCode('.tagName)==="INPUT"||'), - contextMenuCallbackNative: filters.byCode('.tagName)==="TEXTAREA"||') + contextMenuCallbackWeb: filters.byCode('"[contenteditable=true]"'), + contextMenuCallbackNative: filters.byCode('.getPropertyValue("-webkit-user-select")') }); async function fetchImage(url: string) { From 0dd61ccd30143ff49f01b40872aa85f474de4d8c Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Wed, 4 Feb 2026 17:45:03 -0500 Subject: [PATCH 19/49] gif paste: fix patch --- src/plugins/gifPaste/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/gifPaste/index.ts b/src/plugins/gifPaste/index.ts index b2b4305d8..4e520d122 100644 --- a/src/plugins/gifPaste/index.ts +++ b/src/plugins/gifPaste/index.ts @@ -27,10 +27,10 @@ export default definePlugin({ authors: [Devs.Ven], patches: [{ - find: '"handleSelectGIF",', + find: "handleSelectGIF=", replacement: { - match: /"handleSelectGIF",(\i)=>\{/, - replace: '"handleSelectGIF",$1=>{if (!this.props.className) return $self.handleSelect($1);' + match: /handleSelectGIF=(\i)=>\{/, + replace: "$&if (!this.props.className) return $self.handleSelect($1);" } }], From ef6ca5c6a10c8d1c4b8e3c978b36add6d71f2f30 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Wed, 4 Feb 2026 17:47:10 -0500 Subject: [PATCH 20/49] some more fixes --- src/equicordplugins/betterActivities/index.tsx | 7 +++---- src/equicordplugins/clientSideBlock/index.tsx | 2 +- src/plugins/_api/menuItemDemangler.ts | 2 +- src/plugins/devCompanion.dev/index.tsx | 1 + src/plugins/experiments/index.tsx | 4 ++-- src/plugins/gifPaste/index.ts | 6 +++--- src/plugins/platformIndicators/index.tsx | 2 +- src/plugins/showHiddenChannels/index.tsx | 14 +++++++------- src/plugins/webContextMenus.web/index.ts | 4 ++-- src/webpack/common/components.ts | 2 +- 10 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/equicordplugins/betterActivities/index.tsx b/src/equicordplugins/betterActivities/index.tsx index 79e3e55e9..501c0a4b4 100644 --- a/src/equicordplugins/betterActivities/index.tsx +++ b/src/equicordplugins/betterActivities/index.tsx @@ -27,20 +27,19 @@ export default definePlugin({ patches: [ { // Patch activity icons - find: "isBlockedOrIgnored(null", + find: '"StackedActivityStatus"', replacement: [ { - match: /(?<=className:\i,children:\[).*?(?=\i\(\),\i&&)/, + match: /(?<=className:\i,children:\[).*?(?=\i\(\),\i&&)/g, replace: "", predicate: () => settings.store.removeGameActivityStatus, }, { - match: /(?<=hideTooltip:.{0,4}}=(\i).*?{}\))\]/, + match: /(?<=hideTooltip:.{0,4}}=(\i).*?{}\))\]/g, replace: ",$self.patchActivityList($1)]", predicate: () => settings.store.memberList, } ], - all: true }, { // Show all activities in the user popout/sidebar diff --git a/src/equicordplugins/clientSideBlock/index.tsx b/src/equicordplugins/clientSideBlock/index.tsx index dd9a750c4..80049e0c9 100644 --- a/src/equicordplugins/clientSideBlock/index.tsx +++ b/src/equicordplugins/clientSideBlock/index.tsx @@ -217,7 +217,7 @@ export default definePlugin({ { find: "getFriendIDs(){", replacement: { - match: /return \i\.friends/, + match: /\?\?\[\]\)\),\i\.friends/, replace: "$&.filter(id => !$self.shouldHideUser(id))" } }, diff --git a/src/plugins/_api/menuItemDemangler.ts b/src/plugins/_api/menuItemDemangler.ts index b6a03fe88..f71e8499b 100644 --- a/src/plugins/_api/menuItemDemangler.ts +++ b/src/plugins/_api/menuItemDemangler.ts @@ -29,7 +29,7 @@ export default definePlugin({ required: true, patches: [ { - find: '"Menu API', + find: "Menu API only allows Items", replacement: { match: /function.{0,80}type===(\i\.\i)\).{0,50}navigable:.+?Menu API/s, replace: (m, mod) => { diff --git a/src/plugins/devCompanion.dev/index.tsx b/src/plugins/devCompanion.dev/index.tsx index 852e79490..43449840c 100644 --- a/src/plugins/devCompanion.dev/index.tsx +++ b/src/plugins/devCompanion.dev/index.tsx @@ -51,6 +51,7 @@ export default definePlugin({ authors: [Devs.Ven, Devs.sadan], reporterTestable: ReporterTestable.None, isModified: true, + settings, toolboxActions: { Reconnect() { diff --git a/src/plugins/experiments/index.tsx b/src/plugins/experiments/index.tsx index f336d855b..9ee3f8f3e 100644 --- a/src/plugins/experiments/index.tsx +++ b/src/plugins/experiments/index.tsx @@ -97,10 +97,10 @@ export default definePlugin({ }, // Enable experiment embed on sent experiment links { - find: '"Clear Treatment "', + find: "`Clear Treatment ${", replacement: [ { - match: /\i\.isStaff\(\)/, + match: /\i\??\.isStaff\(\)/, replace: "true" }, // Fix some tricky experiments name causing a client crash diff --git a/src/plugins/gifPaste/index.ts b/src/plugins/gifPaste/index.ts index 97fed9613..65ea464c4 100644 --- a/src/plugins/gifPaste/index.ts +++ b/src/plugins/gifPaste/index.ts @@ -29,10 +29,10 @@ export default definePlugin({ authors: [Devs.Ven], patches: [{ - find: '"handleSelectGIF",', + find: "handleSelectGIF=", replacement: { - match: /"handleSelectGIF",(\i)=>\{/, - replace: '"handleSelectGIF",$1=>{if (!this.props.className) return $self.handleSelect($1);' + match: /handleSelectGIF=(\i)=>\{/, + replace: "$&if (!this.props.className) return $self.handleSelect($1);" } }], diff --git a/src/plugins/platformIndicators/index.tsx b/src/plugins/platformIndicators/index.tsx index cfdbe09ac..645a82bc5 100644 --- a/src/plugins/platformIndicators/index.tsx +++ b/src/plugins/platformIndicators/index.tsx @@ -41,7 +41,7 @@ const SessionsStore = findStoreLazy("SessionsStore") as { getSessions(): Record; }; -const { useStatusFillColor } = mapMangledModuleLazy(".concat(.5625*", { +const { useStatusFillColor } = mapMangledModuleLazy("translate(${.5625*", { useStatusFillColor: filters.byCode(".hex") }); diff --git a/src/plugins/showHiddenChannels/index.tsx b/src/plugins/showHiddenChannels/index.tsx index 5b3bf3f6d..b3dbd206b 100644 --- a/src/plugins/showHiddenChannels/index.tsx +++ b/src/plugins/showHiddenChannels/index.tsx @@ -159,7 +159,7 @@ export default definePlugin({ all: true, // Render null instead of the buttons if the channel is hidden replacement: { - match: /(?<="renderOpenChatButton",\(\)=>{)/, + match: /(?<=renderOpenChatButton=\(\)=>{)/, replace: "if($self.isHiddenChannel(this.props.channel))return null;" } }, @@ -223,7 +223,7 @@ export default definePlugin({ }, { // Hide the new version of unreads box for hidden channels - find: '"ChannelListUnreadsStore",', + find: '"ChannelListUnreadsStore";', replacement: { match: /(?<=\.id\)\))(?=&&\(0,\i\.\i\)\((\i)\))/, replace: (_, channel) => `&&!$self.isHiddenChannel(${channel})` @@ -250,19 +250,19 @@ export default definePlugin({ find: "Missing channel in Channel.renderHeaderToolbar", replacement: [ { - match: /"renderHeaderToolbar",\(\)=>{.+?case \i\.\i\.GUILD_TEXT:(?=.+?(\i\.push.{0,50}channel:(\i)},"notifications"\)\)))(?<=isLurking:(\i).+?)/, + match: /renderHeaderToolbar=\(\)=>{.+?case \i\.\i\.GUILD_TEXT:(?=.+?(\i\.push.{0,50}channel:(\i)},"notifications"\)\)))(?<=isLurking:(\i).+?)/, replace: (m, pushNotificationButtonExpression, channel, isLurking) => `${m}if(!${isLurking}&&$self.isHiddenChannel(${channel})){${pushNotificationButtonExpression};break;}` }, { - match: /"renderHeaderToolbar",\(\)=>{.+?case \i\.\i\.GUILD_MEDIA:(?=.+?(\i\.push.{0,40}channel:(\i)},"notifications"\)\)))(?<=isLurking:(\i).+?)/, + match: /renderHeaderToolbar=\(\)=>{.+?case \i\.\i\.GUILD_MEDIA:(?=.+?(\i\.push.{0,40}channel:(\i)},"notifications"\)\)))(?<=isLurking:(\i).+?)/, replace: (m, pushNotificationButtonExpression, channel, isLurking) => `${m}if(!${isLurking}&&$self.isHiddenChannel(${channel})){${pushNotificationButtonExpression};break;}` }, { - match: /"renderMobileToolbar",\(\)=>{.+?case \i\.\i\.GUILD_DIRECTORY:(?<=let{channel:(\i).+?)/, + match: /renderMobileToolbar=\(\)=>{.+?case \i\.\i\.GUILD_DIRECTORY:(?<=let{channel:(\i).+?)/, replace: (m, channel) => `${m}if($self.isHiddenChannel(${channel}))break;` }, { - match: /(?<="renderHeaderBar",\(\)=>{.+?hideSearch:(\i)\.isDirectory\(\))/, + match: /(?<=renderHeaderBar=\(\)=>{.+?hideSearch:(\i)\.isDirectory\(\))/, replace: (_, channel) => `||$self.isHiddenChannel(${channel})` }, { @@ -355,7 +355,7 @@ export default definePlugin({ { // Show only the plus text without overflowed children amount // if the overflow amount is <= 0 and the component is used inside the HiddenChannelLockScreen - match: /(?<="\+"\.concat\()\i/, + match: /(?<=`\+\$\{)\i(?=\})/, replace: overflowTextAmount => "" + `$self.isHiddenChannel(typeof shcChannel!=="undefined"?shcChannel:void 0,true)&&(${overflowTextAmount}-1)<=0?"":${overflowTextAmount}` } diff --git a/src/plugins/webContextMenus.web/index.ts b/src/plugins/webContextMenus.web/index.ts index ae5b8414f..472f90406 100644 --- a/src/plugins/webContextMenus.web/index.ts +++ b/src/plugins/webContextMenus.web/index.ts @@ -25,8 +25,8 @@ import { filters, mapMangledModuleLazy } from "@webpack"; import { ComponentDispatch } from "@webpack/common"; const ctxMenuCallbacks = mapMangledModuleLazy('.tagName)==="TEXTAREA"||', { - contextMenuCallbackWeb: filters.byCode('.tagName)==="INPUT"||'), - contextMenuCallbackNative: filters.byCode('.tagName)==="TEXTAREA"||') + contextMenuCallbackWeb: filters.byCode('"[contenteditable=true]"'), + contextMenuCallbackNative: filters.byCode('.getPropertyValue("-webkit-user-select")') }); async function fetchImage(url: string) { diff --git a/src/webpack/common/components.ts b/src/webpack/common/components.ts index f06f830fa..57629cf7a 100644 --- a/src/webpack/common/components.ts +++ b/src/webpack/common/components.ts @@ -60,7 +60,7 @@ export const TextInput = waitForComponent("TextInput", filters.comp export const TextArea = waitForComponent("TextArea", filters.componentByCode("this.getPaddingRight()},id:")); export const Select = waitForComponent("Select", filters.componentByCode('"Select"')); export const SearchableSelect = waitForComponent("SearchableSelect", filters.componentByCode('"SearchableSelect"')); -export const Slider = waitForComponent("Slider", filters.componentByCode('"markDash".concat(')); +export const Slider = waitForComponent("Slider", filters.componentByCode("`markDash${null==")); export const Popout = waitForComponent("Popout", filters.componentByCode("ref:this.ref,", "renderPopout:this.renderPopout,")); export const Dialog = waitForComponent("Dialog", filters.componentByCode('role:"dialog",tabIndex:-1')); export const TabBar = waitForComponent("TabBar", filters.componentByCode("ref:this.tabBarRef,className:")); From 74f2dc11f2fcdd0244a319d99adecd78954a531e Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Wed, 4 Feb 2026 18:01:29 -0500 Subject: [PATCH 21/49] Modals: fix find --- src/utils/modal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/modal.tsx b/src/utils/modal.tsx index 7396d151f..2bff48f18 100644 --- a/src/utils/modal.tsx +++ b/src/utils/modal.tsx @@ -101,7 +101,7 @@ interface Modals { }>; } -export const Modals: Modals = mapMangledModuleLazy(':"thin")', { +export const Modals: Modals = mapMangledModuleLazy('??"thin")', { ModalRoot: filters.componentByCode('.MODAL,"aria-labelledby":'), ModalHeader: filters.componentByCode(",id:"), ModalContent: filters.componentByCode("scrollbarType:"), From 234ad59984358d4710f4f05a5a1c122d63ed11c4 Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Wed, 4 Feb 2026 18:14:24 -0500 Subject: [PATCH 22/49] betterSettings: fix patch --- src/plugins/betterSettings/index.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/plugins/betterSettings/index.tsx b/src/plugins/betterSettings/index.tsx index 2236d2fdc..be49e5f98 100644 --- a/src/plugins/betterSettings/index.tsx +++ b/src/plugins/betterSettings/index.tsx @@ -101,8 +101,13 @@ export default definePlugin({ find: "this.renderArtisanalHack()", replacement: [ { // Fade in on layer - match: /(?<=\((\i),"contextType",\i\.\i\);)/, - replace: "$1=$self.Layer;", + // class Layer { + // static contextType = ...; + // ... + // } + // class OtherClass { + match: /(static contextType=\i\.\i;.+?})(?=class)(?<=class (\i).+?)/, + replace: (_, before, Layer) => `${before};${Layer}=$self.Layer;`, predicate: () => settings.store.disableFade }, { // Lazy-load contents From f0a031ae9f1ee40869e8164bf5906d9ed457837d Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Wed, 4 Feb 2026 18:25:48 -0500 Subject: [PATCH 23/49] betterSettings: fix patch 2 --- src/plugins/betterSettings/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/betterSettings/index.tsx b/src/plugins/betterSettings/index.tsx index be49e5f98..8f5695ff0 100644 --- a/src/plugins/betterSettings/index.tsx +++ b/src/plugins/betterSettings/index.tsx @@ -134,8 +134,8 @@ export default definePlugin({ { // Load menu TOC eagerly find: "#{intl::USER_SETTINGS_WITH_BUILD_OVERRIDE}", replacement: { - match: /(\i)\(this,"handleOpenSettingsContextMenu",.{0,100}?null!=\i&&.{0,100}?(await [^};]*?\)\)).*?,(?=\1\(this)/, - replace: "$&(async ()=>$2)()," + match: /(?=handleOpenSettingsContextMenu=.{0,100}?null!=\i&&.{0,100}?(await [^};]*?\)\)))/, + replace: "_vencordBetterSettingsEagerLoad=(async ()=>$1)();" }, predicate: () => settings.store.eagerLoad }, From c159c2c6f8f1713917ece88049f8d1842dd42b2d Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Wed, 4 Feb 2026 18:44:59 -0500 Subject: [PATCH 24/49] TypingTweaks: fix patch --- src/plugins/typingTweaks/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/typingTweaks/index.tsx b/src/plugins/typingTweaks/index.tsx index 8369497c2..b52a48b04 100644 --- a/src/plugins/typingTweaks/index.tsx +++ b/src/plugins/typingTweaks/index.tsx @@ -111,7 +111,7 @@ export default definePlugin({ replace: "$self.renderTypingUsers({ users: arguments[0]?.typingUserObjects, guildId: arguments[0]?.channel?.guild_id, children: $& })" }, { - match: /(?<=function \i\(\i\)\{)(?=[^}]+?\{channel:\i,isThreadCreation:\i=!1\})/, + match: /(?<=function \i\(\i\)\{)(?=[^}]+?\{channel:\i,isThreadCreation:\i=!1,...\i\})/, replace: "let typingUserObjects = $self.useTypingUsers(arguments[0]?.channel);" }, { From b4793224b4770184e1e2c842e8440b0d5908cf9a Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Wed, 4 Feb 2026 21:57:24 -0500 Subject: [PATCH 25/49] fix RCE, fullUserInChatbox --- src/plugins/fullUserInChatbox/index.tsx | 2 +- src/plugins/roleColorEverywhere/index.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/fullUserInChatbox/index.tsx b/src/plugins/fullUserInChatbox/index.tsx index a9d4d61d9..9ac4f811d 100644 --- a/src/plugins/fullUserInChatbox/index.tsx +++ b/src/plugins/fullUserInChatbox/index.tsx @@ -28,7 +28,7 @@ export default definePlugin({ patches: [ { // Same find as RoleColorEverywhere chatbox mentions - find: ':"text":', + find: '"text":"locked"', replacement: { match: /(hidePersonalInformation\).+?)(if\(null!=\i\){.+?return \i)(?=})/, replace: "$1return $self.UserMentionComponent({...arguments[0],originalComponent:()=>{$2}});" diff --git a/src/plugins/roleColorEverywhere/index.tsx b/src/plugins/roleColorEverywhere/index.tsx index 872efdc64..eb03942f5 100644 --- a/src/plugins/roleColorEverywhere/index.tsx +++ b/src/plugins/roleColorEverywhere/index.tsx @@ -92,7 +92,7 @@ export default definePlugin({ // Slate { // Same find as FullUserInChatbox - find: ':"text":', + find: '"text":"locked"', replacement: [ { match: /let\{id:(\i),guildId:\i,channelId:(\i)[^}]*\}.*?\.\i,{(?=children)/, From 9ec44f04a9af45ea7cfeb5cbd05b335144b8a0f1 Mon Sep 17 00:00:00 2001 From: sadan4 <117494111+sadan4@users.noreply.github.com> Date: Wed, 4 Feb 2026 21:59:58 -0500 Subject: [PATCH 26/49] experiments: make stable compatible Co-authored-by: V --- src/plugins/experiments/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/experiments/index.tsx b/src/plugins/experiments/index.tsx index 34de1df90..518eabd95 100644 --- a/src/plugins/experiments/index.tsx +++ b/src/plugins/experiments/index.tsx @@ -106,7 +106,7 @@ export default definePlugin({ }, // Enable experiment embed on sent experiment links { - find: "`Clear Treatment ${", + find: "Clear Treatment ", replacement: [ { // TODO: stable compat optional chaining remove once some time has passed From 444d17c2ca2214fedae9a705861a60794957cf54 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Wed, 4 Feb 2026 22:14:19 -0500 Subject: [PATCH 27/49] fix shc --- src/plugins/showHiddenChannels/index.tsx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/plugins/showHiddenChannels/index.tsx b/src/plugins/showHiddenChannels/index.tsx index 484352a13..d73b622a8 100644 --- a/src/plugins/showHiddenChannels/index.tsx +++ b/src/plugins/showHiddenChannels/index.tsx @@ -227,19 +227,19 @@ export default definePlugin({ find: "Missing channel in Channel.renderHeaderToolbar", replacement: [ { - match: /"renderHeaderToolbar",\(\)=>{.+?case \i\.\i\.GUILD_TEXT:(?=.+?(\i\.push.{0,50}channel:(\i)},"notifications"\)\)))(?<=isLurking:(\i).+?)/, + match: /renderHeaderToolbar(",|=)\(\)=>{.+?case \i\.\i\.GUILD_TEXT:(?=.+?(\i\.push.{0,50}channel:(\i)},"notifications"\)\)))(?<=isLurking:(\i).+?)/, replace: (m, pushNotificationButtonExpression, channel, isLurking) => `${m}if(!${isLurking}&&$self.isHiddenChannel(${channel})){${pushNotificationButtonExpression};break;}` }, { - match: /"renderHeaderToolbar",\(\)=>{.+?case \i\.\i\.GUILD_MEDIA:(?=.+?(\i\.push.{0,40}channel:(\i)},"notifications"\)\)))(?<=isLurking:(\i).+?)/, + match: /renderHeaderToolbar(",|=)\(\)=>{.+?case \i\.\i\.GUILD_MEDIA:(?=.+?(\i\.push.{0,40}channel:(\i)},"notifications"\)\)))(?<=isLurking:(\i).+?)/, replace: (m, pushNotificationButtonExpression, channel, isLurking) => `${m}if(!${isLurking}&&$self.isHiddenChannel(${channel})){${pushNotificationButtonExpression};break;}` }, { - match: /"renderMobileToolbar",\(\)=>{.+?case \i\.\i\.GUILD_DIRECTORY:(?<=let{channel:(\i).+?)/, + match: /renderMobileToolbar(",|=)\(\)=>{.+?case \i\.\i\.GUILD_DIRECTORY:(?<=let{channel:(\i).+?)/, replace: (m, channel) => `${m}if($self.isHiddenChannel(${channel}))break;` }, { - match: /(?<="renderHeaderBar",\(\)=>{.+?hideSearch:(\i)\.isDirectory\(\))/, + match: /(?<=renderHeaderBar(",|=)\(\)=>{.+?hideSearch:(\i)\.isDirectory\(\))/, replace: (_, channel) => `||$self.isHiddenChannel(${channel})` }, { @@ -335,6 +335,13 @@ export default definePlugin({ match: /(?<="\+"\.concat\()\i/, replace: overflowTextAmount => "" + `$self.isHiddenChannel(typeof shcChannel!=="undefined"?shcChannel:void 0,true)&&(${overflowTextAmount}-1)<=0?"":${overflowTextAmount}` + }, + { + // Show only the plus text without overflowed children amount + // if the overflow amount is <= 0 and the component is used inside the HiddenChannelLockScreen + match: /(?<=`\+\$\{)\i(?=\})/, + replace: overflowTextAmount => "" + + `$self.isHiddenChannel(typeof shcChannel!=="undefined"?shcChannel:void 0,true)&&(${overflowTextAmount}-1)<=0?"":${overflowTextAmount}` } ] }, From f873846fb5d6ba88ffcfe54dd75942165073908e Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Wed, 4 Feb 2026 22:22:21 -0500 Subject: [PATCH 28/49] fix shc pt 2 --- src/plugins/showHiddenChannels/index.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plugins/showHiddenChannels/index.tsx b/src/plugins/showHiddenChannels/index.tsx index d73b622a8..403f3cff8 100644 --- a/src/plugins/showHiddenChannels/index.tsx +++ b/src/plugins/showHiddenChannels/index.tsx @@ -227,19 +227,19 @@ export default definePlugin({ find: "Missing channel in Channel.renderHeaderToolbar", replacement: [ { - match: /renderHeaderToolbar(",|=)\(\)=>{.+?case \i\.\i\.GUILD_TEXT:(?=.+?(\i\.push.{0,50}channel:(\i)},"notifications"\)\)))(?<=isLurking:(\i).+?)/, + match: /renderHeaderToolbar(?:",|=)\(\)=>{.+?case \i\.\i\.GUILD_TEXT:(?=.+?(\i\.push.{0,50}channel:(\i)},"notifications"\)\)))(?<=isLurking:(\i).+?)/, replace: (m, pushNotificationButtonExpression, channel, isLurking) => `${m}if(!${isLurking}&&$self.isHiddenChannel(${channel})){${pushNotificationButtonExpression};break;}` }, { - match: /renderHeaderToolbar(",|=)\(\)=>{.+?case \i\.\i\.GUILD_MEDIA:(?=.+?(\i\.push.{0,40}channel:(\i)},"notifications"\)\)))(?<=isLurking:(\i).+?)/, + match: /renderHeaderToolbar(?:",|=)\(\)=>{.+?case \i\.\i\.GUILD_MEDIA:(?=.+?(\i\.push.{0,40}channel:(\i)},"notifications"\)\)))(?<=isLurking:(\i).+?)/, replace: (m, pushNotificationButtonExpression, channel, isLurking) => `${m}if(!${isLurking}&&$self.isHiddenChannel(${channel})){${pushNotificationButtonExpression};break;}` }, { - match: /renderMobileToolbar(",|=)\(\)=>{.+?case \i\.\i\.GUILD_DIRECTORY:(?<=let{channel:(\i).+?)/, + match: /renderMobileToolbar(?:",|=)\(\)=>{.+?case \i\.\i\.GUILD_DIRECTORY:(?<=let{channel:(\i).+?)/, replace: (m, channel) => `${m}if($self.isHiddenChannel(${channel}))break;` }, { - match: /(?<=renderHeaderBar(",|=)\(\)=>{.+?hideSearch:(\i)\.isDirectory\(\))/, + match: /(?<=renderHeaderBar(?:",|=)\(\)=>{.+?hideSearch:(\i)\.isDirectory\(\))/, replace: (_, channel) => `||$self.isHiddenChannel(${channel})` }, { From 9598f8a52fdc64e2feb512d967e98f903ca67f79 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Wed, 4 Feb 2026 22:27:31 -0500 Subject: [PATCH 29/49] fix loadingquotes --- src/plugins/loadingQuotes/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/loadingQuotes/index.ts b/src/plugins/loadingQuotes/index.ts index d26f49367..3b9896b58 100644 --- a/src/plugins/loadingQuotes/index.ts +++ b/src/plugins/loadingQuotes/index.ts @@ -66,11 +66,11 @@ export default definePlugin({ find: "#{intl::LOADING_DID_YOU_KNOW}", replacement: [ { - match: /"_loadingText".+?(?=(\i)\[.{0,10}\.random)/, + match: /_loadingText.+?(?=(\i)\[.{0,10}\.random)/, replace: "$&$self.mutateQuotes($1)," }, { - match: /"_eventLoadingText".+?(?=(\i)\[.{0,10}\.random)/, + match: /_eventLoadingText.+?(?=(\i)\[.{0,10}\.random)/, replace: "$&$self.mutateQuotes($1),", predicate: () => settings.store.replaceEvents } From fbe587fe55726ebc59bdb4269fb63919837a95dc Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Wed, 4 Feb 2026 22:19:14 -0500 Subject: [PATCH 30/49] WebContextMenus: fix patch --- src/plugins/webContextMenus.web/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/webContextMenus.web/index.ts b/src/plugins/webContextMenus.web/index.ts index 51a3d770d..e4b9c510f 100644 --- a/src/plugins/webContextMenus.web/index.ts +++ b/src/plugins/webContextMenus.web/index.ts @@ -24,7 +24,7 @@ import { saveFile } from "@utils/web"; import { filters, mapMangledModuleLazy } from "@webpack"; import { ComponentDispatch } from "@webpack/common"; -const ctxMenuCallbacks = mapMangledModuleLazy('.tagName)==="TEXTAREA"||', { +const ctxMenuCallbacks = mapMangledModuleLazy('closest("[contenteditable=true]")', { contextMenuCallbackWeb: filters.byCode('"[contenteditable=true]"'), contextMenuCallbackNative: filters.byCode('.getPropertyValue("-webkit-user-select")') }); From 29784ed997224d491eb03f37c09a9527abd61945 Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Wed, 4 Feb 2026 22:34:03 -0500 Subject: [PATCH 31/49] dynamic image modal api: fix patch --- src/plugins/_api/dynamicImageModalApi.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/_api/dynamicImageModalApi.ts b/src/plugins/_api/dynamicImageModalApi.ts index 775cdf030..420115f95 100644 --- a/src/plugins/_api/dynamicImageModalApi.ts +++ b/src/plugins/_api/dynamicImageModalApi.ts @@ -14,7 +14,8 @@ export default definePlugin({ description: "Allows you to omit either width or height when opening an image modal", patches: [ { - find: ".renderLinkComponent)?", + // TODO: bundler compat + find: /\.renderLinkComponent[)?]\?/, replacement: { // widthAndHeightPassed = w != null && w !== 0 && h == null || h === 0 match: /(?<=\i=)(null!=\i&&0!==\i)&&(null!=\i&&0!==\i)/, From c7ffbd204a61a3c65172ab78edf4379084162279 Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Wed, 4 Feb 2026 22:59:33 -0500 Subject: [PATCH 32/49] fakeNitro: fix patch --- src/plugins/fakeNitro/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/fakeNitro/index.tsx b/src/plugins/fakeNitro/index.tsx index 4a943e118..ac9d5b91a 100644 --- a/src/plugins/fakeNitro/index.tsx +++ b/src/plugins/fakeNitro/index.tsx @@ -293,7 +293,7 @@ export default definePlugin({ { // Patch the rendered message content to add fake nitro emojis or remove sticker links predicate: () => settings.store.transformEmojis || settings.store.transformStickers, - match: /(?=return{hasSpoilerEmbeds:\i,content:(\i))/, + match: /(?=return{hasSpoilerEmbeds:\i,hasBailedAst:\i,content:(\i))/, replace: (_, content) => `${content}=$self.patchFakeNitroEmojisOrRemoveStickersLinks(${content},arguments[2]?.formatInline);` } ] From b42c702f1e4274fd20eeff205daaf95bb174a481 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Wed, 4 Feb 2026 23:00:28 -0500 Subject: [PATCH 33/49] some fixes --- src/plugins/consoleShortcuts/index.ts | 16 +++++++++++----- src/plugins/customRPC/index.tsx | 2 +- src/plugins/fakeNitro/index.tsx | 2 +- src/plugins/imageZoom/index.tsx | 2 +- src/plugins/messageLogger/index.tsx | 2 +- src/plugins/pinDms/index.tsx | 10 +++++----- src/plugins/showHiddenThings/index.ts | 2 +- src/plugins/spotifyCrack/index.ts | 2 +- src/plugins/usrbg/index.tsx | 4 ++-- 9 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/plugins/consoleShortcuts/index.ts b/src/plugins/consoleShortcuts/index.ts index c163dd649..dd1e5238d 100644 --- a/src/plugins/consoleShortcuts/index.ts +++ b/src/plugins/consoleShortcuts/index.ts @@ -247,11 +247,17 @@ export default definePlugin({ patches: [ { - find: 'this,"_changeCallbacks",', - replacement: { - match: /\i\(this,"_changeCallbacks",/, - replace: "Reflect.defineProperty(this,Symbol.toStringTag,{value:this.getName(),configurable:!0,writable:!0,enumerable:!1}),$&" - } + find: "&&this.initializeIfNeeded()", + replacement: [ + { + match: /\i\(this,"_changeCallbacks",/, + replace: "Reflect.defineProperty(this,Symbol.toStringTag,{value:this.getName(),configurable:!0,writable:!0,enumerable:!1}),$&" + }, + { + match: /\i&&this\.initializeIfNeeded\(\)/, + replace: "$&,Reflect.defineProperty(this,Symbol.toStringTag,{value:this.getName(),configurable:!0,writable:!0,enumerable:!1})" + } + ] } ], diff --git a/src/plugins/customRPC/index.tsx b/src/plugins/customRPC/index.tsx index 8e3328e80..d41c904d0 100644 --- a/src/plugins/customRPC/index.tsx +++ b/src/plugins/customRPC/index.tsx @@ -225,7 +225,7 @@ export default definePlugin({ // Discord hides buttons on your own Rich Presence for some reason. This patch disables that behaviour patches: [ { - find: ".buttons.length)>=1", + find: ".USER_PROFILE_ACTIVITY_BUTTONS),", replacement: { match: /.getId\(\)===\i.id/, replace: "$& && false" diff --git a/src/plugins/fakeNitro/index.tsx b/src/plugins/fakeNitro/index.tsx index ac9d5b91a..13a5b5e82 100644 --- a/src/plugins/fakeNitro/index.tsx +++ b/src/plugins/fakeNitro/index.tsx @@ -299,7 +299,7 @@ export default definePlugin({ ] }, { - find: "}renderEmbeds(", + find: "}renderStickersAccessories(", replacement: [ { // Call our function to decide whether the embed should be ignored or not diff --git a/src/plugins/imageZoom/index.tsx b/src/plugins/imageZoom/index.tsx index 061407411..4bdfe4378 100644 --- a/src/plugins/imageZoom/index.tsx +++ b/src/plugins/imageZoom/index.tsx @@ -163,7 +163,7 @@ export default definePlugin({ patches: [ { - find: ".renderLinkComponent)?", + find: "disableArrowKeySeek:!0", replacement: [ { match: /useFullWidth:!0,shouldLink:/, diff --git a/src/plugins/messageLogger/index.tsx b/src/plugins/messageLogger/index.tsx index 4d765e9e6..ef32ad514 100644 --- a/src/plugins/messageLogger/index.tsx +++ b/src/plugins/messageLogger/index.tsx @@ -408,7 +408,7 @@ export default definePlugin({ { // Updated message transformer(?) - find: "THREAD_STARTER_MESSAGE?null==", + find: ".PREMIUM_REFERRAL&&(", replacement: [ { // Pass through editHistory & deleted & original attachments to the "edited message" transformer diff --git a/src/plugins/pinDms/index.tsx b/src/plugins/pinDms/index.tsx index b3aaa528e..71b863eb1 100644 --- a/src/plugins/pinDms/index.tsx +++ b/src/plugins/pinDms/index.tsx @@ -72,7 +72,7 @@ export default definePlugin({ patches: [ { - find: '"private-channels-".concat(', + find: '"dm-quick-launcher"===', replacement: [ { // Filter out pinned channels from the private channel list @@ -87,15 +87,15 @@ export default definePlugin({ // Rendering { - match: /"renderRow",(\i)=>{(?<="renderDM",.+?(\i\.\i),\{channel:.+?)/, + match: /renderRow(?:",|=)(\i)=>{(?<=renderDM(?:",|=).+?(\i\.\i),\{channel:.+?)/, replace: "$&if($self.isChannelIndex($1.section, $1.row))return $self.renderChannel($1.section,$1.row,$2)();" }, { - match: /"renderSection",(\i)=>{/, + match: /renderSection(?:",|=)(\i)=>{/, replace: "$&if($self.isCategoryIndex($1.section))return $self.renderCategory($1);" }, { - match: /"renderSection".{0,300}?"span",{/, + match: /renderSection(?:",|=).{0,300}?"span",{/, replace: "$&...$self.makeSpanProps()," }, @@ -105,7 +105,7 @@ export default definePlugin({ replace: "$1($2-$self.categoryLen())" }, { - match: /"getRowHeight",\((\i),(\i)\)=>{/, + match: /getRowHeight(?:",|=)\((\i),(\i)\)=>{/, replace: "$&if($self.isChannelHidden($1,$2))return 0;" }, diff --git a/src/plugins/showHiddenThings/index.ts b/src/plugins/showHiddenThings/index.ts index b788a8bd1..82ff7a77c 100644 --- a/src/plugins/showHiddenThings/index.ts +++ b/src/plugins/showHiddenThings/index.ts @@ -52,7 +52,7 @@ export default definePlugin({ }, }, { - find: "INVITES_DISABLED))||", + find: /\.INVITES_DISABLED\)(?:\))?\|\|/, predicate: () => settings.store.showInvitesPaused, replacement: { match: /\i\.\i\.can\(\i\.\i.MANAGE_GUILD,\i\)/, diff --git a/src/plugins/spotifyCrack/index.ts b/src/plugins/spotifyCrack/index.ts index 37504be2e..505e53a12 100644 --- a/src/plugins/spotifyCrack/index.ts +++ b/src/plugins/spotifyCrack/index.ts @@ -51,7 +51,7 @@ export default definePlugin({ }, }, { - find: '"displayName","SpotifyStore")', + find: "}getPlayableComputerDevices(){", replacement: [ { predicate: () => settings.store.noSpotifyAutoPause, diff --git a/src/plugins/usrbg/index.tsx b/src/plugins/usrbg/index.tsx index 86f122c8e..36efe355e 100644 --- a/src/plugins/usrbg/index.tsx +++ b/src/plugins/usrbg/index.tsx @@ -54,9 +54,9 @@ export default definePlugin({ settings, patches: [ { - find: '.banner)==null?"COMPLETE"', + find: ':"SHOULD_LOAD");', replacement: { - match: /(?<=void 0:)\i.getPreviewBanner\(\i,\i,\i\)/, + match: /\i(?:\?)?.getPreviewBanner\(\i,\i,\i\)(?=.{0,100}"COMPLETE")/, replace: "$self.patchBannerUrl(arguments[0])||$&" } From c04934c9502ae2d9d9ba6b62cec4fc55b84f45a0 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Wed, 4 Feb 2026 23:15:01 -0500 Subject: [PATCH 34/49] fix another shc patch --- src/plugins/showHiddenChannels/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/showHiddenChannels/index.tsx b/src/plugins/showHiddenChannels/index.tsx index 403f3cff8..0a8994194 100644 --- a/src/plugins/showHiddenChannels/index.tsx +++ b/src/plugins/showHiddenChannels/index.tsx @@ -147,7 +147,7 @@ export default definePlugin({ all: true, // Render null instead of the buttons if the channel is hidden replacement: { - match: /(?<="renderOpenChatButton",\(\)=>{)/, + match: /(?<=renderOpenChatButton(?:",|=)\(\)=>{)/, replace: "if($self.isHiddenChannel(this.props.channel))return null;" } }, From 8f4ff1845bfe5b72a34e6f0be0f913d82caa5785 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Wed, 4 Feb 2026 23:15:24 -0500 Subject: [PATCH 35/49] Fix Decor FileUpload --- src/plugins/decor/ui/modals/CreateDecorationModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/decor/ui/modals/CreateDecorationModal.tsx b/src/plugins/decor/ui/modals/CreateDecorationModal.tsx index f81135977..fa07cc312 100644 --- a/src/plugins/decor/ui/modals/CreateDecorationModal.tsx +++ b/src/plugins/decor/ui/modals/CreateDecorationModal.tsx @@ -16,7 +16,7 @@ import { closeAllModals, ModalCloseButton, ModalContent, ModalFooter, ModalHeade import { filters, findComponentByCodeLazy, mapMangledModuleLazy } from "@webpack"; import { Button, FluxDispatcher, Forms, GuildStore, NavigationRouter, Text, TextInput, useEffect, useMemo, UserStore, useState } from "@webpack/common"; -const FileUpload = findComponentByCodeLazy(".currentTarget.files)", "lineClamp:1"); +const FileUpload = findComponentByCodeLazy(".currentTarget.files", "lineClamp:1"); const { HelpMessage, HelpMessageTypes } = mapMangledModuleLazy('POSITIVE="positive', { HelpMessageTypes: filters.byProps("POSITIVE", "WARNING", "INFO"), From 7e773ea9ffe30f6cc994550b5a9155037e4cf5af Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Wed, 4 Feb 2026 23:18:33 -0500 Subject: [PATCH 36/49] BlurNSFW & MessageUpdaterAPI Fix --- src/plugins/_api/messageUpdater.ts | 2 +- src/plugins/blurNsfw/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/_api/messageUpdater.ts b/src/plugins/_api/messageUpdater.ts index 8f6cca26a..d029456e7 100644 --- a/src/plugins/_api/messageUpdater.ts +++ b/src/plugins/_api/messageUpdater.ts @@ -27,7 +27,7 @@ export default definePlugin({ patches: [ { // Message accessories have a custom logic to decide if they should render again, so we need to make it not ignore changed message reference - find: "}renderEmbeds(", + find: "}renderStickersAccessories(", replacement: { match: /(?<=this.props,\i,\[)"message",/, replace: "" diff --git a/src/plugins/blurNsfw/index.ts b/src/plugins/blurNsfw/index.ts index 358c986b0..1681f8c57 100644 --- a/src/plugins/blurNsfw/index.ts +++ b/src/plugins/blurNsfw/index.ts @@ -45,7 +45,7 @@ export default definePlugin({ patches: [ { - find: "}renderEmbeds(", + find: "}renderStickersAccessories(", replacement: [ { match: /(\.renderReactions\(\i\).+?className:)/, From 662a2bdecd7017b45231eebb57d88d8ed00bc564 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Wed, 4 Feb 2026 23:19:53 -0500 Subject: [PATCH 37/49] merge some of 3963 changes --- src/plugins/experiments/index.tsx | 4 ++-- src/plugins/platformIndicators/index.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plugins/experiments/index.tsx b/src/plugins/experiments/index.tsx index 518eabd95..df750cdc6 100644 --- a/src/plugins/experiments/index.tsx +++ b/src/plugins/experiments/index.tsx @@ -30,7 +30,7 @@ import { Forms, React } from "@webpack/common"; import hideBugReport from "./hideBugReport.css?managed"; const KbdStyles = findByPropsLazy("key", "combo"); -const BugReporterExperiment = findLazy(m => m?.definition?.id === "2024-09_bug_reporter"); +const BugReporterExperiment = findLazy(m => m?.definition?.name === "2026-01-bug-reporter"); const modKey = IS_MAC ? "cmd" : "ctrl"; const altKey = IS_MAC ? "opt" : "alt"; @@ -130,7 +130,7 @@ export default definePlugin({ } ], - start: () => !BugReporterExperiment.getCurrentConfig().hasBugReporterAccess && enableStyle(hideBugReport), + start: () => !BugReporterExperiment.getConfig().hasBugReporterAccess && enableStyle(hideBugReport), stop: () => disableStyle(hideBugReport), settingsAboutComponent: () => { diff --git a/src/plugins/platformIndicators/index.tsx b/src/plugins/platformIndicators/index.tsx index 1751033e8..8bd50e6e9 100644 --- a/src/plugins/platformIndicators/index.tsx +++ b/src/plugins/platformIndicators/index.tsx @@ -236,8 +236,8 @@ export default definePlugin({ }, { // Fix sizes for mobile indicators which aren't online - match: /(?<=\(\i\.status,)(\i)(?=,(\i),\i\))/, - replace: (_, userStatus, isMobile) => `${isMobile}?"online":${userStatus}` + match: /(?<=\(\i\.status,)(\i)(?=,\{.{0,15}isMobile:(\i))/, + replace: '$2?"online":$1' }, { // Make isMobile true no matter the status From 18fe0cf4b02e2a0b0256b85129535d6b132fa46e Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Wed, 4 Feb 2026 23:55:35 -0500 Subject: [PATCH 38/49] fix bettergif* decor shc --- src/plugins/betterGifAltText/index.ts | 2 +- src/plugins/betterGifPicker/index.ts | 16 +++++++++++----- src/plugins/decor/index.tsx | 6 +++++- src/plugins/showHiddenChannels/index.tsx | 2 +- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/plugins/betterGifAltText/index.ts b/src/plugins/betterGifAltText/index.ts index 5d9b188ea..0a381e547 100644 --- a/src/plugins/betterGifAltText/index.ts +++ b/src/plugins/betterGifAltText/index.ts @@ -26,7 +26,7 @@ export default definePlugin({ "Change GIF alt text from simply being 'GIF' to containing the gif tags / filename", patches: [ { - find: '"onCloseImage",', + find: ".modalContext})};", replacement: { match: /(return.{0,10}\.jsx.{0,50}isWindowFocused)/, replace: diff --git a/src/plugins/betterGifPicker/index.ts b/src/plugins/betterGifPicker/index.ts index 9d7d8db41..bc39c6b5c 100644 --- a/src/plugins/betterGifPicker/index.ts +++ b/src/plugins/betterGifPicker/index.ts @@ -13,11 +13,17 @@ export default definePlugin({ authors: [Devs.Samwich], patches: [ { - find: '"state",{resultType:', - replacement: [{ - match: /(?<="state",{resultType:)null/, - replace: '"Favorites"' - }] + find: "renderHeaderContent(){", + replacement: [ + { + match: /(?<="state",{resultType:)null/, + replace: '"Favorites"' + }, + { + match: /(?<=state={resultType:)null/, + replace: '"Favorites"' + } + ] } ] }); diff --git a/src/plugins/decor/index.tsx b/src/plugins/decor/index.tsx index 6e8e53f16..a055fe1e9 100644 --- a/src/plugins/decor/index.tsx +++ b/src/plugins/decor/index.tsx @@ -50,7 +50,7 @@ export default definePlugin({ find: "80,onlyAnimateOnHoverOrFocus:!", replacement: [ { - match: /(?<==)\i=>{let{children.{20,200}isSelected:\i=!1\}=\i/, + match: /(?<==)\i=>{let{children.{20,200}isSelected:\i=!1.{0,5}\}=\i/, replace: "$self.DecorationGridItem=$&", }, { @@ -106,6 +106,10 @@ export default definePlugin({ { match: /(?<=userValue.{0,25}void 0:)((\i)\.avatarDecoration)/, replace: "$self.useUserDecorAvatarDecoration($2)??$1" + }, + { + match: /(?<=userValue:)((\i)(?:.{0,10})?\.avatarDecoration)/, + replace: "$self.useUserDecorAvatarDecoration($2)??$1" } ] })), diff --git a/src/plugins/showHiddenChannels/index.tsx b/src/plugins/showHiddenChannels/index.tsx index 0a8994194..f1b08c654 100644 --- a/src/plugins/showHiddenChannels/index.tsx +++ b/src/plugins/showHiddenChannels/index.tsx @@ -200,7 +200,7 @@ export default definePlugin({ }, { // Hide the new version of unreads box for hidden channels - find: '"ChannelListUnreadsStore",', + find: '"ChannelListUnreadsStore"', replacement: { match: /(?<=\.id\)\))(?=&&\(0,\i\.\i\)\((\i)\))/, replace: (_, channel) => `&&!$self.isHiddenChannel(${channel})` From 22e453f3623f18c937d82e97c5374ad3ed4ec349 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 5 Feb 2026 00:08:58 -0500 Subject: [PATCH 39/49] migrate SettingsRouter + more fixes --- src/Vencord.ts | 4 ++-- src/plugins/betterSessions/index.tsx | 7 +++---- src/plugins/fullSearchContext/index.tsx | 2 +- src/plugins/reviewDB/components/ReviewsView.tsx | 2 +- src/plugins/webKeybinds.web/index.ts | 2 +- src/webpack/common/utils.ts | 4 ++-- 6 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/Vencord.ts b/src/Vencord.ts index d451e9f28..86a2e8e34 100644 --- a/src/Vencord.ts +++ b/src/Vencord.ts @@ -34,6 +34,7 @@ import { debounce } from "@shared/debounce"; import { IS_WINDOWS } from "@utils/constants"; import { createAndAppendStyle } from "@utils/css"; import { StartAt } from "@utils/types"; +import { SettingsRouter } from "@webpack/common"; import { get as dsGet } from "./api/DataStore"; import { NotificationData, showNotification } from "./api/Notifications"; @@ -44,7 +45,6 @@ import { localStorage } from "./utils/localStorage"; import { relaunch } from "./utils/native"; import { checkForUpdates, update, UpdateLogger } from "./utils/updater"; import { onceReady } from "./webpack"; -import { SettingsRouter } from "./webpack/common"; import { patches } from "./webpack/patchWebpack"; if (IS_REPORTER) { @@ -68,7 +68,7 @@ async function syncSettings() { body: "We've noticed you have cloud integrations enabled in another client! Due to limitations, you will " + "need to re-authenticate to continue using them. Click here to go to the settings page to do so!", color: "var(--yellow-360)", - onClick: () => SettingsRouter.open("VencordCloud") + onClick: () => SettingsRouter.openUserSettings("vencord_cloud_panel") }); return; } diff --git a/src/plugins/betterSessions/index.tsx b/src/plugins/betterSessions/index.tsx index 78aea6133..55f2bf444 100644 --- a/src/plugins/betterSessions/index.tsx +++ b/src/plugins/betterSessions/index.tsx @@ -23,15 +23,14 @@ import { definePluginSettings } from "@api/Settings"; import ErrorBoundary from "@components/ErrorBoundary"; import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; -import { findByPropsLazy, findComponentByCodeLazy, findCssClassesLazy, findStoreLazy } from "@webpack"; -import { Constants, React, RestAPI, Tooltip } from "@webpack/common"; +import { findComponentByCodeLazy, findCssClassesLazy, findStoreLazy } from "@webpack"; +import { Constants, React, RestAPI, SettingsRouter, Tooltip } from "@webpack/common"; import { RenameButton } from "./components/RenameButton"; import { Session, SessionInfo } from "./types"; import { fetchNamesFromDataStore, getDefaultName, GetOsColor, GetPlatformIcon, savedSessionsCache, saveSessionsToDataStore } from "./utils"; const AuthSessionsStore = findStoreLazy("AuthSessionsStore"); -const UserSettingsModal = findByPropsLazy("saveAccountChanges", "open"); const TimestampClasses = findCssClassesLazy("timestamp", "blockquoteContainer"); const SessionIconClasses = findCssClassesLazy("sessionIcon"); @@ -175,7 +174,7 @@ export default definePlugin({ title: "BetterSessions", body: `New session:\n${session.client_info.os} · ${session.client_info.platform} · ${session.client_info.location}`, permanent: true, - onClick: () => UserSettingsModal.open("Sessions") + onClick: () => SettingsRouter.open("sessions_panel") }); } diff --git a/src/plugins/fullSearchContext/index.tsx b/src/plugins/fullSearchContext/index.tsx index d5b9c8a1e..2f20cd53b 100644 --- a/src/plugins/fullSearchContext/index.tsx +++ b/src/plugins/fullSearchContext/index.tsx @@ -34,7 +34,7 @@ interface CopyIdMenuItemProps { } let CopyIdMenuItem: (props: CopyIdMenuItemProps) => React.ReactElement | null = NoopComponent; -waitFor(filters.componentByCode('"devmode-copy-id-".concat'), m => CopyIdMenuItem = m); +waitFor(filters.componentByCode('"cannot copy null text"'), m => CopyIdMenuItem = m); function MessageMenu({ message, channel, onHeightUpdate }) { const canReport = message.author && diff --git a/src/plugins/reviewDB/components/ReviewsView.tsx b/src/plugins/reviewDB/components/ReviewsView.tsx index 7de4044a7..675bfe614 100644 --- a/src/plugins/reviewDB/components/ReviewsView.tsx +++ b/src/plugins/reviewDB/components/ReviewsView.tsx @@ -31,7 +31,7 @@ const Transforms = findByPropsLazy("insertNodes", "textToText"); const Editor = findByPropsLazy("start", "end", "toSlateRange"); const ChatInputTypes = findByPropsLazy("FORM", "USER_PROFILE"); const InputComponent = findComponentByCodeLazy("editorClassName", "CHANNEL_TEXT_AREA"); -const createChannelRecordFromServer = findByCodeLazy(".GUILD_TEXT])", "fromServer)"); +const createChannelRecordFromServer = findByCodeLazy(".GUILD_TEXT]", "fromServer)"); interface UserProps { discordId: string; diff --git a/src/plugins/webKeybinds.web/index.ts b/src/plugins/webKeybinds.web/index.ts index 6a0da3573..783f965d9 100644 --- a/src/plugins/webKeybinds.web/index.ts +++ b/src/plugins/webKeybinds.web/index.ts @@ -55,7 +55,7 @@ export default definePlugin({ break; case ",": e.preventDefault(); - SettingsRouter.open("My Account"); + SettingsRouter.openUserSettings("my_account_panel"); break; default: if (e.key >= "1" && e.key <= "9") { diff --git a/src/webpack/common/utils.ts b/src/webpack/common/utils.ts index c76c3ead5..368d4d108 100644 --- a/src/webpack/common/utils.ts +++ b/src/webpack/common/utils.ts @@ -143,7 +143,7 @@ export const UploadHandler = { export const ApplicationAssetUtils = mapMangledModuleLazy("getAssetImage: size must === [", { fetchAssetIds: filters.byCode('.startsWith("http:")', ".dispatch({"), - getAssetFromImageURL: filters.byCode("].serialize(", ',":"'), + getAssetFromImageURL: filters.byCode("].serialize(", ":null"), getAssetImage: filters.byCode("getAssetImage: size must === ["), getAssets: filters.byCode(".assets") }); @@ -160,7 +160,7 @@ export const ChannelRouter: t.ChannelRouter = mapMangledModuleLazy('"Thread must }); export let SettingsRouter: any; -waitFor(["open", "saveAccountChanges"], m => SettingsRouter = m); +waitFor(["openUserSettings", "USER_SETTINGS_MODAL_KEY"], m => SettingsRouter = m); export const PermissionsBits: t.PermissionsBits = findLazy(m => typeof m.ADMINISTRATOR === "bigint"); From 043dcf76743a22d81addfa8bc9f6b56ee974b50b Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 5 Feb 2026 00:56:32 -0500 Subject: [PATCH 40/49] fix usetoken wssf viewicons ump & pindms --- .../pinDms/components/CreateCategoryModal.tsx | 3 ++- src/plugins/userMessagesPronouns/index.ts | 2 +- src/plugins/viewIcons/index.tsx | 14 ++++++++++---- src/plugins/webScreenShareFixes.web/index.ts | 10 +++++++++- src/webpack/common/components.ts | 2 +- 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/plugins/pinDms/components/CreateCategoryModal.tsx b/src/plugins/pinDms/components/CreateCategoryModal.tsx index 4f2df28bd..739efb69b 100644 --- a/src/plugins/pinDms/components/CreateCategoryModal.tsx +++ b/src/plugins/pinDms/components/CreateCategoryModal.tsx @@ -24,7 +24,8 @@ interface ColorPickerWithSwatchesProps { const ColorPickerWithSwatches = findComponentByCodeLazy('id:"color-picker"'); -export const requireSettingsMenu = extractAndLoadChunksLazy(['name:"UserSettings"'], /createPromise:.{0,20}(\i\.\i\("?.+?"?\).*?).then\(\i\.bind\(\i,"?(.+?)"?\)\).{0,50}"UserSettings"/); +// 701663 this is terrible imo +export const requireSettingsMenu = extractAndLoadChunksLazy(['"AppSkeleton"'], /createPromise:.{0,20}(\i\.\i\("?.+?"?\).*?).then\(\i\.bind\(\i,"?(.+?)"?\)\).{0,50}\}\),(?=.{0,15}createPromise.*?\}\),)/); const cl = classNameFactory("vc-pindms-modal-"); diff --git a/src/plugins/userMessagesPronouns/index.ts b/src/plugins/userMessagesPronouns/index.ts index 9eaab235f..56721e11f 100644 --- a/src/plugins/userMessagesPronouns/index.ts +++ b/src/plugins/userMessagesPronouns/index.ts @@ -44,7 +44,7 @@ export default definePlugin({ replacement: [ { // Add next to username (compact mode) - match: /className:\i\(\)\(\i\.className(?:,\i\.clickable)?,\i\)}\)\),(?=\i)/g, + match: /className:\i\(\)\(\i\.className(?:,\i\.\i)?,\i\)\}\)(?:\))?,(?=\i)/g, replace: "$&$self.CompactPronounsChatComponentWrapper(arguments[0]),", }, ] diff --git a/src/plugins/viewIcons/index.tsx b/src/plugins/viewIcons/index.tsx index 891a2c7c4..bbcebfaa4 100644 --- a/src/plugins/viewIcons/index.tsx +++ b/src/plugins/viewIcons/index.tsx @@ -206,10 +206,16 @@ export default definePlugin({ // Banners { find: 'backgroundColor:"COMPLETE"', - replacement: { - match: /(overflow:"visible",.{0,125}?!1\),)style:{(?=.+?backgroundImage:null!=(\i)\?"url\("\.concat\(\2,)/, - replace: (_, rest, bannerSrc) => `${rest}onClick:()=>${bannerSrc}!=null&&$self.openBanner(${bannerSrc}),style:{cursor:${bannerSrc}!=null?"pointer":void 0,` - } + replacement: [ + { + match: /(overflow:"visible",.{0,125}?!1\),)style:{(?=.+?backgroundImage:null!=(\i)\?"url\("\.concat\(\2,)/, + replace: (_, rest, bannerSrc) => `${rest}onClick:()=>${bannerSrc}!=null&&$self.openBanner(${bannerSrc}),style:{cursor:${bannerSrc}!=null?"pointer":void 0,` + }, + { + match: /(overflow:"visible",.{0,125}?!1\),)style:{(?=.+?backgroundImage:null!=(\i)\?`url\(\$\{\2\}\))/, + replace: (_, rest, bannerSrc) => `${rest}onClick:()=>${bannerSrc}!=null&&$self.openBanner(${bannerSrc}),style:{cursor:${bannerSrc}!=null?"pointer":void 0,` + } + ] }, // Group DMs top small & large icon { diff --git a/src/plugins/webScreenShareFixes.web/index.ts b/src/plugins/webScreenShareFixes.web/index.ts index 624423001..8eb2e6269 100644 --- a/src/plugins/webScreenShareFixes.web/index.ts +++ b/src/plugins/webScreenShareFixes.web/index.ts @@ -21,6 +21,10 @@ export default definePlugin({ match: /"x-google-max-bitrate=".concat\(\i\)/, replace: '"x-google-max-bitrate=".concat("80_000")' }, + { + match: /`x-google-max-bitrate=\$\{\i\}`/, + replace: '"x-google-max-bitrate=80_000"' + }, { match: ";level-asymmetry-allowed=1", replace: ";b=AS:800000;level-asymmetry-allowed=1" @@ -28,7 +32,11 @@ export default definePlugin({ { match: /;usedtx=".concat\((\i)\?"0":"1"\)/, replace: '$&.concat($1?";stereo=1;sprop-stereo=1":"")' - } + }, + { + match: /;usedtx=\$\{(\i)\?"0":"1"\}/, + replace: '$&${$1?";stereo=1;sprop-stereo=1":""}' + }, ] } ] diff --git a/src/webpack/common/components.ts b/src/webpack/common/components.ts index f44ba0343..e830e52ef 100644 --- a/src/webpack/common/components.ts +++ b/src/webpack/common/components.ts @@ -107,7 +107,7 @@ waitFor(m => { } const str = String(m); - return str.includes(".resolve({theme:null") && !str.includes("useMemo"); + return str.includes(".resolve({theme:") && str.includes('"refresh-fast-follow-avatars"') && !str.includes("useMemo"); }, m => useToken = m); export const MaskedLink = waitForComponent("MaskedLink", filters.componentByCode("MASKED_LINK)")); From 3a12e993d03bcd579a52aed8b6c6f19796111c0d Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 5 Feb 2026 00:59:12 -0500 Subject: [PATCH 41/49] fix bettersessions router --- src/plugins/betterSessions/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/betterSessions/index.tsx b/src/plugins/betterSessions/index.tsx index 55f2bf444..b6dabbaa0 100644 --- a/src/plugins/betterSessions/index.tsx +++ b/src/plugins/betterSessions/index.tsx @@ -174,7 +174,7 @@ export default definePlugin({ title: "BetterSessions", body: `New session:\n${session.client_info.os} · ${session.client_info.platform} · ${session.client_info.location}`, permanent: true, - onClick: () => SettingsRouter.open("sessions_panel") + onClick: () => SettingsRouter.openUserSettings("sessions_panel") }); } From 2bdd95b66d1eb96b4ff3f29de3efdbd8d7b539e0 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 5 Feb 2026 01:00:38 -0500 Subject: [PATCH 42/49] consoleshortcuts is stable compat --- src/plugins/consoleShortcuts/index.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/plugins/consoleShortcuts/index.ts b/src/plugins/consoleShortcuts/index.ts index dd1e5238d..3b35e89e4 100644 --- a/src/plugins/consoleShortcuts/index.ts +++ b/src/plugins/consoleShortcuts/index.ts @@ -249,10 +249,6 @@ export default definePlugin({ { find: "&&this.initializeIfNeeded()", replacement: [ - { - match: /\i\(this,"_changeCallbacks",/, - replace: "Reflect.defineProperty(this,Symbol.toStringTag,{value:this.getName(),configurable:!0,writable:!0,enumerable:!1}),$&" - }, { match: /\i&&this\.initializeIfNeeded\(\)/, replace: "$&,Reflect.defineProperty(this,Symbol.toStringTag,{value:this.getName(),configurable:!0,writable:!0,enumerable:!1})" From 9dd89f24693768cfe905d427b86e101d227530d6 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 5 Feb 2026 01:22:57 -0500 Subject: [PATCH 43/49] fix cj ma nml ras ta vr wr --- src/plugins/consoleJanitor/index.tsx | 52 +++++++++++++++------- src/plugins/mentionAvatars/index.tsx | 14 ++++-- src/plugins/normalizeMessageLinks/index.ts | 4 +- src/plugins/revealAllSpoilers/index.ts | 2 +- src/plugins/themeAttributes/index.ts | 14 ++++-- src/plugins/validReply/index.ts | 14 ++++-- src/plugins/whoReacted/index.tsx | 2 +- 7 files changed, 70 insertions(+), 32 deletions(-) diff --git a/src/plugins/consoleJanitor/index.tsx b/src/plugins/consoleJanitor/index.tsx index 038f8513a..7bba6cd95 100644 --- a/src/plugins/consoleJanitor/index.tsx +++ b/src/plugins/consoleJanitor/index.tsx @@ -147,10 +147,16 @@ export default definePlugin({ }, { find: "is not a valid locale.", - replacement: { - match: /\i\.error(?=\(""\.concat\(\i," is not a valid locale."\)\))/, - replace: "$self.Noop" - } + replacement: [ + { + match: /\i\.error(?=\(""\.concat\(\i," is not a valid locale."\)\))/, + replace: "$self.Noop" + }, + { + match: /\i\.error(?=\(`\$\{\i\} is not a valid locale.`)/, + replace: "$self.Noop" + } + ] }, { find: '"AppCrashedFatalReport: getLastCrash not supported."', @@ -161,10 +167,16 @@ export default definePlugin({ }, { find: "RPCServer:WSS", - replacement: { - match: /\i\.error\("Error: "\.concat\((\i)\.message/, - replace: '!$1.message.includes("EADDRINUSE")&&$&' - } + replacement: [ + { + match: /\i\.error\("Error: "\.concat\((\i)\.message/, + replace: '!$1.message.includes("EADDRINUSE")&&$&' + }, + { + match: /\i\.error\(`Error: \$\{\i\.message\}/, + replace: '!$1.message.includes("EADDRINUSE")&&$&' + } + ] }, { find: "Tried getting Dispatch instance before instantiated", @@ -182,17 +194,25 @@ export default definePlugin({ }, { find: "failed to send analytics events", - replacement: { - match: /console\.error\("\[analytics\] failed to send analytics events query: "\.concat\(\i\)\)/, - replace: "" - } + replacement: [ + { + match: /console\.error\("\[analytics\] failed to send analytics events query: "\.concat\(\i\)\)/, + replace: "" + }, + { + match: /console\.error\(`\[analytics\] failed to send analytics events query: \$\{\i\}`\)/, + replace: "" + } + ] }, { find: "Slow dispatch on", - replacement: { - match: /\i\.totalTime>\i&&\i\.verbose\("Slow dispatch on ".+?\)\);/, - replace: "" - } + replacement: [ + { + match: /\i\.totalTime>\i&&\i\.verbose\([`"]Slow dispatch on.{0,55}\);/, + replace: "" + }, + ] }, // Patches Discord generic logger function { diff --git a/src/plugins/mentionAvatars/index.tsx b/src/plugins/mentionAvatars/index.tsx index 3e8e7c9ee..741116c76 100644 --- a/src/plugins/mentionAvatars/index.tsx +++ b/src/plugins/mentionAvatars/index.tsx @@ -49,10 +49,16 @@ export default definePlugin({ patches: [{ find: ".USER_MENTION)", - replacement: { - match: /children:"@"\.concat\((null!=\i\?\i:\i)\)(?<=\.useName\((\i)\).+?)/, - replace: "children:$self.renderUsername({username:$1,user:$2})" - } + replacement: [ + { + match: /children:"@"\.concat\((null!=\i\?\i:\i)\)(?<=\.useName\((\i)\).+?)/, + replace: "children:$self.renderUsername({username:$1,user:$2})" + }, + { + match: /children:`@\$\{(\i\?\?\i)\}`(?<=\.useName\((\i)\).+?)/, + replace: "children:$self.renderUsername({username:$1,user:$2})" + } + ] }, { find: ".ROLE_MENTION)", diff --git a/src/plugins/normalizeMessageLinks/index.ts b/src/plugins/normalizeMessageLinks/index.ts index 82076ef20..335cf27fc 100644 --- a/src/plugins/normalizeMessageLinks/index.ts +++ b/src/plugins/normalizeMessageLinks/index.ts @@ -15,8 +15,8 @@ export default definePlugin({ { find: "#{intl::COPY_MESSAGE_LINK}", replacement: { - match: /\.concat\(location\.host\)/, - replace: ".concat($self.normalizeHost(location.host))", + match: /(?<=(?:.concat\(|\/\/\$\{))location\.host/, + replace: "$self.normalizeHost(location.host)", }, }, ], diff --git a/src/plugins/revealAllSpoilers/index.ts b/src/plugins/revealAllSpoilers/index.ts index 814abb202..173632d7a 100644 --- a/src/plugins/revealAllSpoilers/index.ts +++ b/src/plugins/revealAllSpoilers/index.ts @@ -32,7 +32,7 @@ export default definePlugin({ { find: ".removeObscurity,", replacement: { - match: /(?<="removeObscurity",(\i)=>{)/, + match: /(?<=removeObscurity(?:",|=)(\i)=>{)/, replace: (_, event) => `$self.reveal(${event});` } } diff --git a/src/plugins/themeAttributes/index.ts b/src/plugins/themeAttributes/index.ts index 9cb95874c..25753b39d 100644 --- a/src/plugins/themeAttributes/index.ts +++ b/src/plugins/themeAttributes/index.ts @@ -40,10 +40,16 @@ export default definePlugin({ // popout profiles { find: "#{intl::LABEL_WITH_ONLINE_STATUS}", - replacement: { - match: /src:null!=\i\?(\i).{1,50}"aria-hidden":!0/, - replace: "$&,style:$self.getAvatarStyles($1)" - } + replacement: [ + { + match: /src:null!=\i\?(\i).{1,50}"aria-hidden":!0/, + replace: "$&,style:$self.getAvatarStyles($1)" + }, + { + match: /src:(\i)\?\?void 0.{1,50}"aria-hidden":!0/, + replace: "$&,style:$self.getAvatarStyles($1)" + } + ] }, // chat avatars { diff --git a/src/plugins/validReply/index.ts b/src/plugins/validReply/index.ts index 0f0a198dd..d5d54195e 100644 --- a/src/plugins/validReply/index.ts +++ b/src/plugins/validReply/index.ts @@ -44,10 +44,16 @@ export default definePlugin({ }, { find: "ReferencedMessageStore", - replacement: { - match: /constructor\(\)\{\i\(this,"_channelCaches",new Map\)/, - replace: "$&;$self.setReplyStore(this);" - } + replacement: [ + { + match: /constructor\(\)\{\i\(this,"_channelCaches",new Map\)/, + replace: "$&;$self.setReplyStore(this);" + }, + { + match: /_channelCaches=new Map;/, + replace: "$&_=$self.setReplyStore(this);" + } + ] } ], diff --git a/src/plugins/whoReacted/index.tsx b/src/plugins/whoReacted/index.tsx index 723301164..7a39f35b2 100644 --- a/src/plugins/whoReacted/index.tsx +++ b/src/plugins/whoReacted/index.tsx @@ -99,7 +99,7 @@ export default definePlugin({ find: "cleanAutomaticAnchor(){", replacement: { - match: /constructor\(\i\)\{(?=.{0,100}automaticAnchor)/, + match: /constructor\(\i\)\{(?=.{0,100}(?:automaticAnchor|\.messages\.loadingMore))/, replace: "$&$self.setScrollObj(this);" } } From 0382042fed8ff69cd5da2058ca0f373ea0a46fe4 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 5 Feb 2026 01:28:44 -0500 Subject: [PATCH 44/49] fix missing capture in consolejan --- src/plugins/consoleJanitor/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/consoleJanitor/index.tsx b/src/plugins/consoleJanitor/index.tsx index 7bba6cd95..067fa270f 100644 --- a/src/plugins/consoleJanitor/index.tsx +++ b/src/plugins/consoleJanitor/index.tsx @@ -173,7 +173,7 @@ export default definePlugin({ replace: '!$1.message.includes("EADDRINUSE")&&$&' }, { - match: /\i\.error\(`Error: \$\{\i\.message\}/, + match: /\i\.error\(`Error: \$\{(\i)\.message\}/, replace: '!$1.message.includes("EADDRINUSE")&&$&' } ] From 1c0b96972e9b45d7de3eefb1df6c399dcc624b92 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 5 Feb 2026 01:46:29 -0500 Subject: [PATCH 45/49] . --- src/equicordplugins/betterActivities/index.tsx | 2 +- src/equicordplugins/customUserColors/index.tsx | 2 +- src/equicordplugins/ignoreCalls/index.tsx | 2 +- src/equicordplugins/remix/index.tsx | 2 +- src/equicordplugins/userpfp/index.tsx | 2 +- src/plugins/_api/commands.ts | 5 ----- src/plugins/betterGifPicker/index.ts | 4 ---- src/plugins/consoleJanitor/index.tsx | 12 ------------ src/plugins/decor/index.tsx | 4 ---- src/plugins/experiments/index.tsx | 7 +------ src/plugins/mentionAvatars/index.tsx | 8 ++------ src/plugins/showHiddenChannels/index.tsx | 7 ------- src/plugins/textReplace/index.tsx | 2 +- src/plugins/themeAttributes/index.ts | 4 ---- src/plugins/typingTweaks/index.tsx | 2 +- src/plugins/viewIcons/index.tsx | 4 ---- src/plugins/webScreenShareFixes.web/index.ts | 8 -------- 17 files changed, 10 insertions(+), 67 deletions(-) diff --git a/src/equicordplugins/betterActivities/index.tsx b/src/equicordplugins/betterActivities/index.tsx index 501c0a4b4..f5c35f122 100644 --- a/src/equicordplugins/betterActivities/index.tsx +++ b/src/equicordplugins/betterActivities/index.tsx @@ -27,7 +27,7 @@ export default definePlugin({ patches: [ { // Patch activity icons - find: '"StackedActivityStatus"', + find: '"ActivityStatus"),', replacement: [ { match: /(?<=className:\i,children:\[).*?(?=\i\(\),\i&&)/g, diff --git a/src/equicordplugins/customUserColors/index.tsx b/src/equicordplugins/customUserColors/index.tsx index f13221363..5244197e3 100644 --- a/src/equicordplugins/customUserColors/index.tsx +++ b/src/equicordplugins/customUserColors/index.tsx @@ -26,7 +26,7 @@ export let colors: Record = {}; })(); // needed for color picker to be available without opening settings (ty pindms!!) -const requireSettingsMenu = extractAndLoadChunksLazy(['name:"UserSettings"'], /createPromise:.{0,20}(\i\.\i\("?.+?"?\).*?).then\(\i\.bind\(\i,"?(.+?)"?\)\).{0,50}"UserSettings"/); +const requireSettingsMenu = extractAndLoadChunksLazy(['"AppSkeleton"'], /createPromise:.{0,20}(\i\.\i\("?.+?"?\).*?).then\(\i\.bind\(\i,"?(.+?)"?\)\).{0,50}\}\),(?=.{0,15}createPromise.*?\}\),)/); const ColorIcon = () => { return ( }; diff --git a/src/plugins/_api/commands.ts b/src/plugins/_api/commands.ts index 2af65b6f9..3a86a3cb9 100644 --- a/src/plugins/_api/commands.ts +++ b/src/plugins/_api/commands.ts @@ -52,11 +52,6 @@ export default definePlugin({ { find: "#{intl::COMMANDS_OPTIONAL_COUNT}", replacement: [ - { - // ...children: p?.name - match: /(?<=:(\i)\.displayDescription\}.{0,200}children:).{0,50}\.name(?=\}\))/, - replace: "$1.plugin||($&)" - }, { match: /children:(?=\i\?\?\i\?\.name)(?<=command:(\i),.+?)/, replace: "children:$1.plugin??" diff --git a/src/plugins/betterGifPicker/index.ts b/src/plugins/betterGifPicker/index.ts index 101e70c57..cb2675886 100644 --- a/src/plugins/betterGifPicker/index.ts +++ b/src/plugins/betterGifPicker/index.ts @@ -27,10 +27,6 @@ export default definePlugin({ { find: "renderHeaderContent(){", replacement: [ - { - match: /(?<="state",{resultType:)null/, - replace: '"Favorites"' - }, { match: /(?<=state={resultType:)null/, replace: '"Favorites"' diff --git a/src/plugins/consoleJanitor/index.tsx b/src/plugins/consoleJanitor/index.tsx index c0a52193b..bb2731552 100644 --- a/src/plugins/consoleJanitor/index.tsx +++ b/src/plugins/consoleJanitor/index.tsx @@ -149,10 +149,6 @@ export default definePlugin({ { find: "is not a valid locale.", replacement: [ - { - match: /\i\.error(?=\(""\.concat\(\i," is not a valid locale."\)\))/, - replace: "$self.Noop" - }, { match: /\i\.error(?=\(`\$\{\i\} is not a valid locale.`)/, replace: "$self.Noop" @@ -169,10 +165,6 @@ export default definePlugin({ { find: "RPCServer:WSS", replacement: [ - { - match: /\i\.error\("Error: "\.concat\((\i)\.message/, - replace: '!$1.message.includes("EADDRINUSE")&&$&' - }, { match: /\i\.error\(`Error: \$\{(\i)\.message\}/, replace: '!$1.message.includes("EADDRINUSE")&&$&' @@ -196,10 +188,6 @@ export default definePlugin({ { find: "failed to send analytics events", replacement: [ - { - match: /console\.error\("\[analytics\] failed to send analytics events query: "\.concat\(\i\)\)/, - replace: "" - }, { match: /console\.error\(`\[analytics\] failed to send analytics events query: \$\{\i\}`\)/, replace: "" diff --git a/src/plugins/decor/index.tsx b/src/plugins/decor/index.tsx index 77cccc6ba..5d77ff09c 100644 --- a/src/plugins/decor/index.tsx +++ b/src/plugins/decor/index.tsx @@ -103,10 +103,6 @@ export default definePlugin({ ].map(find => ({ find, replacement: [ - { - match: /(?<=userValue.{0,25}void 0:)((\i)\.avatarDecoration)/, - replace: "$self.useUserDecorAvatarDecoration($2)??$1" - }, { match: /(?<=userValue:)((\i)(?:.{0,10})?\.avatarDecoration)/, replace: "$self.useUserDecorAvatarDecoration($2)??$1" diff --git a/src/plugins/experiments/index.tsx b/src/plugins/experiments/index.tsx index cf5b8dae4..e80e1b433 100644 --- a/src/plugins/experiments/index.tsx +++ b/src/plugins/experiments/index.tsx @@ -131,7 +131,7 @@ export default definePlugin({ }, { // Expands the experiment regex to allow negative numbers as well as text in the last segment of the URL. - find: "?\"dev://experiment/\".concat", + find: '"^dev://experiment/', replacement: { match: /(\[0-9\]\+)/, replace: "[a-zA-Z0-9-]+" @@ -140,11 +140,6 @@ export default definePlugin({ { find: ".EXPERIMENT_TREATMENT&&null", replacement: [ - { - // Uses the label instead of the value for the button text in the experiment embed. - match: /"Clear Treatment ".concat\((\i).value\):"Apply Treatment ".concat\(\i.value\)/, - replace: '"Clear Treatment: ".concat($1.label):"Apply Treatment: ".concat($1.label)' - }, { // Allow linking experiments by their label instead of their value. match: /(?<=find\(\i=>)((\i).value===\i)/, diff --git a/src/plugins/mentionAvatars/index.tsx b/src/plugins/mentionAvatars/index.tsx index 658b6ec28..829f49e8e 100644 --- a/src/plugins/mentionAvatars/index.tsx +++ b/src/plugins/mentionAvatars/index.tsx @@ -53,10 +53,6 @@ export default definePlugin({ // HEY THOR UPDATE SHOW ME YOUR NAME IF THIS SHIT CHANGES TY :) find: ".USER_MENTION)", replacement: [ - { - match: /children:"@"\.concat\((null!=\i\?\i:\i)\)(?<=\.useName\((\i)\).+?)/, - replace: "children:$self.renderUsername({username:$1,user:$2,showMeYourNameMention:typeof showMeYourNameMention!=='undefined'?showMeYourNameMention:undefined})" - }, { match: /children:`@\$\{(\i\?\?\i)\}`(?<=\.useName\((\i)\).+?)/, replace: "children:$self.renderUsername({username:$1,user:$2,showMeYourNameMention:typeof showMeYourNameMention!=='undefined'?showMeYourNameMention:undefined})" @@ -72,9 +68,9 @@ export default definePlugin({ }, { // show avatar in the chat input box - find: '.hasUniqueUsername()?null:"#"', + find: ".hasUniqueUsername()?null:`#", replacement: { - match: /(?<=,(\i)\).{0,55})"@"\.concat\((\i)\)/, + match: /(?<=,(\i)\).{0,55})`@\$\{(\i)\}`/, replace: "$self.renderInputMention($2,$1)" } }], diff --git a/src/plugins/showHiddenChannels/index.tsx b/src/plugins/showHiddenChannels/index.tsx index 6ef86c425..43a270a5b 100644 --- a/src/plugins/showHiddenChannels/index.tsx +++ b/src/plugins/showHiddenChannels/index.tsx @@ -352,13 +352,6 @@ export default definePlugin({ match: /\i>0(?=&&!\i&&!\i)/, replace: m => `($self.isHiddenChannel(typeof shcChannel!=="undefined"?shcChannel:void 0,true)?true:${m})` }, - { - // Show only the plus text without overflowed children amount - // if the overflow amount is <= 0 and the component is used inside the HiddenChannelLockScreen - match: /(?<=`\+\$\{)\i(?=\})/, - replace: overflowTextAmount => "" + - `$self.isHiddenChannel(typeof shcChannel!=="undefined"?shcChannel:void 0,true)&&(${overflowTextAmount}-1)<=0?"":${overflowTextAmount}` - }, { // Show only the plus text without overflowed children amount // if the overflow amount is <= 0 and the component is used inside the HiddenChannelLockScreen diff --git a/src/plugins/textReplace/index.tsx b/src/plugins/textReplace/index.tsx index e22bcf1c8..be50bd63f 100644 --- a/src/plugins/textReplace/index.tsx +++ b/src/plugins/textReplace/index.tsx @@ -266,7 +266,7 @@ export default definePlugin({ { find: "!1,hideSimpleEmbedContent", replacement: { - match: /(let{toAST:.{0,125}?)\(null!=\i\?\i:\i\).content/, + match: /(let{toAST:.{0,125}?)\(\i\?\?\i\).content/, replace: "const textReplaceContent=$self.modifyIncomingMessage(arguments[2]?.contentMessage??arguments[1]);$1textReplaceContent" } }, diff --git a/src/plugins/themeAttributes/index.ts b/src/plugins/themeAttributes/index.ts index be34e7a5a..e71dec0ad 100644 --- a/src/plugins/themeAttributes/index.ts +++ b/src/plugins/themeAttributes/index.ts @@ -40,10 +40,6 @@ export default definePlugin({ { find: "#{intl::LABEL_WITH_ONLINE_STATUS}", replacement: [ - { - match: /src:null!=\i\?(\i).{1,50}"aria-hidden":!0/, - replace: "$&,style:$self.getAvatarStyles($1)" - }, { match: /src:(\i)\?\?void 0.{1,50}"aria-hidden":!0/, replace: "$&,style:$self.getAvatarStyles($1)" diff --git a/src/plugins/typingTweaks/index.tsx b/src/plugins/typingTweaks/index.tsx index 892c6147a..b71e93bfd 100644 --- a/src/plugins/typingTweaks/index.tsx +++ b/src/plugins/typingTweaks/index.tsx @@ -150,7 +150,7 @@ export default definePlugin({ ] }, { - find: "\"handleDismissInviteEducation\"", + find: "this.handleDismissInviteEducation", predicate: () => settings.store.amITyping, replacement: { match: /\i\.default\.getCurrentUser\(\)/, diff --git a/src/plugins/viewIcons/index.tsx b/src/plugins/viewIcons/index.tsx index e6d008f5f..ee678ed2d 100644 --- a/src/plugins/viewIcons/index.tsx +++ b/src/plugins/viewIcons/index.tsx @@ -206,10 +206,6 @@ export default definePlugin({ { find: 'backgroundColor:"COMPLETE"', replacement: [ - { - match: /(overflow:"visible",.{0,125}?!1\),)style:{(?=.+?backgroundImage:null!=(\i)\?"url\("\.concat\(\2,)/, - replace: (_, rest, bannerSrc) => `${rest}onClick:()=>${bannerSrc}!=null&&$self.openBanner(${bannerSrc}),style:{cursor:${bannerSrc}!=null?"pointer":void 0,` - }, { match: /(overflow:"visible",.{0,125}?!1\),)style:{(?=.+?backgroundImage:null!=(\i)\?`url\(\$\{\2\}\))/, replace: (_, rest, bannerSrc) => `${rest}onClick:()=>${bannerSrc}!=null&&$self.openBanner(${bannerSrc}),style:{cursor:${bannerSrc}!=null?"pointer":void 0,` diff --git a/src/plugins/webScreenShareFixes.web/index.ts b/src/plugins/webScreenShareFixes.web/index.ts index 8eb2e6269..e7fbc178e 100644 --- a/src/plugins/webScreenShareFixes.web/index.ts +++ b/src/plugins/webScreenShareFixes.web/index.ts @@ -17,10 +17,6 @@ export default definePlugin({ { find: "x-google-max-bitrate", replacement: [ - { - match: /"x-google-max-bitrate=".concat\(\i\)/, - replace: '"x-google-max-bitrate=".concat("80_000")' - }, { match: /`x-google-max-bitrate=\$\{\i\}`/, replace: '"x-google-max-bitrate=80_000"' @@ -29,10 +25,6 @@ export default definePlugin({ match: ";level-asymmetry-allowed=1", replace: ";b=AS:800000;level-asymmetry-allowed=1" }, - { - match: /;usedtx=".concat\((\i)\?"0":"1"\)/, - replace: '$&.concat($1?";stereo=1;sprop-stereo=1":"")' - }, { match: /;usedtx=\$\{(\i)\?"0":"1"\}/, replace: '$&${$1?";stereo=1;sprop-stereo=1":""}' From a01cf46f67404aa13c1460e2750fae8f123b4859 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 5 Feb 2026 01:50:12 -0500 Subject: [PATCH 46/49] Fix Questify --- src/equicordplugins/questify/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/equicordplugins/questify/index.tsx b/src/equicordplugins/questify/index.tsx index 20a0b9cb9..db582cfaf 100644 --- a/src/equicordplugins/questify/index.tsx +++ b/src/equicordplugins/questify/index.tsx @@ -1255,7 +1255,7 @@ export default definePlugin({ group: true, replacement: [ { - match: /(?<=voiceActivityChannel:\i\?\i:null}\);)/, + match: /(?<=\i\)&&"xs"===\i;)/, replace: "const shouldHideMembersListActivelyPlayingIcon=$self.shouldHideMembersListActivelyPlayingIcon();" }, { From 3f6b19bd2ebba4321f25e3dbaae280246aaa60fb Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 5 Feb 2026 01:51:41 -0500 Subject: [PATCH 47/49] ValidReply remove compat --- src/plugins/validReply/index.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/plugins/validReply/index.ts b/src/plugins/validReply/index.ts index d5d54195e..da0a25083 100644 --- a/src/plugins/validReply/index.ts +++ b/src/plugins/validReply/index.ts @@ -45,10 +45,6 @@ export default definePlugin({ { find: "ReferencedMessageStore", replacement: [ - { - match: /constructor\(\)\{\i\(this,"_channelCaches",new Map\)/, - replace: "$&;$self.setReplyStore(this);" - }, { match: /_channelCaches=new Map;/, replace: "$&_=$self.setReplyStore(this);" From 1611b4e15bfbd74e3da339236d3231145335d8da Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 5 Feb 2026 09:50:57 -0500 Subject: [PATCH 48/49] Fix Reporter Stable Crashing --- src/equicordplugins/_api/audioPlayer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/equicordplugins/_api/audioPlayer.ts b/src/equicordplugins/_api/audioPlayer.ts index e9e0d1906..e79227b39 100644 --- a/src/equicordplugins/_api/audioPlayer.ts +++ b/src/equicordplugins/_api/audioPlayer.ts @@ -24,7 +24,7 @@ export default definePlugin({ // Uses the audio as-is if external, otherwise checks for an internal Discord sound. // Also force loads the internal sounds module to account for the second patch group below, // as well as accounting for not calling the module in this patch when this.type is not DISCORD. - match: /(let \i=class.{0,900}?new Audio;\i.src=)((\i\(\d+\))\(`\.\/\$\{)this.name(\}\.mp3`\))/, + match: /(let \i=class.{0,900}?new Audio;\i.src=)((\i\(\d+\))(?:\(`\.\/\$\{|.{0,50}concat\())this.name((?:\}\.mp3`|,".mp3"\))\))/, replace: "$3;$1this.type!==$self.AudioType.DISCORD?this.audio:$2this.audio$4" }, { From 8f0db742ec0cf343b36feb6f3b3a4095d2f31259 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 5 Feb 2026 11:38:17 -0500 Subject: [PATCH 49/49] Decor: Fix Create Preview Modal --- src/plugins/decor/index.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/decor/index.tsx b/src/plugins/decor/index.tsx index 5d77ff09c..ae327cdae 100644 --- a/src/plugins/decor/index.tsx +++ b/src/plugins/decor/index.tsx @@ -114,7 +114,7 @@ export default definePlugin({ find: "#{intl::PREMIUM_UPSELL_PROFILE_AVATAR_DECO_INLINE_UPSELL_DESCRIPTION}", replacement: { match: /(#{intl::PREMIUM_UPSELL_PROFILE_AVATAR_DECO_INLINE_UPSELL_DESCRIPTION}.+?return null!=(\i)&&\()(null==\i)/, - replace: (_, rest, avatarDecoration, hasPurchase) => `${rest}(${avatarDecoration}.skuId!==$self.SKU_ID&&${hasPurchase})` + replace: (_, rest, avatarDecoration, hasPurchase) => `${rest}(${avatarDecoration}.skuId!==$self.SKU_ID&&${avatarDecoration}.skuId!==$self.RAW_SKU_ID&&${hasPurchase})` } } ], @@ -140,6 +140,7 @@ export default definePlugin({ }, SKU_ID, + RAW_SKU_ID, useUserDecorAvatarDecoration,