mirror of
https://github.com/Equicord/Equicord.git
synced 2025-06-24 13:57:02 -04:00
forked!!
This commit is contained in:
parent
538b87062a
commit
ea7451bcdc
326 changed files with 24876 additions and 2280 deletions
14
src/equicordplugins/hideMessage/EyeIcon.tsx
Normal file
14
src/equicordplugins/hideMessage/EyeIcon.tsx
Normal file
|
@ -0,0 +1,14 @@
|
|||
/*
|
||||
* Vencord, a Discord client mod
|
||||
* Copyright (c) 2024 Vendicated and contributors
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
export function EyeIcon({ height = 24, width = 24, className }: { height?: number; width?: number; className?: string; }) {
|
||||
return (
|
||||
<svg className={className} height={height} width={width} viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" >
|
||||
<path fill="currentColor" d="M15.56 11.77c.2-.1.44.02.44.23a4 4 0 1 1-4-4c.21 0 .33.25.23.44a2.5 2.5 0 0 0 3.32 3.32Z" />
|
||||
<path fill="currentColor" fill-rule="evenodd" d="M22.89 11.7c.07.2.07.4 0 .6C22.27 13.9 19.1 21 12 21c-7.11 0-10.27-7.11-10.89-8.7a.83.83 0 0 1 0-.6C1.73 10.1 4.9 3 12 3c7.11 0 10.27 7.11 10.89 8.7Zm-4.5-3.62A15.11 15.11 0 0 1 20.85 12c-.38.88-1.18 2.47-2.46 3.92C16.87 17.62 14.8 19 12 19c-2.8 0-4.87-1.38-6.39-3.08A15.11 15.11 0 0 1 3.15 12c.38-.88 1.18-2.47 2.46-3.92C7.13 6.38 9.2 5 12 5c2.8 0 4.87 1.38 6.39 3.08Z" clip-rule="evenodd" />
|
||||
</svg>
|
||||
);
|
||||
}
|
14
src/equicordplugins/hideMessage/HideIcon.tsx
Normal file
14
src/equicordplugins/hideMessage/HideIcon.tsx
Normal file
|
@ -0,0 +1,14 @@
|
|||
/*
|
||||
* Vencord, a Discord client mod
|
||||
* Copyright (c) 2024 Vendicated and contributors
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
export function HideIcon({ height = 24, width = 24, className }: { height?: number; width?: number; className?: string; }) {
|
||||
return (
|
||||
<svg className={className} height={height} width={width} viewBox="0 0 23 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.06358 19.4719C7.8226 19.7129 7.88837 20.119 8.20282 20.2504C9.31861 20.7166 10.5806 21 12 21C19.1 21 22.27 13.9 22.89 12.3C22.96 12.1 22.96 11.9 22.89 11.7C22.6279 11.0278 21.912 9.36931 20.6355 7.67842C20.4569 7.44184 20.1113 7.42419 19.9017 7.63379L19.1844 8.35115C19.0057 8.52986 18.9892 8.81332 19.139 9.01682C19.7777 9.88405 20.3225 10.8178 20.7633 11.8026C20.8195 11.9282 20.8197 12.0714 20.7631 12.1969C20.3546 13.104 19.5796 14.5725 18.39 15.92C16.87 17.62 14.8 19 12 19C11.0499 19 10.1838 18.8411 9.39472 18.5647C9.20611 18.4986 8.99473 18.5408 8.85341 18.6821L8.06358 19.4719ZM12.2958 15.2397C11.9993 15.5362 12.1829 16.0178 12.5975 15.9551C12.9163 15.907 13.2297 15.8202 13.5307 15.6955C14.2616 15.3928 14.8864 14.8801 15.3259 14.2223C15.7654 13.5645 16 12.7911 16 12C16 11.9755 15.9967 11.9523 15.9907 11.9305C15.9432 11.7599 15.7142 11.8214 15.589 11.9465L12.2958 15.2397ZM12.0655 8.00857C12.2382 8.05521 12.1766 8.28779 12.0502 8.41427L8.76028 11.7042C8.46375 12.0007 7.98224 11.8171 8.04488 11.4025C8.09303 11.0837 8.1798 10.7703 8.30448 10.4693C8.60723 9.73836 9.11992 9.11365 9.77772 8.67412C10.4355 8.2346 11.2089 8 12 8C12.023 8 12.0449 8.00299 12.0655 8.00857ZM15.1466 5.31789C15.0053 5.4592 14.7939 5.50137 14.6053 5.4353C13.8162 5.15891 12.9501 5 12 5C9.2 5 7.13 6.38 5.61 8.08C4.42045 9.42754 3.64546 10.896 3.23687 11.8031C3.18035 11.9286 3.18047 12.0718 3.23671 12.1974C3.67759 13.1822 4.22228 14.116 4.86096 14.9832C5.01083 15.1867 4.99433 15.4702 4.81562 15.6489L4.09827 16.3662C3.88867 16.5758 3.54305 16.5582 3.36446 16.3216C2.08807 14.6307 1.37209 12.9722 1.11 12.3C1.03518 12.107 1.03518 11.893 1.11 11.7C1.73 10.1 4.9 3 12 3C13.4194 3 14.6814 3.28337 15.7972 3.74961C16.1117 3.88101 16.1774 4.28705 15.9365 4.52802L15.1466 5.31789Z" fill="currentColor" />
|
||||
<path d="M4 20L20 4" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" />
|
||||
</svg>
|
||||
);
|
||||
}
|
20
src/equicordplugins/hideMessage/HideMessageAccessory.tsx
Normal file
20
src/equicordplugins/hideMessage/HideMessageAccessory.tsx
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* Vencord, a Discord client mod
|
||||
* Copyright (c) 2024 Vendicated and contributors
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { cl, revealMessage } from "./";
|
||||
import { HideIcon } from "./HideIcon";
|
||||
|
||||
export const HideMessageAccessory = ({ id }: { id: string; }) => {
|
||||
return (
|
||||
<span className={cl("accessory")}>
|
||||
<HideIcon width={16} height={16} />
|
||||
This message is hidden •{" "}
|
||||
<button onClick={() => revealMessage(id)} className={cl("reveal")}>
|
||||
Reveal
|
||||
</button>
|
||||
</span>
|
||||
);
|
||||
};
|
163
src/equicordplugins/hideMessage/index.tsx
Normal file
163
src/equicordplugins/hideMessage/index.tsx
Normal file
|
@ -0,0 +1,163 @@
|
|||
/*
|
||||
* Vencord, a Discord client mod
|
||||
* Copyright (c) 2024 Vendicated and contributors
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import "./styles.css";
|
||||
|
||||
import { NavContextMenuPatchCallback } from "@api/ContextMenu";
|
||||
import { get, set } from "@api/DataStore";
|
||||
import { addAccessory, removeAccessory } from "@api/MessageAccessories";
|
||||
import { definePluginSettings } from "@api/Settings";
|
||||
import { classNameFactory } from "@api/Styles";
|
||||
import { Devs } from "@utils/constants";
|
||||
import definePlugin, { OptionType } from "@utils/types";
|
||||
import { Menu } from "@webpack/common";
|
||||
|
||||
import { EyeIcon } from "./EyeIcon";
|
||||
import { HideIcon } from "./HideIcon";
|
||||
import { HideMessageAccessory } from "./HideMessageAccessory";
|
||||
|
||||
let style: HTMLStyleElement;
|
||||
|
||||
const KEY = "HideMessage_hiddenMessages";
|
||||
|
||||
let hiddenMessages = new Map<string, {
|
||||
id: string;
|
||||
channel_id: string;
|
||||
}>();
|
||||
|
||||
const patchMessageContextMenu: NavContextMenuPatchCallback = (children, { message }) => {
|
||||
const { deleted, id, channel_id } = message;
|
||||
if (deleted || message.state !== "SENT") return;
|
||||
|
||||
const isHidden = hiddenMessages.has(id);
|
||||
if (isHidden) {
|
||||
return children.push(
|
||||
<Menu.MenuItem
|
||||
id={cl("reveal")}
|
||||
label="Reveal Message"
|
||||
icon={EyeIcon}
|
||||
action={() => revealMessage(id)}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
children.push(<Menu.MenuItem
|
||||
id={cl("hide")}
|
||||
label="Hide Message"
|
||||
color="danger"
|
||||
icon={HideIcon}
|
||||
action={() => {
|
||||
hiddenMessages.set(id, { id, channel_id });
|
||||
if (settings.store.saveHiddenMessages) set(KEY, hiddenMessages);
|
||||
|
||||
buildCss();
|
||||
}}
|
||||
/>);
|
||||
};
|
||||
|
||||
const buildCss = () => {
|
||||
const elements = [...hiddenMessages.values()].map(m => `#chat-messages-${m.channel_id}-${m.id}`).join(",");
|
||||
|
||||
style.textContent = settings.store.showNotice ? `
|
||||
:is(${elements}):not(.messagelogger-deleted) > div {
|
||||
position: relative;
|
||||
background: var(--brand-experiment-05a);
|
||||
}
|
||||
:is(${elements}):not(.messagelogger-deleted) > div:hover {
|
||||
background: var(--brand-experiment-10a);
|
||||
}
|
||||
:is(${elements}):not(.messagelogger-deleted) > div:before {
|
||||
background: var(--brand-experiment);
|
||||
content: "";
|
||||
position: absolute;
|
||||
display: block;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
pointer-events: none;
|
||||
width: 2px;
|
||||
}
|
||||
:is(${elements}) [id^='message-accessories'] > *:not(.vc-hide-message-accessory),
|
||||
:is(${elements}) [id^='message-content'] > * {
|
||||
display: none !important;
|
||||
}
|
||||
:is(${elements}) [id^='message-content']:empty {
|
||||
display: block !important;
|
||||
}
|
||||
:is(${elements}) [class^='contents'] [id^='message-content']:after {
|
||||
content: "Hidden content";
|
||||
}
|
||||
` : `
|
||||
:is(${elements}) {
|
||||
display: none !important;
|
||||
}
|
||||
`;
|
||||
};
|
||||
|
||||
export const revealMessage = (id: string) => {
|
||||
if (hiddenMessages.has(id)) {
|
||||
hiddenMessages.delete(id);
|
||||
buildCss();
|
||||
|
||||
if (settings.store.saveHiddenMessages) set(KEY, hiddenMessages);
|
||||
}
|
||||
};
|
||||
|
||||
export const cl = classNameFactory("vc-hide-message-");
|
||||
|
||||
export const settings = definePluginSettings({
|
||||
showNotice: {
|
||||
type: OptionType.BOOLEAN,
|
||||
description: "Shows a notice when a message is hidden",
|
||||
default: true,
|
||||
onChange: buildCss
|
||||
},
|
||||
saveHiddenMessages: {
|
||||
type: OptionType.BOOLEAN,
|
||||
description: "Persist restarts",
|
||||
default: false,
|
||||
onChange: async (value: boolean) => {
|
||||
if (value) set(KEY, hiddenMessages);
|
||||
else (hiddenMessages = await get(KEY) || hiddenMessages);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export default definePlugin({
|
||||
name: "HideMessage",
|
||||
description: "Adds a context menu option to hide messages",
|
||||
authors: [Devs.Hanzy],
|
||||
settings,
|
||||
|
||||
contextMenus: {
|
||||
"message": patchMessageContextMenu
|
||||
},
|
||||
|
||||
async start() {
|
||||
style = document.createElement("style");
|
||||
style.id = "VencordHideMessage";
|
||||
document.head.appendChild(style);
|
||||
|
||||
if (settings.store.saveHiddenMessages) {
|
||||
hiddenMessages = await get(KEY) || hiddenMessages;
|
||||
buildCss();
|
||||
}
|
||||
|
||||
addAccessory("vc-hide-message", ({ message }) => {
|
||||
if (hiddenMessages.has(message.id) && settings.store.showNotice) return <HideMessageAccessory id={message.id} />;
|
||||
return null;
|
||||
});
|
||||
},
|
||||
|
||||
async stop() {
|
||||
for (const id of hiddenMessages.keys()) revealMessage(id);
|
||||
|
||||
removeAccessory("vc-hide-message");
|
||||
|
||||
style.remove();
|
||||
hiddenMessages.clear();
|
||||
}
|
||||
});
|
21
src/equicordplugins/hideMessage/styles.css
Normal file
21
src/equicordplugins/hideMessage/styles.css
Normal file
|
@ -0,0 +1,21 @@
|
|||
.vc-hide-message-accessory {
|
||||
margin-top: 4px;
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.vc-hide-message-accessory svg {
|
||||
margin-right: 4px;
|
||||
vertical-align: text-bottom;
|
||||
}
|
||||
|
||||
.vc-hide-message-reveal {
|
||||
all: unset;
|
||||
cursor: pointer;
|
||||
color: var(--text-link);
|
||||
}
|
||||
|
||||
.vc-hide-message-reveal:is(:hover, :focus) {
|
||||
text-decoration: underline;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue