/* * Vencord, a Discord client mod * Copyright (c) 2024 Vendicated and contributors * SPDX-License-Identifier: GPL-3.0-or-later */ import "./styles.css"; import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; import { FluxDispatcher, ReactDOM, useEffect, useState } from "@webpack/common"; import { Root } from "react-dom/client"; let jumpscareRoot: Root | undefined; const settings = definePluginSettings({ imageSource: { type: OptionType.STRING, description: "Sets the image url of the jumpscare", default: "https://github.com/Equicord/Equibored/blob/main/misc/troll.gif?raw=true" }, audioSource: { type: OptionType.STRING, description: "Sets the audio url of the jumpscare", default: "https://github.com/Equicord/Equibored/raw/main/misc/trollolol.mp3?raw=true" }, chance: { type: OptionType.NUMBER, description: "The chance of a jumpscare happening (1 in X so: 100 = 1/100 or 1%, 50 = 1/50 or 2%, etc.)", default: 1000 } }); function getJumpscareRoot(): Root { if (!jumpscareRoot) { const element = document.createElement("div"); element.id = "jumpscare-root"; element.classList.add("jumpscare-root"); document.body.append(element); jumpscareRoot = ReactDOM.createRoot(element); } return jumpscareRoot; } export default definePlugin({ name: "Jumpscare", description: "Adds a configurable chance of jumpscaring you whenever you open a channel. Inspired by Geometry Dash Mega Hack", authors: [Devs.surgedevs], settings, start() { getJumpscareRoot().render( ); }, stop() { jumpscareRoot?.unmount(); jumpscareRoot = undefined; }, JumpscareComponent() { const [isPlaying, setIsPlaying] = useState(false); const audio = new Audio(settings.store.audioSource); const jumpscare = event => { if (isPlaying) return; const chance = 1 / settings.store.chance; if (Math.random() > chance) return; setIsPlaying(true); audio.play(); console.log(isPlaying); setTimeout(() => { setIsPlaying(false); }, 1000); }; useEffect(() => { FluxDispatcher.subscribe("CHANNEL_SELECT", jumpscare); return () => { FluxDispatcher.unsubscribe("CHANNEL_SELECT", jumpscare); }; }); return ; } });