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/scripts/build/build.mjs b/scripts/build/build.mjs index 3ec9ddd4..b6338fd8 100644 --- a/scripts/build/build.mjs +++ b/scripts/build/build.mjs @@ -187,6 +187,7 @@ await Promise.all([ sourcemap, plugins: [ globPlugins("vencordDesktop"), + globPlugins("equicordDesktop"), ...commonOpts.plugins ], define: { @@ -239,6 +240,7 @@ await Promise.all([ sourcemap, plugins: [ globPlugins("equicordDesktop"), + globPlugins("vencordDesktop"), ...commonOpts.plugins ], define: { 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); + }} + /> + ); +} diff --git a/src/plugins/messageLogger/index.tsx b/src/plugins/messageLogger/index.tsx index 29a81428..e4d8ca74 100644 --- a/src/plugins/messageLogger/index.tsx +++ b/src/plugins/messageLogger/index.tsx @@ -16,7 +16,6 @@ import { disableStyle, enableStyle } from "@api/Styles"; import ErrorBoundary from "@components/ErrorBoundary"; import { Devs } from "@utils/constants"; import { getIntlMessage } from "@utils/discord"; -import { proxyLazy } from "@utils/lazy"; import { Logger } from "@utils/Logger"; import { classes } from "@utils/misc"; import definePlugin, { OptionType } from "@utils/types"; @@ -349,11 +348,35 @@ export default definePlugin({ ); }, - Messages: proxyLazy(() => ({ - DELETED_MESSAGE_COUNT: getMessage( - "{count, plural, =0 {No deleted messages} one {{count} deleted message} other {{count} deleted messages}}", - ), - })), + Messages: { + // DELETED_MESSAGE_COUNT: getMessage("{count, plural, =0 {No deleted messages} one {{count} deleted message} other {{count} deleted messages}}") + // TODO: find a better way to generate intl messages + DELETED_MESSAGE_COUNT: () => ({ + ast: [[ + 6, + "count", + { + "=0": ["No deleted messages"], + one: [ + [ + 1, + "count" + ], + " deleted message" + ], + other: [ + [ + 1, + "count" + ], + " deleted messages" + ] + }, + 0, + "cardinal" + ]] + }) + }, patches: [ { diff --git a/src/plugins/moreUserTags/index.tsx b/src/plugins/moreUserTags/index.tsx index f23fd552..d78c82b1 100644 --- a/src/plugins/moreUserTags/index.tsx +++ b/src/plugins/moreUserTags/index.tsx @@ -301,6 +301,7 @@ export default definePlugin({ const [tagName, variant] = passedTagName.split("-"); if (!passedTagName) return getIntlMessage("APP_TAG"); const tag = tags.find(({ name }) => tagName === name); + if (!tag && Settings.plugins.NoAppsAllowed.enabled) return "BOT"; if (!tag) return getIntlMessage("APP_TAG"); if (variant === "BOT" && tagName !== "WEBHOOK" && this.settings.store.dontShowForBots) return getIntlMessage("APP_TAG"); diff --git a/src/plugins/noBlockedMessages/index.ts b/src/plugins/noBlockedMessages/index.ts index eafe8a82..f8454066 100644 --- a/src/plugins/noBlockedMessages/index.ts +++ b/src/plugins/noBlockedMessages/index.ts @@ -18,18 +18,18 @@ import { Settings } from "@api/Settings"; import { Devs } from "@utils/constants"; +import { runtimeHashMessageKey } from "@utils/intlHash"; import { Logger } from "@utils/Logger"; import definePlugin, { OptionType } from "@utils/types"; import { findByPropsLazy } from "@webpack"; -import { MessageStore } from "@webpack/common"; +import { i18n, MessageStore } from "@webpack/common"; import { Message } from "discord-types/general"; const RelationshipStore = findByPropsLazy("getRelationships", "isBlocked"); interface MessageDeleteProps { - collapsedReason: { - message: string; - }; + // i18n message i18n.t["+FcYMz"] if deleted, with args + collapsedReason: () => any } export default definePlugin({ @@ -102,6 +102,11 @@ export default definePlugin({ }, shouldHide(props: MessageDeleteProps) { - return !props?.collapsedReason?.message.includes("deleted"); + try { + return props.collapsedReason() === i18n.t[runtimeHashMessageKey("BLOCKED_MESSAGE_COUNT")](); + } catch (e) { + console.error(e); + } + return false; } });