From 9ce9b1fcb9c2879b1533832178f033e900164355 Mon Sep 17 00:00:00 2001 From: Isaac Date: Wed, 18 Sep 2024 12:39:44 +0300 Subject: [PATCH 1/7] feat(plugin): HideMessage --- src/plugins/hideMessage/index.tsx | 86 +++++++++++++++++++++++++++++++ src/utils/constants.ts | 4 ++ 2 files changed, 90 insertions(+) create mode 100644 src/plugins/hideMessage/index.tsx diff --git a/src/plugins/hideMessage/index.tsx b/src/plugins/hideMessage/index.tsx new file mode 100644 index 000000000..bee227196 --- /dev/null +++ b/src/plugins/hideMessage/index.tsx @@ -0,0 +1,86 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2024 Vendicated and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { addButton, removeButton } from "@api/MessagePopover"; +import { Devs } from "@utils/constants"; +import definePlugin, { OptionType } from "@utils/types"; +import { ChannelStore } from "@webpack/common"; +import { get, set } from "@api/DataStore"; + +let style: HTMLStyleElement; + +const KEY = "HideMessage_HiddenIds"; + +let hiddenMessages: Set = new Set(); +const getHiddenMessages = () => get(KEY).then(set => { + hiddenMessages = set ?? new Set(); + return hiddenMessages; +}); +const saveHiddenMessages = (ids: Set) => set(KEY, ids); + +const HideIcon = () => { + return + Hidden (crossed eye) + + ; +}; + +export default definePlugin({ + name: "HideMessage", + description: "Adds an option to hide messages", + authors: [Devs.IsaacZSH], + dependencies: ["MessagePopoverAPI"], + + async start() { + style = document.createElement("style"); + style.id = "VencordHideMessage"; + document.head.appendChild(style); + + await getHiddenMessages(); + await this.buildCss(); + + addButton("HideMessage", msg => { + const handleClick = () => { + this.toggleHide(msg.id) + console.log(msg) + }; + + const label = "Hide Message"; + + return { + label, + icon: HideIcon, + message: msg, + channel: ChannelStore.getChannel(msg.channel_id), + onClick: handleClick, + }; + }); + }, + + stop() { + removeButton("HideMessage"); + }, + + async buildCss() { + console.log(hiddenMessages) + console.log(...hiddenMessages) + const elements = [...hiddenMessages].map(id => `#message-content-${id}`).join(","); + style.textContent = ` + :is(${elements}) { + display: none !important; + } + `; + }, + + async toggleHide(id: string) { + const ids = await getHiddenMessages(); + if (!ids.delete(id)) + ids.add(id); + + await saveHiddenMessages(ids); + await this.buildCss(); + } +}); diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 0572fa102..4fc52ba71 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -575,6 +575,10 @@ export const Devs = /* #__PURE__*/ Object.freeze({ name: "RamziAH", id: 1279957227612147747n, }, + Isaac: { + name: "Isaac-zsh", + id: 407527870110629888n, + }, } satisfies Record); // iife so #__PURE__ works correctly From 5b81994317f5818428ab585e5ab55be6d8365cab Mon Sep 17 00:00:00 2001 From: Isaac Date: Wed, 18 Sep 2024 15:48:23 +0300 Subject: [PATCH 2/7] ugh --- src/plugins/hideMessage/index.tsx | 33 ++++++++++++++++--------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/plugins/hideMessage/index.tsx b/src/plugins/hideMessage/index.tsx index bee227196..7605e6774 100644 --- a/src/plugins/hideMessage/index.tsx +++ b/src/plugins/hideMessage/index.tsx @@ -6,13 +6,13 @@ import { addButton, removeButton } from "@api/MessagePopover"; import { Devs } from "@utils/constants"; -import definePlugin, { OptionType } from "@utils/types"; +import definePlugin from "@utils/types"; import { ChannelStore } from "@webpack/common"; import { get, set } from "@api/DataStore"; let style: HTMLStyleElement; -const KEY = "HideMessage_HiddenIds"; +const KEY = "HideMessage___HiddenMessages"; let hiddenMessages: Set = new Set(); const getHiddenMessages = () => get(KEY).then(set => { @@ -31,7 +31,7 @@ const HideIcon = () => { export default definePlugin({ name: "HideMessage", description: "Adds an option to hide messages", - authors: [Devs.IsaacZSH], + authors: [Devs.Isaac], dependencies: ["MessagePopoverAPI"], async start() { @@ -43,11 +43,6 @@ export default definePlugin({ await this.buildCss(); addButton("HideMessage", msg => { - const handleClick = () => { - this.toggleHide(msg.id) - console.log(msg) - }; - const label = "Hide Message"; return { @@ -55,7 +50,7 @@ export default definePlugin({ icon: HideIcon, message: msg, channel: ChannelStore.getChannel(msg.channel_id), - onClick: handleClick, + onClick: () => this.toggleHide(`{"channelId": "${msg.channel_id}", "messageId": "${msg.id}"}`) }; }); }, @@ -65,20 +60,26 @@ export default definePlugin({ }, async buildCss() { - console.log(hiddenMessages) - console.log(...hiddenMessages) - const elements = [...hiddenMessages].map(id => `#message-content-${id}`).join(","); + let chatMessages = "" + let messagesContent = "" + hiddenMessages.forEach((ids) => { + chatMessages += `#chat-messages-${JSON.parse(ids).channelId}-${JSON.parse(ids).messageId},` + messagesContent += `#message-content-${JSON.parse(ids).messageId},` + }) style.textContent = ` - :is(${elements}) { + :is(${chatMessages}) :is([class*="message_d5deea"]) :is([class*="embedWrapper"], [class*="clickableSticker"]) { + display: none !important; + } + :is(${messagesContent}) { display: none !important; } `; }, - async toggleHide(id: string) { + async toggleHide(sentIds: string) { const ids = await getHiddenMessages(); - if (!ids.delete(id)) - ids.add(id); + if (!ids.delete(sentIds)) + ids.add(sentIds); await saveHiddenMessages(ids); await this.buildCss(); From 39d55f64aaf5a9428865aa30d9f1b54e481c39df Mon Sep 17 00:00:00 2001 From: Isaac Date: Wed, 18 Sep 2024 16:03:48 +0300 Subject: [PATCH 3/7] ugh 2 --- src/plugins/hideMessage/index.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plugins/hideMessage/index.tsx b/src/plugins/hideMessage/index.tsx index 7605e6774..b9a11b241 100644 --- a/src/plugins/hideMessage/index.tsx +++ b/src/plugins/hideMessage/index.tsx @@ -60,12 +60,9 @@ export default definePlugin({ }, async buildCss() { - let chatMessages = "" - let messagesContent = "" - hiddenMessages.forEach((ids) => { - chatMessages += `#chat-messages-${JSON.parse(ids).channelId}-${JSON.parse(ids).messageId},` - messagesContent += `#message-content-${JSON.parse(ids).messageId},` - }) + const chatMessages = [...hiddenMessages].map(ids => `#chat-messages-${JSON.parse(ids).channelId}-${JSON.parse(ids).messageId}`).join(","); + const messagesContent = [...hiddenMessages].map(ids => `#message-content-${JSON.parse(ids).messageId}`).join(","); + const messagesAccessories = [...hiddenMessages].map(ids => `#message-accessories-${JSON.parse(ids).messageId}`).join(","); style.textContent = ` :is(${chatMessages}) :is([class*="message_d5deea"]) :is([class*="embedWrapper"], [class*="clickableSticker"]) { display: none !important; @@ -73,6 +70,9 @@ export default definePlugin({ :is(${messagesContent}) { display: none !important; } + :is(${messagesAccessories}) { + display: none !important; + } `; }, From 140f8bc31ee314d62ebcd4a8a312290a2921f586 Mon Sep 17 00:00:00 2001 From: Isaac Date: Wed, 18 Sep 2024 16:04:56 +0300 Subject: [PATCH 4/7] forgot to undo this! --- src/plugins/hideMessage/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/hideMessage/index.tsx b/src/plugins/hideMessage/index.tsx index b9a11b241..09c8f3835 100644 --- a/src/plugins/hideMessage/index.tsx +++ b/src/plugins/hideMessage/index.tsx @@ -12,7 +12,7 @@ import { get, set } from "@api/DataStore"; let style: HTMLStyleElement; -const KEY = "HideMessage___HiddenMessages"; +const KEY = "HideMessage_HiddenMessages"; let hiddenMessages: Set = new Set(); const getHiddenMessages = () => get(KEY).then(set => { From 572b304d9813aa8703f76cf43dbf176554da98c6 Mon Sep 17 00:00:00 2001 From: Isaac Date: Thu, 19 Sep 2024 01:37:18 +0300 Subject: [PATCH 5/7] Update index.tsx --- src/plugins/hideMessage/index.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/plugins/hideMessage/index.tsx b/src/plugins/hideMessage/index.tsx index 09c8f3835..ca192af2a 100644 --- a/src/plugins/hideMessage/index.tsx +++ b/src/plugins/hideMessage/index.tsx @@ -68,7 +68,16 @@ export default definePlugin({ display: none !important; } :is(${messagesContent}) { - display: none !important; + visibility: hidden; + } + :is(${messagesContent})::after { + visibility: visible; + content: "Message hidden" !important; + color: var(--text-muted); + font-size: 80%; + position: absolute; + display: block; + top: 0; } :is(${messagesAccessories}) { display: none !important; From f01f1e03cc363bb3cfd905b3add89b23b79b7c19 Mon Sep 17 00:00:00 2001 From: Isaac Date: Thu, 19 Sep 2024 01:54:14 +0300 Subject: [PATCH 6/7] remove svg title --- src/plugins/hideMessage/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/hideMessage/index.tsx b/src/plugins/hideMessage/index.tsx index ca192af2a..41fa78f2c 100644 --- a/src/plugins/hideMessage/index.tsx +++ b/src/plugins/hideMessage/index.tsx @@ -23,8 +23,8 @@ const saveHiddenMessages = (ids: Set) => set(KEY, ids); const HideIcon = () => { return - Hidden (crossed eye) - + + ; }; From f2b6dcbb912a3f3f4f20c9f2a1454fc30950dc8b Mon Sep 17 00:00:00 2001 From: Isaac Date: Thu, 19 Sep 2024 03:08:51 +0300 Subject: [PATCH 7/7] make it togglable --- src/plugins/hideMessage/index.tsx | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/plugins/hideMessage/index.tsx b/src/plugins/hideMessage/index.tsx index 41fa78f2c..a62a3bf13 100644 --- a/src/plugins/hideMessage/index.tsx +++ b/src/plugins/hideMessage/index.tsx @@ -5,8 +5,9 @@ */ import { addButton, removeButton } from "@api/MessagePopover"; +import { Settings } from "@api/Settings"; import { Devs } from "@utils/constants"; -import definePlugin from "@utils/types"; +import definePlugin, { OptionType } from "@utils/types"; import { ChannelStore } from "@webpack/common"; import { get, set } from "@api/DataStore"; @@ -33,6 +34,13 @@ export default definePlugin({ description: "Adds an option to hide messages", authors: [Devs.Isaac], dependencies: ["MessagePopoverAPI"], + options: { + showMessageHiddenText: { + description: `Hidden messages will contain a small text indicating they're hidden.`, + type: OptionType.BOOLEAN, + default: true + }, + }, async start() { style = document.createElement("style"); @@ -70,19 +78,22 @@ export default definePlugin({ :is(${messagesContent}) { visibility: hidden; } - :is(${messagesContent})::after { - visibility: visible; - content: "Message hidden" !important; - color: var(--text-muted); - font-size: 80%; - position: absolute; - display: block; - top: 0; - } :is(${messagesAccessories}) { display: none !important; } `; + if (Settings.plugins.HideMessage.showMessageHiddenText) { + style.textContent += ` + :is(${messagesContent})::after { + visibility: visible; + content: "Message hidden" !important; + color: var(--text-muted); + font-size: 80%; + position: absolute; + display: block; + top: 0; + } + `} }, async toggleHide(sentIds: string) {