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 01/13] 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 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 02/13] 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 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 03/13] 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 04/13] 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 05/13] 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 06/13] 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 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 07/13] 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 08/13] 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 09/13] 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 10/13] 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 11/13] 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 12/13] 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 13/13] 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}` } ] },