"use client"; import { useEffect, useRef, useState } from "react"; import { GlassCard } from "@/components/glass/card"; import { useWebSocket } from "@/lib/ws/context"; import { cn } from "@/lib/utils"; interface LiveMessage { id: string; content: string; username: string; channelName?: string; timestamp: string; flagged?: boolean; } export function LiveStream() { const [messages, setMessages] = useState([]); const scrollRef = useRef(null); const ws = useWebSocket(); useEffect(() => { const unsub = ws.on("message_created", (data: any) => { const msg: LiveMessage = { id: data.id, content: data.content || "(attachment)", username: data.username || "unknown", channelName: data.channelName, timestamp: new Date().toLocaleTimeString(), flagged: data.ai_status === "flagged" || data.ai_status === "warn", }; setMessages((prev) => [msg, ...prev].slice(0, 50)); }); return () => unsub(); }, [ws]); useEffect(() => { if (scrollRef.current) { scrollRef.current.scrollTop = 0; } }, [messages]); return (
Live Stream
{messages.length === 0 ? (
Waiting for messages...
) : ( messages.map((msg) => (
{msg.username} {msg.content} {msg.timestamp}
)) )}
); }