From ce4e84277e7de349f07e0d4d5820370d4c31f80a Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Wed, 26 Aug 2026 20:02:21 -0400 Subject: [PATCH 1/8] MessageLogger: Add setting to toggle deleted attachments logging (#4556) Co-authored-by: V --- src/plugins/messageLogger/index.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/plugins/messageLogger/index.tsx b/src/plugins/messageLogger/index.tsx index b598b7e5e..857da7b37 100644 --- a/src/plugins/messageLogger/index.tsx +++ b/src/plugins/messageLogger/index.tsx @@ -81,6 +81,12 @@ const settings = definePluginSettings({ description: "Whether to log edited messages", default: true, }, + logDeletedAttachments: { + type: OptionType.BOOLEAN, + description: "Whether to log deleted attachments", + default: true, + restartNeeded: true, + }, inlineEdits: { type: OptionType.BOOLEAN, description: "Whether to display edit history as part of message content", @@ -89,7 +95,7 @@ const settings = definePluginSettings({ ignoreBots: { type: OptionType.BOOLEAN, description: "Whether to ignore messages by bots", - default: false + default: true }, ignoreSelf: { type: OptionType.BOOLEAN, @@ -482,6 +488,7 @@ export default definePlugin({ // just mark deleted attachments as deleted on MESSAGE_UPDATE { match: /attachments:(\i)\.attachments\?\?\[\],/, + predicate: () => settings.store.logDeletedAttachments, replace: "attachments: $self.handleUpdateAttachments($1)," } ] From 991535e77611a7a25beb17cc5e722b2021df8efe Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Wed, 26 Aug 2026 20:12:20 -0400 Subject: [PATCH 2/8] ViewIcons: Fix opening unread group DMs (#4553) --- src/plugins/viewIcons/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/viewIcons/index.tsx b/src/plugins/viewIcons/index.tsx index 409eb5a5b..b67685bbb 100644 --- a/src/plugins/viewIcons/index.tsx +++ b/src/plugins/viewIcons/index.tsx @@ -248,7 +248,7 @@ export default definePlugin({ replacement: { match: /null==\i\.icon\?.+?src:(\(0,\i\.\i\).+?\))(?=[,}])/, // We have to check that icon is not an unread GDM in the server bar - replace: (m, iconUrl) => `${m},onClick:vcEvent=>arguments[0]?.size!=="SIZE_48"&&$self.openAvatar(${iconUrl},vcEvent)` + replace: (m, iconUrl) => `${m},onClick:vcEvent=>arguments[0]?.size!=="SIZE_40"&&$self.openAvatar(${iconUrl},vcEvent)` } }, // User DMs top small icon From 0723d49f5c9784dc6a12d62d341b3e8c318b1ea7 Mon Sep 17 00:00:00 2001 From: Davri <42148912+Davr1@users.noreply.github.com> Date: Thu, 27 Aug 2026 08:29:30 +0200 Subject: [PATCH 3/8] WebKeybinds: Re-add missing CTRL+, keybind (#4555) --- src/plugins/webKeybinds.web/index.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/plugins/webKeybinds.web/index.ts b/src/plugins/webKeybinds.web/index.ts index 98af85d42..9d88f6372 100644 --- a/src/plugins/webKeybinds.web/index.ts +++ b/src/plugins/webKeybinds.web/index.ts @@ -19,6 +19,7 @@ import { definePluginSettings } from "@api/Settings"; import { Devs, IS_MAC } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; +import { SettingsRouter } from "@webpack/common"; const settings = definePluginSettings({ @@ -64,6 +65,26 @@ export default definePlugin({ } ], + start() { + document.addEventListener("keydown", this.onKey); + }, + + stop() { + document.removeEventListener("keydown", this.onKey); + }, + + onKey(e: KeyboardEvent) { + const hasCtrl = e.ctrlKey || (e.metaKey && IS_MAC); + + // Cmd+, is a native shortcut on macos (Vesktop/src/main/mainWindow.ts) + const hasNativeShortcut = IS_VESKTOP && IS_MAC; + + if (hasCtrl && e.key === "," && !hasNativeShortcut) { + e.preventDefault(); + SettingsRouter.openUserSettings(); + } + }, + getBlockedKeybinds() { // Zoom shortcuts, allowing these would cause unpredictable zooming behavior on macos const blocked: string[] = ["mod+plus", "mod+minus", "mod+0"]; From ef80de67739de2cedce71eceab0dd08ddcbfed6d Mon Sep 17 00:00:00 2001 From: reservedbytes <94451745+reservedbytes@users.noreply.github.com> Date: Thu, 27 Aug 2026 06:36:58 +0000 Subject: [PATCH 4/8] ImageZoom: Fix magnifier showing a broken image for some plugins (#4507) --- src/plugins/imageZoom/components/Magnifier.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/plugins/imageZoom/components/Magnifier.tsx b/src/plugins/imageZoom/components/Magnifier.tsx index f80a9069c..0b8842d58 100644 --- a/src/plugins/imageZoom/components/Magnifier.tsx +++ b/src/plugins/imageZoom/components/Magnifier.tsx @@ -153,6 +153,10 @@ export const Magnifier = ErrorBoundary.wrap(({ instance, size: i const imageSrc = useMemo(() => { try { const imageUrl = new URL(instance.props.src); + + if (imageUrl.protocol !== "http:" && imageUrl.protocol !== "https:") + return instance.props.src; + if (imageUrl.pathname.startsWith("/attachments/")) imageUrl.hostname = "cdn.discordapp.com"; From bff6b594c782e95c76d7c98775800b481c57b22a Mon Sep 17 00:00:00 2001 From: August Date: Thu, 27 Aug 2026 01:56:41 -0500 Subject: [PATCH 5/8] BetterSessions: Add VR Platform and Horizon OS Device Platform Color (#4497) --- src/plugins/betterSessions/utils.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/betterSessions/utils.ts b/src/plugins/betterSessions/utils.ts index 658efc8ac..763f8bc48 100644 --- a/src/plugins/betterSessions/utils.ts +++ b/src/plugins/betterSessions/utils.ts @@ -55,6 +55,8 @@ export function GetOsColor(os: string) { case "Mac OS X": case "iOS": return ""; // Default to white/black (theme-dependent) + case "Horizon OS": // For Meta Quest (not to be confused with Horizon OS for the Nintendo Switch) + return "#0081fb"; // A bright blue, more vibrant and strong and a bit darker than Windows default: return "#f3799a"; // Pink } @@ -65,6 +67,7 @@ export function GetPlatformIcon(platform: string) { case "Discord Android": case "Discord iOS": case "Discord Client": + case "Discord VR": return DiscordIcon; case "Android Chrome": case "Chrome iOS": From bc680139be4526aa5525d33fbac8a271eb0cfd02 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Thu, 27 Aug 2026 17:31:50 +0200 Subject: [PATCH 6/8] fix plugins that modify text (FakeNitro, TextReplace) --- src/plugins/_api/messageEvents.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/_api/messageEvents.ts b/src/plugins/_api/messageEvents.ts index 739c7b8ec..6d1bc85d2 100644 --- a/src/plugins/_api/messageEvents.ts +++ b/src/plugins/_api/messageEvents.ts @@ -37,9 +37,9 @@ export default definePlugin({ { find: ".handleSendMessage,onResize:", replacement: { - // https://regex101.com/r/7iswuk/1 - match: /let (\i)=\i\.\i\.parse\((\i),.+?\.getSendMessageOptions\(\{.+?\}\)?;(?=.+?(\i)\.flags=)(?<=\)\(({.+?})\)\.then.+?)/, - replace: (m, parsedMessage, channel, options, props) => m + + // TODO: simplify once Discord decides on if this .then() callback should be async or not + match: /(?<=channel:\i\}\)\.then\()(?:async )?(\i=>.+?let (\i)=\i\.\i\.parse\((\i),.+?\.getSendMessageOptions\(\{.+?\}\)?;)(?=.+?(\i)\.flags=)(?<=\)\(({.+?})\)\.then.+?)/, + replace: (m, restCode, parsedMessage, channel, options, props) => "async " + restCode + `if(await Vencord.Api.MessageEvents._handlePreSend(${channel}.id,${parsedMessage},${options},${props}))` + "return{shouldClear:false,shouldRefocus:true};" } From be77396be854f0c70302e0667c41906d8a53dae7 Mon Sep 17 00:00:00 2001 From: Dave Date: Thu, 27 Aug 2026 09:45:23 -0600 Subject: [PATCH 7/8] WebScreenShareFixes: fix Discord bug causing high CPU usage (#4390) --- src/plugins/webScreenShareFixes.web/index.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/plugins/webScreenShareFixes.web/index.ts b/src/plugins/webScreenShareFixes.web/index.ts index 96af5d71d..e215ba9e2 100644 --- a/src/plugins/webScreenShareFixes.web/index.ts +++ b/src/plugins/webScreenShareFixes.web/index.ts @@ -10,7 +10,7 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "WebScreenShareFixes", authors: [Devs.Kaitlyn], - description: "Removes 2500kbps bitrate cap on chromium and vesktop clients.", + description: "Removes 2500kbps bitrate cap on chromium and vesktop clients and fixes CPU usage growing endlessly while screensharing.", tags: ["Voice"], enabledByDefault: true, @@ -27,6 +27,13 @@ export default definePlugin({ replace: '$&${$1?";stereo=1;sprop-stereo=1":""}' }, ] + }, + { + find: "ApplicationStreamPreviewUploadManager", + replacement: { + match: /(\i)\.removeAttribute\("srcObject"\)/, + replace: "$1.pause(),$1.srcObject=null" + } } ] }); From a1b1f0b122583cef7321b2be073f183f5235221f Mon Sep 17 00:00:00 2001 From: sadan <117494111+sadan4@users.noreply.github.com> Date: Thu, 27 Aug 2026 18:43:44 -0400 Subject: [PATCH 8/8] FakeNitro: fix custom client themes bypass (#4563) --- 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 b280a14d1..92b0e8234 100644 --- a/src/plugins/fakeNitro/index.tsx +++ b/src/plugins/fakeNitro/index.tsx @@ -320,7 +320,7 @@ export default definePlugin({ }, // Allow users to use custom client themes { - find: '("custom_themes_editor_footer")', + find: ".CLIENT_THEMES_EDITOR?", replacement: { match: /(?<=\i=)\(0,\i\.\i\)\(\i\.\i\.TIER_2\)(?=,|;)/g, replace: "true"