Skip to content

Commit

Permalink
Add toggleVideoBind
Browse files Browse the repository at this point in the history
  • Loading branch information
RobinRMC authored Feb 5, 2025
1 parent bb002a7 commit 1e115d5
Showing 1 changed file with 69 additions and 0 deletions.
69 changes: 69 additions & 0 deletions src/plusplugins/toggleVideoBind/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
* 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 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: [{ name: "mochie", id: 1043599230247374869n }],
settings,
start() {
document.addEventListener("keydown", handleKeydown);
},
stop() {
document.removeEventListener("keydown", handleKeydown);
},
});

0 comments on commit 1e115d5

Please sign in to comment.