diff --git a/src/plugins/openInApp.ts b/src/plugins/openInApp.ts index d5e0273c1..8249ed732 100644 --- a/src/plugins/openInApp.ts +++ b/src/plugins/openInApp.ts @@ -19,20 +19,38 @@ import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; -const SpotifyMatcher = /https:\/\/open\.spotify\.com\/(track|album|artist|playlist)\/([^S]+)/; +const SpotifyMatcher = /https:\/\/open\.spotify\.com\/(track|album|artist|playlist|user)\/([^S]+)/; export default definePlugin({ name: "OpenInApp", description: "Open spotify URLs in app", authors: [Devs.Ven], - patches: [{ - find: '"MaskedLinkStore"', - replacement: { - match: /return ((\i)\.apply\(this,arguments\))(?=\}function \i.{0,200}\.trusted)/, - replace: "return $self.handleLink(...arguments)||$1" + patches: [ + { + find: '"MaskedLinkStore"', + replacement: { + match: /return ((\i)\.apply\(this,arguments\))(?=\}function \i.{0,200}\.trusted)/, + replace: "return $self.handleLink(...arguments)||$1" + } + }, + // Make Spotify profile activity links open in app on web + { + find: "WEB_OPEN(", + predicate: () => !IS_DISCORD_DESKTOP, + replacement: { + match: /\i\.\i\.isProtocolRegistered\(\)(.{0,100})window.open/g, + replace: "true$1VencordNative.native.openExternal" + } + }, + { + find: ".CONNECTED_ACCOUNT_VIEWED,", + replacement: { + match: /(?<=href:\i,onClick:function\(\)\{)(?=return \i=(\i)\.type,.{0,50}CONNECTED_ACCOUNT_VIEWED)/, + replace: "$self.handleAccountView(arguments[0],$1.type,$1.id);" + } } - }], + ], handleLink(data: { href: string; }, event: MouseEvent) { if (!data) return; @@ -45,5 +63,12 @@ export default definePlugin({ event.preventDefault(); return Promise.resolve(); + }, + + handleAccountView(event: MouseEvent, platformType: string, otherUserId: string) { + if (platformType !== "spotify") return; + + VencordNative.native.openExternal(`spotify:user:${otherUserId}`); + event.preventDefault(); } });