diff options
author | Phil <letsphil12@gmail.com> | 2023-06-16 19:35:50 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-16 19:35:50 +0200 |
commit | e8d90d2b45e8be0595f75454429fc1a5cedb4e33 (patch) | |
tree | 68c24a51d3fe3ba00d7a4314989e5c9ddbdf5403 /src/utils/discord.tsx | |
parent | 55af40ee747fbf872eb5bb07a49ea4cd276e8c34 (diff) | |
download | Vencord-e8d90d2b45e8be0595f75454429fc1a5cedb4e33.tar.gz Vencord-e8d90d2b45e8be0595f75454429fc1a5cedb4e33.tar.bz2 Vencord-e8d90d2b45e8be0595f75454429fc1a5cedb4e33.zip |
feat(plugin): BiggerStreamPreview (#1222)
Co-authored-by: V <vendicated@riseup.net>
Diffstat (limited to 'src/utils/discord.tsx')
-rw-r--r-- | src/utils/discord.tsx | 101 |
1 files changed, 101 insertions, 0 deletions
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 <https://www.gnu.org/licenses/>. +*/ + +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<MessageObject>, + waitForChannelReady?: boolean, + extra?: Partial<MessageExtra> +) { + const messageData = { + content: "", + invalidEmojis: [], + tts: false, + validNonShortcutEmojis: [], + ...data + }; + + return MessageActions.sendMessage(channelId, messageData, waitForChannelReady, extra); +} + +export function openImageModal(url: string, props?: Partial<React.ComponentProps<ImageModal>>): string { + return openModal(modalProps => ( + <ModalRoot + {...modalProps} + className={ModalImageClasses.modal} + size={ModalSize.DYNAMIC}> + <ImageModal + className={ModalImageClasses.image} + original={url} + placeholder={url} + src={url} + renderLinkComponent={props => <MaskedLink {...props} />} + shouldHideMediaOptions={false} + shouldAnimate + {...props} + /> + </ModalRoot> + )); +} |