From 51b4748ba7489201f3efb378b6e6e2734f97e080 Mon Sep 17 00:00:00 2001
From: BoatFloater <111416210+BoatFloater@users.noreply.github.com>
Date: Sat, 18 Apr 2026 07:39:47 +0900
Subject: [PATCH] ViewRaw: add message context menu option (#3990)
---
src/plugins/viewRaw/index.tsx | 32 +++++++++++++++++++-------------
1 file changed, 19 insertions(+), 13 deletions(-)
diff --git a/src/plugins/viewRaw/index.tsx b/src/plugins/viewRaw/index.tsx
index bfcb9ba40..269eb36ee 100644
--- a/src/plugins/viewRaw/index.tsx
+++ b/src/plugins/viewRaw/index.tsx
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-import { NavContextMenuPatchCallback } from "@api/ContextMenu";
+import { findGroupChildrenByChildId, NavContextMenuPatchCallback } from "@api/ContextMenu";
import { definePluginSettings } from "@api/Settings";
import { CodeBlock } from "@components/CodeBlock";
import { Divider } from "@components/Divider";
@@ -124,31 +124,36 @@ const settings = definePluginSettings({
{ label: "Left Click to view the raw content.", value: "Left", default: true },
{ label: "Right click to view the raw content.", value: "Right" }
]
+ },
+ messageContextMenu: {
+ description: "Show in message context menu",
+ type: OptionType.BOOLEAN,
+ default: false
}
});
-function MakeContextCallback(name: "Guild" | "Role" | "User" | "Channel"): NavContextMenuPatchCallback {
+function MakeContextCallback(name: "Guild" | "Role" | "User" | "Channel" | "Message"): NavContextMenuPatchCallback {
return (children, props) => {
const value = props[name.toLowerCase()];
if (!value) return;
if (props.label === getIntlMessage("CHANNEL_ACTIONS_MENU_LABEL")) return; // random shit like notification settings
+ const isMessage = name === "Message";
+ if (isMessage && !settings.store.messageContextMenu) return;
- const lastChild = children.at(-1);
- if (lastChild?.key === "developer-actions") {
- const p = lastChild.props;
- if (!Array.isArray(p.children))
- p.children = [p.children];
-
- children = p.children;
- }
// typescript parser goes crazy if this is inline
const id = `vc-view-${name.toLowerCase()}-raw`;
- children.splice(-1, 0,
+ const action = isMessage
+ ? () => openViewRawModalMessage(value)
+ : () => openViewRawModal(JSON.stringify(value, null, 4), name);
+
+ const devContainer = findGroupChildrenByChildId(`devmode-copy-id-${value.id}`, children);
+
+ (devContainer ?? children).splice(-1, 0,
openViewRawModal(JSON.stringify(value, null, 4), name)}
+ action={action}
icon={CopyIcon}
/>
);
@@ -186,7 +191,8 @@ export default definePlugin({
"thread-context": MakeContextCallback("Channel"),
"gdm-context": MakeContextCallback("Channel"),
"user-context": MakeContextCallback("User"),
- "dev-context": devContextCallback
+ "dev-context": devContextCallback,
+ "message": MakeContextCallback("Message"),
},
messagePopoverButton: {