diff --git a/src/main/ipcPlugins.ts b/src/main/ipcPlugins.ts index bcc0a1b57..3034fb436 100644 --- a/src/main/ipcPlugins.ts +++ b/src/main/ipcPlugins.ts @@ -22,6 +22,28 @@ import { readFile } from "fs/promises"; import { request } from "https"; import { basename, normalize } from "path"; +import { getSettings } from "./ipcMain"; + +// FixSpotifyEmbeds +app.on("browser-window-created", (_, win) => { + win.webContents.on("frame-created", (_, { frame }) => { + frame.once("dom-ready", () => { + if (frame.url.startsWith("https://open.spotify.com/embed/")) { + const settings = getSettings().plugins?.FixSpotifyEmbeds; + if (!settings?.enabled) return; + + frame.executeJavaScript(` + const original = Audio.prototype.play; + Audio.prototype.play = function() { + this.volume = ${(settings.volume / 100) || 0.1}; + return original.apply(this, arguments); + } + `); + } + }); + }); +}); + // #region OpenInApp // These links don't support CORS, so this has to be native const validRedirectUrls = /^https:\/\/(spotify\.link|s\.team)\/.+$/; diff --git a/src/plugins/fixSpotifyEmbeds.desktop.ts b/src/plugins/fixSpotifyEmbeds.desktop.ts new file mode 100644 index 000000000..44199127f --- /dev/null +++ b/src/plugins/fixSpotifyEmbeds.desktop.ts @@ -0,0 +1,26 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2023 Vendicated and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { definePluginSettings } from "@api/Settings"; +import { makeRange } from "@components/PluginSettings/components"; +import { Devs } from "@utils/constants"; +import definePlugin, { OptionType } from "@utils/types"; + +// The entire code of this plugin can be found in ipcPlugins +export default definePlugin({ + name: "FixSpotifyEmbeds", + description: "Fixes spotify embeds being incredibly loud by letting you customise the volume", + authors: [Devs.Ven], + settings: definePluginSettings({ + volume: { + type: OptionType.SLIDER, + description: "The volume % to set for spotify embeds. Anything above 10% is veeeery loud", + markers: makeRange(0, 100, 10), + stickToMarkers: false, + default: 10 + } + }) +});