diff --git a/README.md b/README.md index 6960e168..d9913ee2 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
-146 additional plugins +147 additional plugins ### All Platforms - AllCallTimers by MaxHerbold & D3SOX @@ -158,7 +158,7 @@ You can join our [discord server](https://discord.gg/5Xh2W87egW) for commits, ch - None At This Time ### Vesktop & Equibop Only -- None At This Time +- ScreenRecorder by AutumnVN ### Discord Desktop Only - MediaDownloader by Colorman diff --git a/src/components/PluginSettings/index.tsx b/src/components/PluginSettings/index.tsx index cfd2b1ba..8143ad05 100644 --- a/src/components/PluginSettings/index.tsx +++ b/src/components/PluginSettings/index.tsx @@ -197,8 +197,8 @@ function ExcludedPluginsList({ search }: { search: string; }) { const ExcludedReasons: Record<"web" | "discordDesktop" | "vencordDesktop" | "equicordDesktop" | "desktop" | "dev", string> = { desktop: "Discord Desktop app or Vesktop", discordDesktop: "Discord Desktop app", - vencordDesktop: "Vesktop app", - equicordDesktop: "Equibop app", + vencordDesktop: "Vesktop app & Equibop app", + equicordDesktop: "Vesktop app & Equibop app", web: "Vesktop & Equibop apps as well as the Web version of Discord", dev: "Developer version of Equicord" }; diff --git a/src/equicordplugins/screenRecorder.vencordDesktop/index.tsx b/src/equicordplugins/screenRecorder.vencordDesktop/index.tsx new file mode 100644 index 00000000..a9a0e646 --- /dev/null +++ b/src/equicordplugins/screenRecorder.vencordDesktop/index.tsx @@ -0,0 +1,69 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2023 Vendicated and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { addContextMenuPatch, removeContextMenuPatch } from "@api/ContextMenu"; +import { ScreenshareIcon } from "@components/Icons"; +import { Devs } from "@utils/constants"; +import definePlugin from "@utils/types"; +import { findByPropsLazy } from "@webpack"; +import { Menu, UploadHandler } from "@webpack/common"; + +const OptionClasses = findByPropsLazy("optionName", "optionIcon", "optionLabel"); + +let recoder: MediaRecorder; + +export default definePlugin({ + name: "ScreenRecorder", + description: "epic screen recorder lol", + authors: [Devs.AutumnVN], + contextMenus: { + "channel-attach": startRecording + } +}); + +function startRecording(children) { + children.push( + + +
Start Recording
+ + } + action={async () => { + const stream = await navigator.mediaDevices.getDisplayMedia({ audio: true, video: { frameRate: { ideal: 60 } } }); + recoder = new MediaRecorder(stream); + recoder.start(); + removeContextMenuPatch("channel-attach", startRecording); + addContextMenuPatch("channel-attach", stopRecording); + }} + /> + ); +} + +function stopRecording(children, props) { + children.push( + + +
Stop Recording
+ + } + action={() => { + recoder.addEventListener("dataavailable", e => { + const file = new File([e.data], "watch if cute.webm", { type: "video/webm" }); + UploadHandler.promptToUpload([file], props.channel, 0); + }); + recoder.stop(); + removeContextMenuPatch("channel-attach", stopRecording); + addContextMenuPatch("channel-attach", startRecording); + }} + /> + ); +}