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
};
}