aboutsummaryrefslogtreecommitdiff
path: root/src/utils/discord.tsx
diff options
context:
space:
mode:
authorPhil <letsphil12@gmail.com>2023-06-16 19:35:50 +0200
committerGitHub <noreply@github.com>2023-06-16 19:35:50 +0200
commite8d90d2b45e8be0595f75454429fc1a5cedb4e33 (patch)
tree68c24a51d3fe3ba00d7a4314989e5c9ddbdf5403 /src/utils/discord.tsx
parent55af40ee747fbf872eb5bb07a49ea4cd276e8c34 (diff)
downloadVencord-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.tsx101
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>
+ ));
+}