From c6aa70a64731b608fade3acab48c1d1d2df280b6 Mon Sep 17 00:00:00 2001
From: 0t4u <61939142+0t4u@users.noreply.github.com>
Date: Mon, 5 Dec 2022 20:33:28 +0000
Subject: Add files via upload
---
modules/ChatReplay/ChatMessageRender.tsx | 171 +++++++++++++++++++++++++++++++
modules/ChatReplay/ChatReplay.tsx | 74 +++++++++++++
modules/ChatReplay/ChatReplayPanel.tsx | 170 ++++++++++++++++++++++++++++++
modules/ChatReplay/parser/default.ts | 21 ++++
modules/ChatReplay/parser/index.ts | 32 ++++++
modules/ChatReplay/parser/yt-dlp.ts | 169 ++++++++++++++++++++++++++++++
6 files changed, 637 insertions(+)
create mode 100644 modules/ChatReplay/ChatMessageRender.tsx
create mode 100644 modules/ChatReplay/ChatReplay.tsx
create mode 100644 modules/ChatReplay/ChatReplayPanel.tsx
create mode 100644 modules/ChatReplay/parser/default.ts
create mode 100644 modules/ChatReplay/parser/index.ts
create mode 100644 modules/ChatReplay/parser/yt-dlp.ts
(limited to 'modules/ChatReplay')
diff --git a/modules/ChatReplay/ChatMessageRender.tsx b/modules/ChatReplay/ChatMessageRender.tsx
new file mode 100644
index 0000000..1207457
--- /dev/null
+++ b/modules/ChatReplay/ChatMessageRender.tsx
@@ -0,0 +1,171 @@
+import React from "react";
+import { ChatMessage } from "../database.d";
+import { formatSeconds } from "../format";
+import { proxyYT3 as proxyURL } from "../util";
+
+export type ChatMessageRenderProps = {
+ message: ChatMessage;
+};
+
+const regexEmoji = /(:[^:]+:)/g;
+
+const ChatMessageRender = React.memo((props: ChatMessageRenderProps) => {
+ const msg = props.message;
+
+ const generateMessageContent = (msg: ChatMessage) => {
+ if (!msg.emotes) return msg.message;
+
+ // Process emotes
+ const tokens = msg.message.split(regexEmoji);
+ return tokens.map((token) => {
+ if (!token.startsWith(":")) return token;
+
+ let images = msg.emotes.find((emote) => emote.name === token)?.images;
+ if (!images)
+ images = msg.emotes.find((emote) => emote.shortcuts.includes(token))
+ ?.images;
+ if (!images) return token;
+
+ const emoteURL =
+ images.find((image) => image.id === "source")?.url || images[0]?.url;
+
+ if (!emoteURL) return token;
+ return (
+
+ );
+ });
+ };
+
+ switch (msg.message_type) {
+ case "paid_message":
+ return (
+
Error loading chat, click to retry
+ ) : downloadProgress < 0 ? ( + <> +Chat replay available!
+Click to Enable
+ > + ) : downloadProgress === 0 ? ( +Loading chat replay...
+ ) : ( +Loaded {(downloadProgress / 1024 / 1024).toFixed(2)}MB
+ )} +