From fef2d6dc6848d589f8927f746ce4f85420170c10 Mon Sep 17 00:00:00 2001 From: Key Date: Sat, 24 Jan 2026 00:53:27 +0000 Subject: [PATCH] feat(MessageClickActions): add REPLY to own messages (#677) - also adds a click timeout to double click (for MS) --- src/plugins/messageClickActions/index.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/plugins/messageClickActions/index.ts b/src/plugins/messageClickActions/index.ts index 3e3f0e39b..55a227f7c 100644 --- a/src/plugins/messageClickActions/index.ts +++ b/src/plugins/messageClickActions/index.ts @@ -34,6 +34,7 @@ const actions: { label: string; value: ClickAction; }[] = [ const doubleClickOwnActions: { label: string; value: ClickAction; }[] = [ { label: "None", value: "NONE" }, + { label: "Reply", value: "REPLY" }, { label: "Edit", value: "EDIT" }, { label: "Quote", value: "QUOTE" }, { label: "Copy Content", value: "COPY_CONTENT" }, @@ -88,6 +89,11 @@ const focusChanged = () => { } }; +let lastMouseDownTime = 0; +const onMouseDown = () => { + lastMouseDownTime = Date.now(); +}; + function modifierFromKey(e: KeyboardEvent): Modifier | null { if (e.key === "Shift") return "SHIFT"; if (e.key === "Control") return "CTRL"; @@ -166,6 +172,11 @@ const settings = definePluginSettings({ description: "Timeout to distinguish double/triple clicks (ms)", default: 300 }, + selectionHoldTimeout: { + type: OptionType.NUMBER, + description: "Timeout to allow text selection (ms)", + default: 300 + }, quoteWithReply: { type: OptionType.BOOLEAN, description: "When quoting, also reply to the message", @@ -453,12 +464,14 @@ export default definePlugin({ start() { document.addEventListener("keydown", keydown); document.addEventListener("keyup", keyup); + document.addEventListener("mousedown", onMouseDown); WindowStore.addChangeListener(focusChanged); }, stop() { document.removeEventListener("keydown", keydown); document.removeEventListener("keyup", keyup); + document.removeEventListener("mousedown", onMouseDown); WindowStore.removeChangeListener(focusChanged); if (doubleClickTimeout) { @@ -525,6 +538,8 @@ export default definePlugin({ singleClickTimeout = null; } + if (Date.now() - lastMouseDownTime > settings.store.selectionHoldTimeout) return; + const executeDoubleClick = () => { if (channel.guild_id && !PermissionStore.can(PermissionsBits.SEND_MESSAGES, channel)) return; if (msg.deleted === true) return;