diff --git a/src/equicordplugins/betterActivities/types.ts b/src/equicordplugins/betterActivities/types.ts index e90524e62..de62b0ab3 100644 --- a/src/equicordplugins/betterActivities/types.ts +++ b/src/equicordplugins/betterActivities/types.ts @@ -78,11 +78,3 @@ export interface ActivityViewProps { application?: Application; currentUser: User; } - -export const enum ActivityType { - PLAYING = 0, - STREAMING = 1, - LISTENING = 2, - WATCHING = 3, - COMPETING = 5 -} diff --git a/src/equicordplugins/betterActivities/utils.tsx b/src/equicordplugins/betterActivities/utils.tsx index f1d0a9972..61de0479a 100644 --- a/src/equicordplugins/betterActivities/utils.tsx +++ b/src/equicordplugins/betterActivities/utils.tsx @@ -44,7 +44,7 @@ export function getApplicationIcons(activities: Activity[], preferSmall = false) for (const activity of applications) { const { assets, application_id, platform, id } = activity; - if (!application_id && !platform && !id.startsWith("spotify:")) continue; + if (!application_id && !platform && !id?.startsWith("spotify:")) continue; if (assets) { const { small_image, small_text, large_image, large_text } = assets; diff --git a/src/equicordplugins/gensokyoRadioRPC/index.tsx b/src/equicordplugins/gensokyoRadioRPC/index.tsx index 4a166406d..5aa943e93 100644 --- a/src/equicordplugins/gensokyoRadioRPC/index.tsx +++ b/src/equicordplugins/gensokyoRadioRPC/index.tsx @@ -7,9 +7,10 @@ import { definePluginSettings } from "@api/Settings"; import { Devs, EquicordDevs } from "@utils/constants"; import definePlugin, { OptionType, PluginNative, ReporterTestable } from "@utils/types"; +import { Activity } from "@vencord/discord-types"; +import { ActivityFlags, ActivityType } from "@vencord/discord-types/enums"; import { ApplicationAssetUtils, FluxDispatcher, Forms } from "@webpack/common"; -import { Activity, ActivityFlag, ActivityType } from "./types"; const Native = VencordNative.pluginHelpers.GensokyoRadioRPC as PluginNative; @@ -96,7 +97,7 @@ export default definePlugin({ metadata: { button_urls: undefined }, type: ActivityType.LISTENING, - flags: ActivityFlag.INSTANCE, + flags: ActivityFlags.INSTANCE, }; } }); diff --git a/src/equicordplugins/gensokyoRadioRPC/types.ts b/src/equicordplugins/gensokyoRadioRPC/types.ts index 3fa0464b3..21b44194e 100644 --- a/src/equicordplugins/gensokyoRadioRPC/types.ts +++ b/src/equicordplugins/gensokyoRadioRPC/types.ts @@ -36,15 +36,6 @@ export interface ActivityAssets { small_text?: string; } -export const enum ActivityType { - PLAYING = 0, - LISTENING = 2, -} - -export const enum ActivityFlag { - INSTANCE = 1 << 0 -} - export interface TrackData { title: string; album: string; diff --git a/src/equicordplugins/rpcEditor/ReplaceSettings.tsx b/src/equicordplugins/rpcEditor/ReplaceSettings.tsx index 701ef21e8..ab393408c 100644 --- a/src/equicordplugins/rpcEditor/ReplaceSettings.tsx +++ b/src/equicordplugins/rpcEditor/ReplaceSettings.tsx @@ -7,9 +7,11 @@ import { CheckedTextInput } from "@components/CheckedTextInput"; import { Margins } from "@utils/margins"; import { identity } from "@utils/misc"; +import { Activity } from "@vencord/discord-types"; +import { ActivityFlags, ActivityType } from "@vencord/discord-types/enums"; import { Card, Forms, PresenceStore, React, Select, SnowflakeUtils, Switch, TextInput, UserStore } from "@webpack/common"; -import { Activity, ActivityType, AppIdSetting, makeEmptyAppId } from "."; +import { AppIdSetting, makeEmptyAppId } from "."; interface SettingsProps { appIds: AppIdSetting[]; @@ -28,7 +30,14 @@ export function ReplaceTutorial() { <> IDs of currently running activities { - activities.length === 0 ? No running activities : activities.map(activity => { return activity.flags !== 48 ? {activity.name}: {activity.application_id} : null; /* hide spotify */ }) + activities.length === 0 + ? No running activities + : activities.map(activity => { + const isSpotify = (activity.flags & (ActivityFlags.SYNC | ActivityFlags.PLAY)) === (ActivityFlags.SYNC | ActivityFlags.PLAY); + return !isSpotify + ? {activity.name}: {activity.application_id} + : null; + }) } Available variables diff --git a/src/equicordplugins/rpcEditor/index.tsx b/src/equicordplugins/rpcEditor/index.tsx index b623caacf..e60d6627f 100644 --- a/src/equicordplugins/rpcEditor/index.tsx +++ b/src/equicordplugins/rpcEditor/index.tsx @@ -9,11 +9,14 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import { useForceUpdater } from "@utils/react"; import definePlugin, { OptionType } from "@utils/types"; +import { Activity } from "@vencord/discord-types"; +import { ActivityType } from "@vencord/discord-types/enums"; import { React } from "@webpack/common"; import { ReplaceSettings, ReplaceTutorial } from "./ReplaceSettings"; const APP_IDS_KEY = "ReplaceActivityType_appids"; + export type AppIdSetting = { disableAssets: boolean; disableTimestamps: boolean; @@ -30,40 +33,6 @@ export type AppIdSetting = { newStreamUrl: string; }; -export interface Activity { - state: string; - details: string; - timestamps?: { - start?: number; - end?: number; - }; - url?: string; - assets: ActivityAssets; - buttons?: Array; - name: string; - application_id: string; - metadata?: { - button_urls?: Array; - }; - type: number; - flags: number; -} - -interface ActivityAssets { - large_image: string; - large_text: string; - small_image: string; - small_text: string; -} - -export const enum ActivityType { - PLAYING = 0, - STREAMING = 1, - LISTENING = 2, - WATCHING = 3, - COMPETING = 5 -} - export const makeEmptyAppId: () => AppIdSetting = () => ({ appId: "", enabled: true, @@ -124,12 +93,12 @@ export default definePlugin({ if (text === "null") return ""; return text .replaceAll(":name:", originalActivity.name) - .replaceAll(":details:", originalActivity.details) - .replaceAll(":state:", originalActivity.state) - .replaceAll(":large_image:", originalActivity.assets.large_image) - .replaceAll(":large_text:", originalActivity.assets.large_text) - .replaceAll(":small_image:", originalActivity.assets.small_image) - .replaceAll(":small_text:", originalActivity.assets.small_text); + .replaceAll(":details:", originalActivity.details ?? "") + .replaceAll(":state:", originalActivity.state ?? "") + .replaceAll(":large_image:", originalActivity.assets?.large_image ?? "") + .replaceAll(":large_text:", originalActivity.assets?.large_text ?? "") + .replaceAll(":small_image:", originalActivity.assets?.small_image ?? "") + .replaceAll(":small_text:", originalActivity.assets?.small_text ?? ""); }, patchActivity(activity: Activity) { if (!activity) return; @@ -141,6 +110,7 @@ export default definePlugin({ if (app.newActivityType === ActivityType.STREAMING && app.newStreamUrl) activity.url = app.newStreamUrl; if (app.newDetails) activity.details = this.parseField(app.newDetails, oldActivity); if (app.newState) activity.state = this.parseField(app.newState, oldActivity); + if (!activity.assets) activity.assets = {}; if (app.newLargeImageText) activity.assets.large_text = this.parseField(app.newLargeImageText, oldActivity); if (app.newLargeImageUrl) activity.assets.large_image = this.parseField(app.newLargeImageUrl, oldActivity); if (app.newSmallImageText) activity.assets.small_text = this.parseField(app.newSmallImageText, oldActivity); diff --git a/src/equicordplugins/statsfmPresence/index.tsx b/src/equicordplugins/statsfmPresence/index.tsx index fcb19ddc2..2d8b65782 100644 --- a/src/equicordplugins/statsfmPresence/index.tsx +++ b/src/equicordplugins/statsfmPresence/index.tsx @@ -9,6 +9,7 @@ import { getUserSettingLazy } from "@api/UserSettings"; import { EquicordDevs } from "@utils/constants"; import { Logger } from "@utils/Logger"; import definePlugin, { OptionType } from "@utils/types"; +import { ActivityFlags, ActivityType } from "@vencord/discord-types/enums"; import { findByPropsLazy } from "@webpack"; import { ApplicationAssetUtils, FluxDispatcher, Forms } from "@webpack/common"; @@ -50,16 +51,6 @@ interface TrackData { imageUrl?: string; } -// only relevant enum values -const enum ActivityType { - PLAYING = 0, - LISTENING = 2, -} - -const enum ActivityFlag { - INSTANCE = 1 << 0, -} - const enum NameFormat { StatusName = "status-name", ArtistFirst = "artist-first", @@ -69,8 +60,6 @@ const enum NameFormat { albumsName = "albums" } - - interface Albums { id: number; image: string; @@ -373,7 +362,7 @@ export default definePlugin({ }, type: settings.store.useListeningStatus ? ActivityType.LISTENING : ActivityType.PLAYING, - flags: ActivityFlag.INSTANCE, + flags: ActivityFlags.INSTANCE, }; } }); diff --git a/src/equicordplugins/tosuRPC/index.ts b/src/equicordplugins/tosuRPC/index.ts index 05d908b37..9e2a9faef 100644 --- a/src/equicordplugins/tosuRPC/index.ts +++ b/src/equicordplugins/tosuRPC/index.ts @@ -6,9 +6,11 @@ import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; +import { Activity } from "@vencord/discord-types"; +import { ActivityType } from "@vencord/discord-types/enums"; import { ApplicationAssetUtils, FluxDispatcher } from "@webpack/common"; -import { Activity, ActivityType, BanchoStatusEnum, GameState, Modes, TosuApi, UserLoginStatus } from "./type"; +import { BanchoStatusEnum, GameState, Modes, TosuApi, UserLoginStatus } from "./type"; const socketId = "tosu"; const OSU_APP_ID = "367827983903490050"; @@ -64,6 +66,8 @@ async function onMessage(data: string) { flags: 1 << 0, }; + activity.assets = {}; + switch (profile.mode.number) { case Modes.Osu: activity.assets.small_image = OSU_STARDARD_SMALL_IMAGE; diff --git a/src/equicordplugins/tosuRPC/type.ts b/src/equicordplugins/tosuRPC/type.ts index 67c3e4957..7ded0748f 100644 --- a/src/equicordplugins/tosuRPC/type.ts +++ b/src/equicordplugins/tosuRPC/type.ts @@ -4,40 +4,6 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -export interface ActivityAssets { - large_image?: string; - large_text?: string; - small_image?: string; - small_text?: string; -} - -export interface Activity { - state?: string; - details?: string; - timestamps?: { - start?: number; - end?: number; - }; - assets: ActivityAssets; - buttons?: Array; - name: string; - application_id: string; - metadata?: { - button_urls?: Array; - }; - type: ActivityType; - url?: string; - flags: number; -} - -export enum ActivityType { - PLAYING = 0, - STREAMING = 1, - LISTENING = 2, - WATCHING = 3, - COMPETING = 5 -} - export enum BeatmapStatuses { Unknown, NotSubmitted = 1, diff --git a/src/equicordplugins/vencordRPC/index.ts b/src/equicordplugins/vencordRPC/index.ts index ec8fb81c3..ba985418a 100644 --- a/src/equicordplugins/vencordRPC/index.ts +++ b/src/equicordplugins/vencordRPC/index.ts @@ -8,7 +8,8 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import { isTruthy } from "@utils/guards"; import definePlugin, { OptionType } from "@utils/types"; -import { Channel, FluxStore } from "@vencord/discord-types"; +import { Activity, Channel, FluxStore } from "@vencord/discord-types"; +import { ActivityType } from "@vencord/discord-types/enums"; import { findByPropsLazy, findStoreLazy } from "@webpack"; import { ApplicationAssetUtils, ChannelStore, FluxDispatcher, GuildStore, IconUtils, PresenceStore, RelationshipStore, SelectedChannelStore, SelectedGuildStore, UserStore } from "@webpack/common"; @@ -26,40 +27,6 @@ async function getApplicationAsset(key: string): Promise { return (await ApplicationAssetUtils.fetchAssetIds(settings.store.appID!, [key]))[0]; } -interface ActivityAssets { - large_image?: string; - large_text?: string; - small_image?: string; - small_text?: string; -} - -interface Activity { - state?: string; - details?: string; - timestamps?: { - start?: number; - end?: number; - }; - assets?: ActivityAssets; - buttons?: Array; - name: string; - application_id: string; - metadata?: { - button_urls?: Array; - }; - type: ActivityType; - url?: string; - flags: number; -} - -const enum ActivityType { - PLAYING = 0, - STREAMING = 1, - LISTENING = 2, - WATCHING = 3, - COMPETING = 5 -} - const enum TimestampMode { NONE, NOW,