Plugin

BlurNSFW

Blur attachments in NSFW channels until hovered

Privacy Appearance
index.ts
Download

Source

src/plugins/blurNsfw/index.ts
1import { definePluginSettings } from "@api/Settings";
2import { managedStyleRootNode } from "@api/Styles";
3import { Devs } from "@utils/constants";
4import { createAndAppendStyle } from "@utils/css";
5import definePlugin, { OptionType } from "@utils/types";
6
7let style: HTMLStyleElement;
8
9const settings = definePluginSettings({
10 blurAmount: {
11 type: OptionType.NUMBER,
12 description: "Blur Amount (in pixels)",
13 default: 10,
14 onChange: setCss
15 }
16});
17
18function setCss() {
19 style.textContent = `
20 .vc-nsfw-img [class*=imageContainer],
21 .vc-nsfw-img [class*=wrapperPaused] {
22 filter: blur(${settings.store.blurAmount}px);
23 transition: filter 0.2s;
24
25 &:hover {
26 filter: blur(0);
27 }
28 }
29 `;
30}
31
32export default definePlugin({
33 name: "BlurNSFW",
34 description: "Blur attachments in NSFW channels until hovered",
35 tags: ["Privacy", "Appearance"],
36 authors: [Devs.Ven],
37 settings,
38
39 patches: [
40 {
41 find: "}renderStickersAccessories(",
42 replacement: [
43 {
44 match: /(\.renderReactions\(\i\).+?className:)/,
45 replace: '$&(this?.props?.channel?.nsfw?"vc-nsfw-img ":"")+'
46 }
47 ]
48 }
49 ],
50
51 start() {
52 style = createAndAppendStyle("VcBlurNsfw", managedStyleRootNode);
53
54 setCss();
55 },
56
57 stop() {
58 style?.remove();
59 }
60});
61