From ca5c58bfa88d694fe1c1a04655cfd03f77ae48a5 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Thu, 15 Jan 2026 00:19:45 +0100 Subject: [PATCH 1/3] VoiceMessages: fix 'Failed to finish recording' error --- src/plugins/voiceMessages/native.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/voiceMessages/native.ts b/src/plugins/voiceMessages/native.ts index bbc19c891..82da057de 100644 --- a/src/plugins/voiceMessages/native.ts +++ b/src/plugins/voiceMessages/native.ts @@ -5,18 +5,18 @@ */ import { app } from "electron"; -import { readFile } from "fs/promises"; +import { readFile, rm } from "fs/promises"; import { basename, normalize } from "path"; export async function readRecording(_, filePath: string) { filePath = normalize(filePath); const filename = basename(filePath); const discordBaseDirWithTrailingSlash = normalize(app.getPath("userData") + "/"); - console.log(filename, discordBaseDirWithTrailingSlash, filePath); - if (filename !== "recording.ogg" || !filePath.startsWith(discordBaseDirWithTrailingSlash)) return null; + if (!/^\d*recording\.ogg$/.test(filename) || !filePath.startsWith(discordBaseDirWithTrailingSlash)) return null; try { const buf = await readFile(filePath); + rm(filePath).catch(() => { }); return new Uint8Array(buf.buffer); } catch { return null; From e70747ce39ac950798605d7d26f1a9f00df62a2e Mon Sep 17 00:00:00 2001 From: Artavazd <90024173+Artavazdpet@users.noreply.github.com> Date: Thu, 15 Jan 2026 03:21:38 +0400 Subject: [PATCH 2/3] FakeNitro: improve emoji quality via lossless=true (#3907) --- src/plugins/fakeNitro/index.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/fakeNitro/index.tsx b/src/plugins/fakeNitro/index.tsx index 1ae640ac3..c117d5125 100644 --- a/src/plugins/fakeNitro/index.tsx +++ b/src/plugins/fakeNitro/index.tsx @@ -84,7 +84,7 @@ const settings = definePluginSettings({ description: "Size of the emojis when sending", type: OptionType.SLIDER, default: 48, - markers: [32, 48, 64, 96, 128, 160, 256, 512] + markers: [32, 48, 56, 64, 96, 128, 160, 256, 512] }, transformEmojis: { description: "Whether to transform fake emojis into real ones", @@ -862,6 +862,7 @@ export default definePlugin({ const url = new URL(link); url.searchParams.set("name", sticker.name); + url.searchParams.set("lossless", "true"); const linkText = s.hyperLinkText.replaceAll("{{NAME}}", sticker.name); @@ -881,6 +882,7 @@ export default definePlugin({ const url = new URL(IconUtils.getEmojiURL({ id: emoji.id, animated: emoji.animated, size: s.emojiSize })); url.searchParams.set("size", s.emojiSize.toString()); url.searchParams.set("name", emoji.name); + url.searchParams.set("lossless", "true"); const linkText = s.hyperLinkText.replaceAll("{{NAME}}", emoji.name); @@ -914,6 +916,7 @@ export default definePlugin({ const url = new URL(IconUtils.getEmojiURL({ id: emoji.id, animated: emoji.animated, size: s.emojiSize })); url.searchParams.set("size", s.emojiSize.toString()); url.searchParams.set("name", emoji.name); + url.searchParams.set("lossless", "true"); const linkText = s.hyperLinkText.replaceAll("{{NAME}}", emoji.name); From 799ecc38dde475999944180f4dc7fd9fc07c9c14 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Thu, 15 Jan 2026 00:22:39 +0100 Subject: [PATCH 3/3] FixImageQuality: fix webps not animating in chat --- src/plugins/fixImagesQuality/index.tsx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/plugins/fixImagesQuality/index.tsx b/src/plugins/fixImagesQuality/index.tsx index 527c8f416..98945c933 100644 --- a/src/plugins/fixImagesQuality/index.tsx +++ b/src/plugins/fixImagesQuality/index.tsx @@ -74,11 +74,10 @@ export default definePlugin({ const url = new URL(src); if (!url.pathname.startsWith("/attachments/")) return; - if (freeze) { - url.searchParams.set("animated", "false"); - - if (url.pathname.endsWith(".gif")) - url.searchParams.set("format", "webp"); + url.searchParams.set("animated", String(!freeze)); + if (freeze && url.pathname.endsWith(".gif")) { + // gifs don't support animated=false, so we have no choice but to use webp + url.searchParams.set("format", "webp"); } const isModal = !!trigger;