From dd9846d4bd7486881e9bf598a3177af99300da64 Mon Sep 17 00:00:00 2001 From: oma <57739965+Eazvy@users.noreply.github.com> Date: Thu, 26 Feb 2026 19:46:14 -0500 Subject: [PATCH 1/9] ignoreCalls fix (#839) * fix(ignoreCalls): filter ongoing rings * fix(ignoreCalls): handle ongoingRings as object * working * fix(ignoreCalls): use array ongoingRings handling --- src/equicordplugins/ignoreCalls/index.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/equicordplugins/ignoreCalls/index.tsx b/src/equicordplugins/ignoreCalls/index.tsx index 1df54d557..2505ce860 100644 --- a/src/equicordplugins/ignoreCalls/index.tsx +++ b/src/equicordplugins/ignoreCalls/index.tsx @@ -19,14 +19,14 @@ import { FluxDispatcher, Menu, React, Tooltip, UserStore } from "@webpack/common interface CallUpdate { ringing: string[]; - ongoingRings: Record; + ongoingRings: string[]; messageId: string; region: string; } const args: CallUpdate = { ringing: [], - ongoingRings: {}, + ongoingRings: [], messageId: "", region: "", }; @@ -34,6 +34,8 @@ const args: CallUpdate = { const ignoredChannelIds = new Set(); const cl = classNameFactory("vc-ignore-calls-"); const Deafen = findComponentByCodeLazy("0-1.02-.1H3.05a9"); +const filterOngoingRings = (currentUserId: string): CallUpdate["ongoingRings"] => + args.ongoingRings.filter((id: string) => id !== currentUserId); const ContextMenuPatch: NavContextMenuPatchCallback = (children, { channel }: { channel: Channel; }) => { if (!channel || (!channel.isDM() && !channel.isGroupDM())) return; @@ -109,7 +111,7 @@ export default definePlugin({ flux: { async CALL_UPDATE({ ringing, ongoingRings, messageId, region }) { args.ringing = ringing || []; - args.ongoingRings = ongoingRings || {}; + args.ongoingRings = Array.isArray(ongoingRings) ? ongoingRings : []; args.messageId = messageId; args.region = region; } @@ -122,7 +124,7 @@ export default definePlugin({ type: "CALL_UPDATE", channelId: channel.id, ringing: args.ringing.filter((id: string) => id !== currentUserId), - ongoingRings: args.ongoingRings, + ongoingRings: filterOngoingRings(currentUserId), messageId: args.messageId, region: args.region }); @@ -143,7 +145,7 @@ export default definePlugin({ type: "CALL_UPDATE", channelId: channel.id, ringing: args.ringing.filter((id: string) => id !== currentUserId), - ongoingRings: args.ongoingRings, + ongoingRings: filterOngoingRings(currentUserId), messageId: args.messageId, region: args.region }); From a98246e2edcb5a7549a855819ab84520e99bd0f8 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 26 Feb 2026 19:47:22 -0500 Subject: [PATCH 2/9] ViewRawVariant: Update Label --- src/equicordplugins/viewRawVariant/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/equicordplugins/viewRawVariant/index.tsx b/src/equicordplugins/viewRawVariant/index.tsx index d90523a14..41597a401 100644 --- a/src/equicordplugins/viewRawVariant/index.tsx +++ b/src/equicordplugins/viewRawVariant/index.tsx @@ -118,7 +118,7 @@ function makeContextCallback( children.push( action(value)} icon={CopyIcon} />, From 5e32bbf471c59e06247ee549d9b0418ce6a0c218 Mon Sep 17 00:00:00 2001 From: Etorix <92535668+EtorixDev@users.noreply.github.com> Date: Fri, 27 Feb 2026 14:16:57 -0800 Subject: [PATCH 3/9] Revert SMYN 832 (#843) This reverts commit 69ad255cba7ea3124b075b7fe5d75ba52925fa2b. --- src/plugins/showMeYourName/index.tsx | 30 +++++++++++++--------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/plugins/showMeYourName/index.tsx b/src/plugins/showMeYourName/index.tsx index 8b5c8a57b..7c8e24582 100644 --- a/src/plugins/showMeYourName/index.tsx +++ b/src/plugins/showMeYourName/index.tsx @@ -20,7 +20,7 @@ import { classNameFactory, ModalCloseButton, ModalContent, ModalFooter, ModalHea import definePlugin, { OptionType } from "@utils/types"; import { GuildMember, Message, User } from "@vencord/discord-types"; import { findByCodeLazy, findStoreLazy } from "@webpack"; -import { ChannelStore, GuildMemberStore, GuildRoleStore, GuildStore, Menu, MessageStore, RelationshipStore, StreamerModeStore, TextInput, useEffect, useState } from "@webpack/common"; +import { ChannelStore, GuildMemberStore, GuildStore, Menu, MessageStore, RelationshipStore, StreamerModeStore, TextInput, useEffect, useState } from "@webpack/common"; import { JSX } from "react"; const SMYNC = classNameFactory(); @@ -480,9 +480,7 @@ function renderUsername( const ircColorsEnabled = isPluginEnabled(ircColors.name); - const authorTopRole = (author as GuildMember)?.guildId && (author as any)?.highestRoleId; - const authorTopRoleColor = authorTopRole && GuildRoleStore.getRole((author as GuildMember).guildId, authorTopRole)?.colorStrings; - const authorColorStrings = colorStrings || (author as any)?.colorStrings || authorTopRoleColor || null; + const authorColorStrings = colorStrings || (author as any)?.colorStrings || null; const authorDisplayNameStyles = (!inGuild && !ircColorsEnabled && (author as any)?.displayNameStyles) || null; const effectType = authorDisplayNameStyles ? getEffectType(authorDisplayNameStyles.effectId) : null; const effectCSSVars = authorDisplayNameStyles ? computeEffectCSSVars(authorDisplayNameStyles) : {}; @@ -492,9 +490,9 @@ function renderUsername( const shouldAnimateEffect = shouldShowEffect && !AccessibilityStore.useReducedMotion; const canUseGradient = ((author as GuildMember)?.guildId ? (GuildStore.getGuild((author as GuildMember).guildId) ?? {}).premiumFeatures?.features.includes("ENHANCED_ROLE_COLORS") : !inGuild); - const useTopStyle = isMention || isReactionsPopout || channel?.isDM() || channel?.isGroupDM(); - const topStyle = author ? resolveColor(authorColorStrings, authorDisplayNameStyles, "Role", canUseGradient, inGuild, ircColorsEnabled, isHovering) : null; - const hasGradient = !!topStyle?.gradient && Object.keys(topStyle.gradient).length > 0; + const useTopRoleStyle = isMention || isReactionsPopout || channel?.isDM() || channel?.isGroupDM(); + const topRoleStyle = author ? resolveColor(authorColorStrings, authorDisplayNameStyles, "Role", canUseGradient, inGuild, ircColorsEnabled, isHovering) : null; + const hasGradient = !!topRoleStyle?.gradient && Object.keys(topRoleStyle.gradient).length > 0; const textMutedValue = getComputedStyle(document.documentElement)?.getPropertyValue("--text-muted")?.trim() || "#72767d"; const options = splitTemplate(includedNames); @@ -649,7 +647,7 @@ function renderUsername( // Only mentions and reactions popouts should patch in the gradient glow or else a double glow will appear on messages. const hoveringClass = (isHovering ? " smyn-gradient-hovered" : ""); - const gradientClasses = useTopStyle + const gradientClasses = useTopRoleStyle ? "smyn-gradient smyn-gradient-inherit-bg" + hoveringClass : "smyn-gradient smyn-gradient-unset-bg" + hoveringClass; @@ -681,7 +679,7 @@ function renderUsername( @@ -690,7 +688,7 @@ function renderUsername( {first.wrapped} From 186c25a5b6de91f05dd97e767b9a44564cd4c54e Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Fri, 27 Feb 2026 18:52:43 -0500 Subject: [PATCH 4/9] Fix Broken Patches & Finds --- src/equicordplugins/_api/headerBar.ts | 2 +- .../clipsEnhancements.discordDesktop/index.tsx | 7 ------- src/equicordplugins/questify/index.tsx | 2 +- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/src/equicordplugins/_api/headerBar.ts b/src/equicordplugins/_api/headerBar.ts index 8f7edc595..ff05d2ee6 100644 --- a/src/equicordplugins/_api/headerBar.ts +++ b/src/equicordplugins/_api/headerBar.ts @@ -16,7 +16,7 @@ export default definePlugin({ { find: '?"BACK_FORWARD_NAVIGATION":', replacement: { - match: /(?<="HELP".{0,150}className:\i\}\))(?=\])/, + match: /(?<="HELP"===.{0,150}className:\i\.\i\}\))(?=\])/, replace: ",...Vencord.Api.HeaderBar._addHeaderBarButtons()" } }, diff --git a/src/equicordplugins/clipsEnhancements.discordDesktop/index.tsx b/src/equicordplugins/clipsEnhancements.discordDesktop/index.tsx index 5fa392b2c..8a410c26b 100644 --- a/src/equicordplugins/clipsEnhancements.discordDesktop/index.tsx +++ b/src/equicordplugins/clipsEnhancements.discordDesktop/index.tsx @@ -103,13 +103,6 @@ export default definePlugin({ match: /defaultConfig:\{enableClips:!\d,ignorePlatformRestriction:!\d,showClipsHeaderEntrypoint:!\d,enableScreenshotKeybind:!\d,enableVoiceOnlyClips:!\d,enableAdvancedSignals:!\d\}/, replace: "defaultConfig:{enableClips:!0,ignorePlatformRestriction:$self.settings.store.ignorePlatformRestriction,showClipsHeaderEntrypoint:!0,enableScreenshotKeybind:$self.settings.store.enableScreenshotKeybind,enableVoiceOnlyClips:$self.settings.store.enableVoiceOnlyClips,enableAdvancedSignals:$self.settings.store.enableAdvancedSignals}" } - }, - { - find: "2023-10_viewer_clipping", - replacement: { - match: /defaultConfig:\{enableViewerClipping:!\d,ignoreSenderPreference:!\d\}/, - replace: "defaultConfig:{enableViewerClipping:!0,ignoreSenderPreference:!0}" - } } ], diff --git a/src/equicordplugins/questify/index.tsx b/src/equicordplugins/questify/index.tsx index 8c9d1ee14..bac0596f4 100644 --- a/src/equicordplugins/questify/index.tsx +++ b/src/equicordplugins/questify/index.tsx @@ -1229,7 +1229,7 @@ export default definePlugin({ }, { // Hides Quests tab in the DMs tab list. - find: "QUEST_HOME_V2):", + find: ".QUEST_HOME):", replacement: [ { match: /(?<="family-center"\):null,)/, From a4d517b9eb6db37fed8e9ebb5925b4c9b1894df6 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Fri, 27 Feb 2026 19:04:50 -0500 Subject: [PATCH 5/9] AudioPlayerAPI: Fix Find --- 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 e79227b39..19d76d043 100644 --- a/src/equicordplugins/_api/audioPlayer.ts +++ b/src/equicordplugins/_api/audioPlayer.ts @@ -72,7 +72,7 @@ export default definePlugin({ // regardless of if the "discodo" effect is enabled or not. This is due to the volume setter // internally calling the ensureAudio function which is where the internal sounds module is loaded // by default. To account for this, the module is force loaded in the first patch in the above group. - find: "UPDATE_OPEN_ON_STARTUP", + find: '"UPDATE_OPEN_ON_STARTUP"', group: true, replacement: [ { From 1aca9480602f295097e6d5add378dd51b2b273b4 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Sun, 1 Mar 2026 15:04:19 -0500 Subject: [PATCH 6/9] Update styleguide.md --- .gemini/styleguide.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.gemini/styleguide.md b/.gemini/styleguide.md index 51258faee..3d8e4c4c8 100644 --- a/.gemini/styleguide.md +++ b/.gemini/styleguide.md @@ -76,8 +76,7 @@ Flag these and suggest the fix: | `value \|\| defaultValue` | `value ?? defaultValue` | `\|\|` falsifies `0`, `""`, `false` | | `` `${classA} ${classB}` `` | `classes(classA, classB)` | Handles null/false gracefully | | `"vc-plugin-class"` hardcoded | `cl("class")` via `classNameFactory` | Consistent, typo-proof | -| `console.log/warn/error` | Remove it | No logging in plugin code | -| `new Logger(...)` / `logger.log(...)` | Remove it | No logging in plugin code | +| `console.log/warn` | Remove it | No logging in plugin code | | `cdn.discordapp.com/avatars/...` | `IconUtils.getUserAvatarURL(user)` | Handles animated, sizing, CDN | | `cdn.discordapp.com/icons/...` | `IconUtils.getGuildIconURL(...)` | Same | | `cdn.discordapp.com/banners/...` | `IconUtils.getUserBannerURL(...)` | Same | @@ -317,8 +316,7 @@ stop() {} - **No overengineering.** No premature abstractions, no "just in case" handling, no features not requested. Three similar lines beats a one-use helper. If code can be half the size and do the same thing, it should be. - **No bloat.** Flag unnecessary wrapper functions, redundant type annotations, excessive error handling for things that can't fail, useless try/catch around synchronous code, or 50 lines doing what 10 could do. Code should be lean. - **No unused imports.** Every import must be referenced. -- **No logging in plugin code.** No `console.log/warn/error`, no `Logger`. Remove all logging statements. -- **No empty catch blocks.** Handle every error (show toast, return fallback, rethrow, etc.). +- **No logging in plugin code besides for errors.** No `console.log/warn`. --- @@ -378,6 +376,6 @@ If a PR reimplements any of these, flag it. They already exist: ## Review Severity 1. **CRITICAL** — `any` types, hardcoded CDN/API URLs, direct DOM manipulation, security issues, massive overengineering/bloat, suspected AI slop (note it, but still review everything) -2. **HIGH** — Missing useEffect cleanup, forbidden React APIs, hardcoded class names, logging statements (console or Logger), missing definePluginSettings, unnecessary abstractions +2. **HIGH** — Missing useEffect cleanup, forbidden React APIs, hardcoded class names, console logging statements, missing definePluginSettings, unnecessary abstractions 3. **MEDIUM** — Anti-patterns (`||` instead of `??`), utility reimplementations, commented-out code, bad description format, excessive comments 4. **LOW** — Style preferences, minor performance wins, organization From 275f41468106cd61c49751db5e0b5727b2662368 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Sun, 1 Mar 2026 15:05:56 -0500 Subject: [PATCH 7/9] Update styleguide.md --- .gemini/styleguide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gemini/styleguide.md b/.gemini/styleguide.md index 3d8e4c4c8..2622fe4a0 100644 --- a/.gemini/styleguide.md +++ b/.gemini/styleguide.md @@ -245,7 +245,7 @@ Vencord.Plugins.plugins["OtherPlugin"].someFunction(); ## Text and Descriptions -- Plugin and setting descriptions: capital first letter, end with period. +- Plugin and setting descriptions: capital first letter, for descriptions end with a period. - Error messages and toasts: natural human text, no dashes or robotic formatting. ```typescript From 2d4edfedd636eb1d2e73d11af1855545adcfd2c5 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Sun, 1 Mar 2026 15:06:58 -0500 Subject: [PATCH 8/9] Update styleguide.md --- .gemini/styleguide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gemini/styleguide.md b/.gemini/styleguide.md index 2622fe4a0..9be45b31e 100644 --- a/.gemini/styleguide.md +++ b/.gemini/styleguide.md @@ -32,7 +32,7 @@ import { EquicordDevs } from "@utils/constants"; export default definePlugin({ name: "PluginName", // PascalCase, matches directory name - description: "Does something.", // Capital first, period at end + description: "Does something", // Capital first authors: [EquicordDevs.Name], // EquicordDevs for new, Devs for upstream }); ``` @@ -245,7 +245,7 @@ Vencord.Plugins.plugins["OtherPlugin"].someFunction(); ## Text and Descriptions -- Plugin and setting descriptions: capital first letter, for descriptions end with a period. +- Plugin and setting descriptions: capital first letter. - Error messages and toasts: natural human text, no dashes or robotic formatting. ```typescript From ed2d59d3e26386de5b8706ab532ffdd3321e8b32 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Sun, 1 Mar 2026 15:08:38 -0500 Subject: [PATCH 9/9] MLE: Remove memo --- .../messageLoggerEnhanced/components/LogsModal.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/equicordplugins/messageLoggerEnhanced/components/LogsModal.tsx b/src/equicordplugins/messageLoggerEnhanced/components/LogsModal.tsx index 6aa587d7e..06727dba8 100644 --- a/src/equicordplugins/messageLoggerEnhanced/components/LogsModal.tsx +++ b/src/equicordplugins/messageLoggerEnhanced/components/LogsModal.tsx @@ -229,7 +229,7 @@ function LogsContent({ visibleMessages, canLoadMore, sortNewest, tab, reset, han ); } -const LogsContentMemo = LazyComponent(() => React.memo(LogsContent)); +const LogsContentMemo = LazyComponent(() => LogsContent); function NoResults({ tab }: { tab: LogTabs; }) { const generateSuggestedTabs = (tab: LogTabs) => {