From e8d90d2b45e8be0595f75454429fc1a5cedb4e33 Mon Sep 17 00:00:00 2001 From: Phil Date: Fri, 16 Jun 2023 19:35:50 +0200 Subject: feat(plugin): BiggerStreamPreview (#1222) Co-authored-by: V --- src/utils/constants.ts | 4 ++ src/utils/discord.ts | 79 -------------------------------------- src/utils/discord.tsx | 101 +++++++++++++++++++++++++++++++++++++++++++++++++ src/utils/modal.tsx | 21 +++++++++- 4 files changed, 125 insertions(+), 80 deletions(-) delete mode 100644 src/utils/discord.ts create mode 100644 src/utils/discord.tsx (limited to 'src/utils') diff --git a/src/utils/constants.ts b/src/utils/constants.ts index bcd8023..7dc3601 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -319,6 +319,10 @@ export const Devs = /* #__PURE__*/ Object.freeze({ name: "amia", id: 142007603549962240n }, + phil: { + name: "phil", + id: 305288513941667851n + }, ImLvna: { name: "Luna <3", id: 174200708818665472n diff --git a/src/utils/discord.ts b/src/utils/discord.ts deleted file mode 100644 index 228e2b4..0000000 --- a/src/utils/discord.ts +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Vencord, a modification for Discord's desktop app - * Copyright (c) 2022 Vendicated and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . -*/ - -import { MessageObject } from "@api/MessageEvents"; -import { findByPropsLazy, findLazy } from "@webpack"; -import { ChannelStore, ComponentDispatch, GuildStore, PrivateChannelsStore, SelectedChannelStore } from "@webpack/common"; -import { Guild, Message } from "discord-types/general"; - -const PreloadedUserSettings = findLazy(m => m.ProtoClass?.typeName.endsWith("PreloadedUserSettings")); -const MessageActions = findByPropsLazy("editMessage", "sendMessage"); - -export function getCurrentChannel() { - return ChannelStore.getChannel(SelectedChannelStore.getChannelId()); -} - -export function getCurrentGuild(): Guild | undefined { - return GuildStore.getGuild(getCurrentChannel()?.guild_id); -} - -export function openPrivateChannel(userId: string) { - PrivateChannelsStore.openPrivateChannel(userId); -} - -export const enum Theme { - Dark = 1, - Light = 2 -} - -export function getTheme(): Theme { - return PreloadedUserSettings.getCurrentValue()?.appearance?.theme; -} - -export function insertTextIntoChatInputBox(text: string) { - ComponentDispatch.dispatchToLastSubscribed("INSERT_TEXT", { - rawText: text, - plainText: text - }); -} - -interface MessageExtra { - messageReference: Message["messageReference"]; - allowedMentions: { - parse: string[]; - replied_user: boolean; - }; - stickerIds: string[]; -} - -export function sendMessage( - channelId: string, - data: Partial, - waitForChannelReady?: boolean, - extra?: Partial -) { - const messageData = { - content: "", - invalidEmojis: [], - tts: false, - validNonShortcutEmojis: [], - ...data - }; - - return MessageActions.sendMessage(channelId, messageData, waitForChannelReady, extra); -} diff --git a/src/utils/discord.tsx b/src/utils/discord.tsx new file mode 100644 index 0000000..2752645 --- /dev/null +++ b/src/utils/discord.tsx @@ -0,0 +1,101 @@ +/* + * Vencord, a modification for Discord's desktop app + * Copyright (c) 2022 Vendicated and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +*/ + +import { MessageObject } from "@api/MessageEvents"; +import { findByPropsLazy, findLazy } from "@webpack"; +import { ChannelStore, ComponentDispatch, GuildStore, MaskedLink, ModalImageClasses, PrivateChannelsStore, SelectedChannelStore } from "@webpack/common"; +import { Guild, Message } from "discord-types/general"; + +import { ImageModal, ModalRoot, ModalSize, openModal } from "./modal"; + +const PreloadedUserSettings = findLazy(m => m.ProtoClass?.typeName.endsWith("PreloadedUserSettings")); +const MessageActions = findByPropsLazy("editMessage", "sendMessage"); + +export function getCurrentChannel() { + return ChannelStore.getChannel(SelectedChannelStore.getChannelId()); +} + +export function getCurrentGuild(): Guild | undefined { + return GuildStore.getGuild(getCurrentChannel()?.guild_id); +} + +export function openPrivateChannel(userId: string) { + PrivateChannelsStore.openPrivateChannel(userId); +} + +export const enum Theme { + Dark = 1, + Light = 2 +} + +export function getTheme(): Theme { + return PreloadedUserSettings.getCurrentValue()?.appearance?.theme; +} + +export function insertTextIntoChatInputBox(text: string) { + ComponentDispatch.dispatchToLastSubscribed("INSERT_TEXT", { + rawText: text, + plainText: text + }); +} + +interface MessageExtra { + messageReference: Message["messageReference"]; + allowedMentions: { + parse: string[]; + replied_user: boolean; + }; + stickerIds: string[]; +} + +export function sendMessage( + channelId: string, + data: Partial, + waitForChannelReady?: boolean, + extra?: Partial +) { + const messageData = { + content: "", + invalidEmojis: [], + tts: false, + validNonShortcutEmojis: [], + ...data + }; + + return MessageActions.sendMessage(channelId, messageData, waitForChannelReady, extra); +} + +export function openImageModal(url: string, props?: Partial>): string { + return openModal(modalProps => ( + + } + shouldHideMediaOptions={false} + shouldAnimate + {...props} + /> + + )); +} diff --git a/src/utils/modal.tsx b/src/utils/modal.tsx index 05d235f..4ac6f9b 100644 --- a/src/utils/modal.tsx +++ b/src/utils/modal.tsx @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -import { filters, mapMangledModuleLazy } from "@webpack"; +import { filters, findByCode, mapMangledModuleLazy } from "@webpack"; import type { ComponentType, PropsWithChildren, ReactNode, Ref } from "react"; import { LazyComponent } from "./react"; @@ -107,6 +107,25 @@ export const Modals = mapMangledModuleLazy(".closeWithCircleBackground", { }>; }; +export type ImageModal = ComponentType<{ + className?: string; + src: string; + placeholder: string; + original: string; + width?: number; + height?: number; + animated?: boolean; + responsive?: boolean; + renderLinkComponent(props: any): ReactNode; + maxWidth?: number; + maxHeight?: number; + shouldAnimate?: boolean; + onClose?(): void; + shouldHideMediaOptions?: boolean; +}>; + +export const ImageModal = LazyComponent(() => findByCode(".renderLinkComponent", ".responsive") as ImageModal); + export const ModalRoot = LazyComponent(() => Modals.ModalRoot); export const ModalHeader = LazyComponent(() => Modals.ModalHeader); export const ModalContent = LazyComponent(() => Modals.ModalContent); -- cgit