From c9541dc156fd859c2d66f3977bc154eb64357b6a Mon Sep 17 00:00:00 2001 From: mochie Date: Wed, 5 Feb 2025 17:22:39 +0100 Subject: [PATCH] add toggleVideoBind (#138) * Add fullVcPfp * merge latest * Add toggleVideoBind * oops * Clearer modifier key descriptions * Delete src/equicordplugins/fullVcPfp/index.css --------- Co-authored-by: thororen <78185467+thororen1234@users.noreply.github.com> --- README.md | 3 +- src/equicordplugins/toggleVideoBind/index.ts | 70 ++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 src/equicordplugins/toggleVideoBind/index.ts diff --git a/README.md b/README.md index 662c61b4..da3cefc9 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ You can join our [discord server](https://discord.gg/5Xh2W87egW) for commits, ch ### Extra included plugins
-150 additional plugins +151 additional plugins ### All Platforms - AllCallTimers by MaxHerbold & D3SOX @@ -136,6 +136,7 @@ You can join our [discord server](https://discord.gg/5Xh2W87egW) for commits, ch - ThemeLibrary by Fafa - Timezones by Aria - Title by Kyuuhachi +- toggleVideoBind by mochie - TosuRPC by AutumnVN - Translate+ by Prince527 & Ven - UnitConverter by sadan diff --git a/src/equicordplugins/toggleVideoBind/index.ts b/src/equicordplugins/toggleVideoBind/index.ts new file mode 100644 index 00000000..e4b49b28 --- /dev/null +++ b/src/equicordplugins/toggleVideoBind/index.ts @@ -0,0 +1,70 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2025 Vendicated and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { definePluginSettings } from "@api/Settings"; +import { EquicordDevs } from "@utils/constants"; +import definePlugin, { OptionType } from "@utils/types"; +import { findByPropsLazy } from "@webpack"; +import { FluxDispatcher } from "@webpack/common"; + +const validKeycodes = [ + "Backspace", "Tab", "Enter", "ShiftLeft", "ShiftRight", "ControlLeft", "ControlRight", "AltLeft", "AltRight", "Pause", "CapsLock", + "Escape", "Space", "PageUp", "PageDown", "End", "Home", "ArrowLeft", "ArrowUp", "ArrowRight", "ArrowDown", "PrintScreen", "Insert", + "Delete", "Digit0", "Digit1", "Digit2", "Digit3", "Digit4", "Digit5", "Digit6", "Digit7", "Digit8", "Digit9", "KeyA", "KeyB", "KeyC", + "KeyD", "KeyE", "KeyF", "KeyG", "KeyH", "KeyI", "KeyJ", "KeyK", "KeyL", "KeyM", "KeyN", "KeyO", "KeyP", "KeyQ", "KeyR", "KeyS", "KeyT", + "KeyU", "KeyV", "KeyW", "KeyX", "KeyY", "KeyZ", "MetaLeft", "MetaRight", "ContextMenu", "Numpad0", "Numpad1", "Numpad2", "Numpad3", + "Numpad4", "Numpad5", "Numpad6", "Numpad7", "Numpad8", "Numpad9", "NumpadMultiply", "NumpadAdd", "NumpadSubtract", "NumpadDecimal", + "NumpadDivide", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "NumLock", "ScrollLock", +]; + +const settings = definePluginSettings({ + keyBind: { + description: "The key to toggle webcam when pressed.", + type: OptionType.STRING, + default: "KeyX", + isValid: (value: string) => validKeycodes.includes(value), + }, + reqCtrl: { + description: "Require control to be held.", + type: OptionType.BOOLEAN, + default: true, + }, + reqShift: { + description: "Require shift to be held.", + type: OptionType.BOOLEAN, + default: true, + }, + reqAlt: { + description: "Require alt to be held.", + type: OptionType.BOOLEAN, + default: false, + }, +}); + +const { isVideoEnabled } = findByPropsLazy("isVideoEnabled"); + +function handleKeydown({ code, ctrlKey, shiftKey, altKey }: KeyboardEvent) { + const { keyBind, reqCtrl, reqShift, reqAlt } = settings.store; + if (keyBind !== code || ctrlKey !== reqCtrl || shiftKey !== reqShift || altKey !== reqAlt) { return; } // please don't think about it + + FluxDispatcher.dispatch({ + type: "MEDIA_ENGINE_SET_VIDEO_ENABLED", + enabled: !isVideoEnabled(), + }); +} + +export default definePlugin({ + name: "toggleVideoBind", + description: "Adds a customizable bind to toggle webcam.", + authors: [EquicordDevs.mochienya], + settings, + start() { + document.addEventListener("keydown", handleKeydown); + }, + stop() { + document.removeEventListener("keydown", handleKeydown); + }, +});