diff --git a/packages/discord-types/src/common/Activity.d.ts b/packages/discord-types/src/common/Activity.d.ts index 733872057..42de81364 100644 --- a/packages/discord-types/src/common/Activity.d.ts +++ b/packages/discord-types/src/common/Activity.d.ts @@ -3,8 +3,10 @@ import { ActivityFlags, ActivityStatusDisplayType, ActivityType } from "../../en export interface ActivityAssets { large_image?: string; large_text?: string; + large_url?: string; small_image?: string; small_text?: string; + small_url?: string; } export interface ActivityButton { diff --git a/src/plugins/customRPC/RpcSettings.tsx b/src/plugins/customRPC/RpcSettings.tsx index 845c088cf..637d049e3 100644 --- a/src/plugins/customRPC/RpcSettings.tsx +++ b/src/plugins/customRPC/RpcSettings.tsx @@ -73,6 +73,11 @@ function isNumberValid(value: number) { return true; } +function isUrlValid(value: string) { + if (value && !/^https?:\/\/.+/.test(value)) return "Must be a valid URL."; + return true; +} + function isImageKeyValid(value: string) { if (/https?:\/\/(cdn|media)\.discordapp\.(com|net)\//.test(value)) return "Don't use a Discord link. Use an Imgur image link instead."; if (/https?:\/\/(?!i\.)?imgur\.com\//.test(value)) return "Imgur link must be a direct link to the image (e.g. https://i.imgur.com/...). Right click the image and click 'Copy image address'"; @@ -180,8 +185,15 @@ export function RPCSettings() { { settingsKey: "appName", label: "Application Name", isValid: makeValidator(128, true) }, ]} /> - - + + + @@ -211,21 +225,23 @@ export function RPCSettings() { { settingsKey: "imageBig", label: "Large Image URL/Key", isValid: isImageKeyValid }, { settingsKey: "imageBigTooltip", label: "Large Image Text", isValid: maxLength128 }, ]} /> + + diff --git a/src/plugins/customRPC/index.tsx b/src/plugins/customRPC/index.tsx index e6f460a16..90df95c28 100644 --- a/src/plugins/customRPC/index.tsx +++ b/src/plugins/customRPC/index.tsx @@ -60,15 +60,19 @@ export const settings = definePluginSettings({ appID?: string; appName?: string; details?: string; + detailsURL?: string; state?: string; + stateURL?: string; type?: ActivityType; streamLink?: string; timestampMode?: TimestampMode; startTime?: number; endTime?: number; imageBig?: string; + imageBigURL?: string; imageBigTooltip?: string; imageSmall?: string; + imageSmallURL?: string; imageSmallTooltip?: string; buttonOneText?: string; buttonOneURL?: string; @@ -83,14 +87,18 @@ async function createActivity(): Promise { appID, appName, details, + detailsURL, state, + stateURL, type, streamLink, startTime, endTime, imageBig, + imageBigURL, imageBigTooltip, imageSmall, + imageSmallURL, imageSmallTooltip, buttonOneText, buttonOneURL, @@ -137,6 +145,14 @@ async function createActivity(): Promise { break; } + if (detailsURL) { + activity.details_url = detailsURL; + } + + if (stateURL) { + activity.state_url = stateURL; + } + if (buttonOneText) { activity.buttons = [ buttonOneText, @@ -154,7 +170,8 @@ async function createActivity(): Promise { if (imageBig) { activity.assets = { large_image: await getApplicationAsset(imageBig), - large_text: imageBigTooltip || undefined + large_text: imageBigTooltip || undefined, + large_url: imageBigURL || undefined }; } @@ -162,7 +179,8 @@ async function createActivity(): Promise { activity.assets = { ...activity.assets, small_image: await getApplicationAsset(imageSmall), - small_text: imageSmallTooltip || undefined + small_text: imageSmallTooltip || undefined, + small_url: imageSmallURL || undefined }; }