From 5dfa4c470745b111eda9c40ac94ab348b17be36c Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Fri, 12 Sep 2025 14:16:44 -0400 Subject: [PATCH 01/11] NewPluginsManager: Fix Not Showing --- .../settings/tabs/plugins/index.tsx | 91 +------------------ .../newPluginsManager/NewPluginsModal.tsx | 2 +- .../newPluginsManager/index.tsx | 5 +- 3 files changed, 8 insertions(+), 90 deletions(-) diff --git a/src/components/settings/tabs/plugins/index.tsx b/src/components/settings/tabs/plugins/index.tsx index 273a8731e..28fc71564 100644 --- a/src/components/settings/tabs/plugins/index.tsx +++ b/src/components/settings/tabs/plugins/index.tsx @@ -19,27 +19,24 @@ import "./styles.css"; import * as DataStore from "@api/DataStore"; -import { showNotice } from "@api/Notices"; import { Settings, useSettings } from "@api/Settings"; import { classNameFactory } from "@api/Styles"; -import { CogWheel, InfoIcon } from "@components/Icons"; -import { openPluginModal, SettingsTab } from "@components/settings"; -import { AddonCard } from "@components/settings/AddonCard"; +import { SettingsTab } from "@components/settings"; import { debounce } from "@shared/debounce"; import { ChangeList } from "@utils/ChangeList"; import { proxyLazy } from "@utils/lazy"; import { Logger } from "@utils/Logger"; import { Margins } from "@utils/margins"; -import { classes, isObjectEmpty } from "@utils/misc"; +import { classes } from "@utils/misc"; import { ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalRoot, ModalSize, openModal } from "@utils/modal"; import { useAwaiter, useIntersection } from "@utils/react"; -import { Plugin } from "@utils/types"; import { findByPropsLazy } from "@webpack"; import { Alerts, Button, Card, Flex, Forms, lodash, Parser, React, Select, Text, TextInput, Toasts, Tooltip, useMemo } from "@webpack/common"; import { JSX } from "react"; import Plugins, { ExcludedPlugins, PluginMeta } from "~plugins"; +import { PluginCard } from "./PluginCard"; import { StockPluginsCard, UserPluginsCard } from "./PluginStatCards"; // Avoid circular dependency @@ -99,88 +96,6 @@ function ReloadRequiredCard({ required, enabledPlugins, openDisablePluginsModal, ); } -interface PluginCardProps extends React.HTMLProps { - plugin: Plugin; - disabled: boolean; - onRestartNeeded(name: string): void; - isNew?: boolean; -} - -export function PluginCard({ plugin, disabled, onRestartNeeded, onMouseEnter, onMouseLeave, isNew }: PluginCardProps) { - const settings = Settings.plugins[plugin.name]; - - const isEnabled = () => Vencord.Plugins.isPluginEnabled(plugin.name); - - function toggleEnabled() { - const wasEnabled = isEnabled(); - - // If we're enabling a plugin, make sure all deps are enabled recursively. - if (!wasEnabled) { - const { restartNeeded, failures } = startDependenciesRecursive(plugin); - if (failures.length) { - logger.error(`Failed to start dependencies for ${plugin.name}: ${failures.join(", ")}`); - showNotice("Failed to start dependencies: " + failures.join(", "), "Close", () => null); - return; - } else if (restartNeeded) { - // If any dependencies have patches, don't start the plugin yet. - settings.enabled = true; - onRestartNeeded(plugin.name); - return; - } - } - - // if the plugin has patches, dont use stopPlugin/startPlugin. Wait for restart to apply changes. - if (plugin.patches?.length) { - settings.enabled = !wasEnabled; - onRestartNeeded(plugin.name); - return; - } - - // If the plugin is enabled, but hasn't been started, then we can just toggle it off. - if (wasEnabled && !plugin.started) { - settings.enabled = !wasEnabled; - return; - } - - const result = wasEnabled ? stopPlugin(plugin) : startPlugin(plugin); - - if (!result) { - settings.enabled = false; - - const msg = `Error while ${wasEnabled ? "stopping" : "starting"} plugin ${plugin.name}`; - logger.error(msg); - showErrorToast(msg); - return; - } - - settings.enabled = !wasEnabled; - } - - return ( - openPluginModal(plugin, onRestartNeeded)} - className={classes(ButtonClasses.button, cl("info-button"))} - > - {plugin.options && !isObjectEmpty(plugin.options) - ? - : } - - } - /> - ); -} - const enum SearchStatus { ALL, ENABLED, diff --git a/src/equicordplugins/newPluginsManager/NewPluginsModal.tsx b/src/equicordplugins/newPluginsManager/NewPluginsModal.tsx index 50c4014a0..9f75aefbb 100644 --- a/src/equicordplugins/newPluginsManager/NewPluginsModal.tsx +++ b/src/equicordplugins/newPluginsManager/NewPluginsModal.tsx @@ -9,7 +9,7 @@ import "./NewPluginsModal.css"; import { Settings, useSettings } from "@api/Settings"; import { classNameFactory } from "@api/Styles"; import ErrorBoundary from "@components/ErrorBoundary"; -import { PluginCard } from "@components/settings/tabs/plugins"; +import { PluginCard } from "@components/settings/tabs/plugins/PluginCard"; import { ChangeList } from "@utils/ChangeList"; import { classes, Margins } from "@utils/index"; import { closeModal, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalProps, ModalRoot, ModalSize, openModal } from "@utils/modal"; diff --git a/src/equicordplugins/newPluginsManager/index.tsx b/src/equicordplugins/newPluginsManager/index.tsx index eb8852684..66d754845 100644 --- a/src/equicordplugins/newPluginsManager/index.tsx +++ b/src/equicordplugins/newPluginsManager/index.tsx @@ -24,5 +24,8 @@ export default definePlugin({ openNewPluginsModal, KNOWN_PLUGINS_LEGACY_DATA_KEY, KNOWN_SETTINGS_DATA_KEY, - KnownSettings + KnownSettings, + start: () => { + KnownSettings.debugWipeSomeData(); + } }); From d5d7f4d726cb5d3db21f1777dabe818f88677572 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Fri, 12 Sep 2025 14:17:03 -0400 Subject: [PATCH 02/11] NewPluginsManager: Remove Debug --- src/equicordplugins/newPluginsManager/index.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/equicordplugins/newPluginsManager/index.tsx b/src/equicordplugins/newPluginsManager/index.tsx index 66d754845..eb8852684 100644 --- a/src/equicordplugins/newPluginsManager/index.tsx +++ b/src/equicordplugins/newPluginsManager/index.tsx @@ -24,8 +24,5 @@ export default definePlugin({ openNewPluginsModal, KNOWN_PLUGINS_LEGACY_DATA_KEY, KNOWN_SETTINGS_DATA_KEY, - KnownSettings, - start: () => { - KnownSettings.debugWipeSomeData(); - } + KnownSettings }); From 521424ad8d66c3a4cc5ceb5bb168642e30e5b8d3 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Fri, 12 Sep 2025 14:51:37 -0400 Subject: [PATCH 03/11] NewPluginsManager: Update Desc --- src/equicordplugins/newPluginsManager/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/equicordplugins/newPluginsManager/index.tsx b/src/equicordplugins/newPluginsManager/index.tsx index eb8852684..683d9de74 100644 --- a/src/equicordplugins/newPluginsManager/index.tsx +++ b/src/equicordplugins/newPluginsManager/index.tsx @@ -13,7 +13,7 @@ import { openNewPluginsModal } from "./NewPluginsModal"; export default definePlugin({ name: "NewPluginsManager", - description: "Utility that notifies you when new plugins are added to Vencord", + description: "Utility that notifies you when new plugins are added to Equicord", authors: [Devs.Sqaaakoi], enabledByDefault: true, flux: { From 479bc354aa2a546387bcf693319b91a006543d19 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Fri, 12 Sep 2025 19:23:48 -0400 Subject: [PATCH 04/11] WriteUpperCase: Fix Spaces --- src/equicordplugins/writeUpperCase/index.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/equicordplugins/writeUpperCase/index.ts b/src/equicordplugins/writeUpperCase/index.ts index a19e9c9c2..263b1a231 100644 --- a/src/equicordplugins/writeUpperCase/index.ts +++ b/src/equicordplugins/writeUpperCase/index.ts @@ -20,16 +20,18 @@ const settings = definePluginSettings( ); const presendObject: MessageSendListener = (_, msg) => { - const sentences = msg.content.split(/(?<=\w\.)\s/); const blockedWordsArray: string[] = settings.store.blockedWords.split(", "); + const sentences = msg.content.split(/(?<=[.!?]+['")\]]*)(\s+)/); + + msg.content = sentences.map((element, i) => { + if (i % 2 === 1) return element; - msg.content = sentences.map(element => { if (!blockedWordsArray.some(word => element.toLowerCase().startsWith(word.toLocaleLowerCase()))) { return element.charAt(0).toUpperCase() + element.slice(1); } else { return element; } - }).join(" "); + }).join(""); }; export default definePlugin({ From 7ea2824dd38c7ac36ccbfa67199ca3a6439bd025 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Sat, 13 Sep 2025 00:53:03 -0400 Subject: [PATCH 05/11] PluginsTab: Dont Use Discord's CL --- .../settings/tabs/plugins/PluginModal.tsx | 48 ++++++++----------- .../settings/tabs/plugins/index.tsx | 40 +++++++--------- .../settings/tabs/plugins/styles.css | 46 ++++++------------ 3 files changed, 51 insertions(+), 83 deletions(-) diff --git a/src/components/settings/tabs/plugins/PluginModal.tsx b/src/components/settings/tabs/plugins/PluginModal.tsx index e3bea165a..8175ecf6f 100644 --- a/src/components/settings/tabs/plugins/PluginModal.tsx +++ b/src/components/settings/tabs/plugins/PluginModal.tsx @@ -214,7 +214,7 @@ export default function PluginModal({ plugin, onRestartNeeded, onClose, transiti {({ onMouseEnter, onMouseLeave }) => ( + {!Settings.ignoreResetWarning && ( )} - - {({ onMouseEnter, onMouseLeave }) => ( - - )} - + diff --git a/src/components/settings/tabs/plugins/index.tsx b/src/components/settings/tabs/plugins/index.tsx index 28fc71564..620b5e28d 100644 --- a/src/components/settings/tabs/plugins/index.tsx +++ b/src/components/settings/tabs/plugins/index.tsx @@ -82,7 +82,7 @@ function ReloadRequiredCard({ required, enabledPlugins, openDisablePluginsModal, {enabledPlugins.length > 0 && !required && ( + {!Settings.ignoreResetWarning && ( )} - - {({ onMouseEnter, onMouseLeave }) => ( - - )} - + + diff --git a/src/components/settings/tabs/plugins/styles.css b/src/components/settings/tabs/plugins/styles.css index 8266b39c8..aab981690 100644 --- a/src/components/settings/tabs/plugins/styles.css +++ b/src/components/settings/tabs/plugins/styles.css @@ -166,33 +166,32 @@ margin-bottom: 10px; } -.button-danger-background { - background-color: var(--background-color) !important; +.vc-plugins-disable-warning, +.vc-plugin-modal-disable-warning { + background-color: color-mix(in srgb, var(--button-danger-background) 10%, transparent) !important; border-style: solid !important; border-width: .1rem !important; - border-color: var(--button-outline-danger-border) !important; + border-color: color-mix(in srgb, var(--button-danger-background) 80%, transparent) !important; border-radius: 5px !important; + color: color-mix(in srgb, var(--button-danger-background) 100%, transparent) !important; + align-self: flex-end !important; } -.button-danger-background.top-margin { - margin-top: 10px; +.vc-plugins-disable-warning:hover, +.vc-plugin-modal-disable-warning:hover { + background-color: color-mix(in srgb, var(--button-danger-background-hover) 40%, transparent) !important; } -.button-danger-background:hover { - background-color: var(--button-outline-danger-background-hover) !important; - border-style: solid; - border-width: .1rem; - border-color: var(--button-outline-danger-border) !important; -} - -.button-danger-background-no-margin { +.vc-plugins-confirm-reset, +.vc-plugin-modal-confirm-reset { background-color: var(--button-danger-background) !important; color: var(--header-primary); } -.button-danger-background-no-margin:hover { +.vc-plugins-confirm-reset:hover, +.vc-plugin-modal-confirm-reset:hover { background-color: var(--button-danger-background-hover) !important; - filter: saturate(75%); + filter: saturate(80%); } .vc-modal-close-button { @@ -207,17 +206,10 @@ } .modal-footer .button-container { - display: flex !important; - justify-content: space-between; - align-items: center; - width: 100%; -} - -.button-group { display: flex !important; gap: 10px; align-items: center; - justify-content: end !important; + justify-content: space-between !important; } /* Specific to disable all modal */ @@ -232,13 +224,6 @@ text-decoration: underline; } -.disable-all-button { - color: var(--header-primary); - width: 150px; - margin-left: auto; - margin-right: 4.5px !important; -} - .visual-refresh .button-danger-background { font-size: 16px; background-color: rgb(240 71 71 / 10%) !important; @@ -248,7 +233,6 @@ font-weight: 500; padding: 6px 10px; text-align: center; - margin-top: 10px; } .visual-refresh .button-danger-background:hover { From 8e8449b1e2ec29289b731e6d8f2d976d252c0873 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Sat, 13 Sep 2025 01:22:07 -0400 Subject: [PATCH 06/11] PluginTab: Make Reset Same Component There is 100% a better way --- .../settings/tabs/plugins/PluginModal.tsx | 26 ++++-- .../settings/tabs/plugins/index.tsx | 85 ++----------------- .../settings/tabs/plugins/styles.css | 10 ++- 3 files changed, 33 insertions(+), 88 deletions(-) diff --git a/src/components/settings/tabs/plugins/PluginModal.tsx b/src/components/settings/tabs/plugins/PluginModal.tsx index 8175ecf6f..59de61aa2 100644 --- a/src/components/settings/tabs/plugins/PluginModal.tsx +++ b/src/components/settings/tabs/plugins/PluginModal.tsx @@ -295,8 +295,17 @@ function resetSettings(plugin: Plugin, warningModalProps?: ModalProps, pluginMod pluginModalProps?.onClose(); } -export function openWarningModal(plugin: Plugin, pluginModalProps: ModalProps, onRestartNeeded?: (pluginName: string) => void) { - if (Settings.ignoreResetWarning) return resetSettings(plugin, pluginModalProps, pluginModalProps, onRestartNeeded); +export function openWarningModal(plugin?: Plugin | null, pluginModalProps?: ModalProps | null, onRestartNeeded?: (pluginName: string) => void, isPlugin = true, enabledPlugins?: number | null, reset?: any) { + if (Settings.ignoreResetWarning && isPlugin) { + if (plugin && pluginModalProps) return resetSettings(plugin, pluginModalProps, pluginModalProps, onRestartNeeded); + return; + } else if (Settings.ignoreResetWarning && !isPlugin) { + return reset(); + } + + const text = isPlugin + ? `You are about to reset all settings for ${plugin?.name} to their default values.` + : `You are about to disable ${enabledPlugins} plugins!`; openModal(warningModalProps => ( - You are about to reset all settings for {plugin.name} to their default values. + {text} THIS ACTION IS IRREVERSIBLE! @@ -324,8 +333,8 @@ export function openWarningModal(plugin: Plugin, pluginModalProps: ModalProps, o - - + + - {!Settings.ignoreResetWarning && ( - - )} - - - - - - - )); - } - // Code directly taken from supportHelper.tsx const isApiPlugin = (plugin: string) => plugin.endsWith("API") || Plugins[plugin].required; @@ -402,7 +331,7 @@ export default function PluginSettings() { return ( - +
Date: Sat, 13 Sep 2025 06:29:36 +0100 Subject: [PATCH 07/11] NewGuildSettings: Collapsed VCs * Add VC collapse feature * Remove comments * default false --------- Co-authored-by: thororen1234 <78185467+thororen1234@users.noreply.github.com> Co-authored-by: justjxke --- src/plugins/newGuildSettings/index.tsx | 35 +++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/plugins/newGuildSettings/index.tsx b/src/plugins/newGuildSettings/index.tsx index 82d5805e4..c09f3496a 100644 --- a/src/plugins/newGuildSettings/index.tsx +++ b/src/plugins/newGuildSettings/index.tsx @@ -26,7 +26,7 @@ import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; import { Guild } from "@vencord/discord-types"; import { findByCodeLazy, findByPropsLazy, mapMangledModuleLazy } from "@webpack"; -import { Menu } from "@webpack/common"; +import { FluxDispatcher, GuildChannelStore, Menu } from "@webpack/common"; const { updateGuildNotificationSettings } = findByPropsLazy("updateGuildNotificationSettings"); const { toggleShowAllChannels } = mapMangledModuleLazy(".onboardExistingMember(", { @@ -82,6 +82,11 @@ const settings = definePluginSettings({ description: "Mute Mobile Push Notifications automatically", type: OptionType.BOOLEAN, default: true + }, + voiceChannels: { + description: "Hide names in Voice channels automatically", + type: OptionType.BOOLEAN, + default: false } }); @@ -99,8 +104,30 @@ const makeContextMenuPatch: (shouldAddIcon: boolean) => NavContextMenuPatchCallb ); }; +function applyVoiceNameHidingToGuild(guildId: string) { + if (!settings.store.voiceChannels) return; + + try { + const channels = GuildChannelStore.getChannels(guildId); + if (!channels?.VOCAL) return; + + channels.VOCAL.forEach(({ channel }: { channel: { id: string; type: number; }; }) => { + if (channel.type === 2) { + FluxDispatcher.dispatch({ + type: "CHANNEL_COLLAPSE", + channelId: channel.id, + collapsed: true + }); + } + }); + } catch (error) { + console.warn("[NewGuildSettings] Error applying voice name hiding:", error); + } +} + function applyDefaultSettings(guildId: string | null) { if (guildId === "@me" || guildId === "null" || guildId == null) return; + updateGuildNotificationSettings(guildId, { muted: settings.store.guild, @@ -110,15 +137,21 @@ function applyDefaultSettings(guildId: string | null) { mute_scheduled_events: settings.store.events, notify_highlights: settings.store.highlights ? 1 : 0 }); + if (settings.store.messages !== 3) { updateGuildNotificationSettings(guildId, { message_notifications: settings.store.messages, }); } + if (settings.store.showAllChannels && isOptInEnabledForGuild(guildId)) { toggleShowAllChannels(guildId); } + + if (settings.store.voiceChannels) { + applyVoiceNameHidingToGuild(guildId); + } } export default definePlugin({ From b10fbd0ddd9603244426975b39d49171a373a530 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Sat, 13 Sep 2025 02:53:58 -0400 Subject: [PATCH 08/11] NewGuildSettings: Fix undoing collapsed channels --- .../discord-types/src/common/Channel.d.ts | 1 + src/plugins/newGuildSettings/index.tsx | 22 +++++++------------ 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/packages/discord-types/src/common/Channel.d.ts b/packages/discord-types/src/common/Channel.d.ts index 7ad5ce535..8742c9c43 100644 --- a/packages/discord-types/src/common/Channel.d.ts +++ b/packages/discord-types/src/common/Channel.d.ts @@ -71,6 +71,7 @@ export class Channel extends DiscordRecord { isGroupDM(): boolean; isGuildStageVoice(): boolean; isGuildVoice(): boolean; + isGuildVocal(): boolean; isListenModeCapable(): boolean; isManaged(): boolean; isMultiUserDM(): boolean; diff --git a/src/plugins/newGuildSettings/index.tsx b/src/plugins/newGuildSettings/index.tsx index c09f3496a..ea14b24fa 100644 --- a/src/plugins/newGuildSettings/index.tsx +++ b/src/plugins/newGuildSettings/index.tsx @@ -25,8 +25,8 @@ import { CogWheel } from "@components/Icons"; import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; import { Guild } from "@vencord/discord-types"; -import { findByCodeLazy, findByPropsLazy, mapMangledModuleLazy } from "@webpack"; -import { FluxDispatcher, GuildChannelStore, Menu } from "@webpack/common"; +import { findByCodeLazy, findByPropsLazy, findStoreLazy, mapMangledModuleLazy } from "@webpack"; +import { ChannelStore, Menu } from "@webpack/common"; const { updateGuildNotificationSettings } = findByPropsLazy("updateGuildNotificationSettings"); const { toggleShowAllChannels } = mapMangledModuleLazy(".onboardExistingMember(", { @@ -36,6 +36,8 @@ const { toggleShowAllChannels } = mapMangledModuleLazy(".onboardExistingMember(" } }); const isOptInEnabledForGuild = findByCodeLazy(".COMMUNITY)||", ".isOptInEnabled("); +const CollapsedVoiceChannelStore = findStoreLazy("CollapsedVoiceChannelStore"); +const collapsedChannels = findByPropsLazy("toggleCollapseGuild"); const settings = definePluginSettings({ guild: { @@ -108,18 +110,10 @@ function applyVoiceNameHidingToGuild(guildId: string) { if (!settings.store.voiceChannels) return; try { - const channels = GuildChannelStore.getChannels(guildId); - if (!channels?.VOCAL) return; - - channels.VOCAL.forEach(({ channel }: { channel: { id: string; type: number; }; }) => { - if (channel.type === 2) { - FluxDispatcher.dispatch({ - type: "CHANNEL_COLLAPSE", - channelId: channel.id, - collapsed: true - }); - } - }); + ChannelStore.getChannelIds(guildId).filter(channelId => { + const channel = ChannelStore.getChannel(channelId); + return channel.isGuildVocal() && !CollapsedVoiceChannelStore.isCollapsed(channelId); + }).forEach(id => collapsedChannels.update(id)); } catch (error) { console.warn("[NewGuildSettings] Error applying voice name hiding:", error); } From e20d29cc5a34a23f6d55285b71b90a9067c481da Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Sat, 13 Sep 2025 10:05:20 -0400 Subject: [PATCH 09/11] Identity: Restrict --- .../{identity => identity.discordDesktop}/index.tsx | 0 .../{identity => identity.discordDesktop}/native.ts | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/equicordplugins/{identity => identity.discordDesktop}/index.tsx (100%) rename src/equicordplugins/{identity => identity.discordDesktop}/native.ts (100%) diff --git a/src/equicordplugins/identity/index.tsx b/src/equicordplugins/identity.discordDesktop/index.tsx similarity index 100% rename from src/equicordplugins/identity/index.tsx rename to src/equicordplugins/identity.discordDesktop/index.tsx diff --git a/src/equicordplugins/identity/native.ts b/src/equicordplugins/identity.discordDesktop/native.ts similarity index 100% rename from src/equicordplugins/identity/native.ts rename to src/equicordplugins/identity.discordDesktop/native.ts From 6ccec48428e0e1d1a235b42fe6657a53d8d882cd Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Sat, 13 Sep 2025 17:23:04 -0400 Subject: [PATCH 10/11] IgnoreCalls Stick To Markers --- src/equicordplugins/ignoreCalls/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/equicordplugins/ignoreCalls/index.tsx b/src/equicordplugins/ignoreCalls/index.tsx index 2a3bb7d59..adfda0bde 100644 --- a/src/equicordplugins/ignoreCalls/index.tsx +++ b/src/equicordplugins/ignoreCalls/index.tsx @@ -42,9 +42,9 @@ const settings = definePluginSettings({ ignoreTimeout: { type: OptionType.SLIDER, description: "Timeout to click ignore", - markers: [0, 1000, 2000, 2500, 5000, 10000], + markers: [0, 1000, 2500, 5000, 10000], default: 2500, - stickToMarkers: false, + stickToMarkers: true, } }); From f6ccaf2a65ef63ecfb684f7952a337e92da130e7 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Sat, 13 Sep 2025 18:26:31 -0400 Subject: [PATCH 11/11] OnePingPerDM: AlwaysPlaySound Setting --- src/plugins/onePingPerDM/index.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/plugins/onePingPerDM/index.ts b/src/plugins/onePingPerDM/index.ts index aeb48f1dc..ff6428953 100644 --- a/src/plugins/onePingPerDM/index.ts +++ b/src/plugins/onePingPerDM/index.ts @@ -36,6 +36,12 @@ const settings = definePluginSettings({ description: "User IDs (comma + space) whose pings should NEVER be throttled", restartNeeded: true, default: "" + }, + alwaysPlaySound: { + type: OptionType.BOOLEAN, + description: "Play message sound even when message sound is disabled", + restartNeeded: true, + default: false } }); @@ -49,16 +55,19 @@ export default definePlugin({ find: ".getDesktopType()===", replacement: [ { - match: /(\i\.\i\.getDesktopType\(\)===\i\.\i\.NEVER)\)/, - replace: "$&if(!$self.isPrivateChannelRead(arguments[0]?.message))return;else " + match: /(\i\.\i\.getDesktopType\(\)===\i\.\i\.NEVER)\)(?=.*?(\i\.\i\.playNotificationSound\(.{0,5}\)))/, + replace: "$&if(!$self.isPrivateChannelRead(arguments[0]?.message))return;else if($self.playSound())return $2;else " }, { - match: /sound:(\i\?\i:void 0,volume:\i,onClick)/, - replace: "sound:!$self.isPrivateChannelRead(arguments[0]?.message)?undefined:$1" + match: /sound:(\i\?(\i):void 0,volume:\i,onClick)/, + replace: "sound:!$self.isPrivateChannelRead(arguments[0]?.message)?undefined:$self.playSound()?$2:$1" } ] } ], + playSound() { + return settings.store.alwaysPlaySound; + }, isPrivateChannelRead(message: MessageJSON) { const ignoreList = settings.store.ignoreUsers.split(", ").filter(Boolean); if (ignoreList.includes(message.author.id)) return true;