LinaTsukusu / youtube-chat

Fetch YouTube Live chats
MIT License
213 stars 46 forks source link

youtube-chat

npm version npm NPM CI

Fetch YouTube live chat without API

You will need to take full responsibility for your action

Getting started

  1. Install
    • npm i youtube-chat
    • yarn add youtube-chat
  2. Import
    • Javascript
      const { LiveChat } = require("youtube-chat")
    • Typescript
      import { LiveChat } from "youtube-chat"
  3. Create instance with ChannelID or LiveID

    // If channelId is specified, liveId in the current stream is automatically acquired.
    // Recommended
    const liveChat = new LiveChat({channelId: "CHANNEL_ID_HERE"})
    
    // Or specify LiveID in Stream manually.
    const liveChat = new LiveChat({liveId: "LIVE_ID_HERE"})
  4. Add events

    // Emit at start of observation chat.
    // liveId: string
    liveChat.on("start", (liveId) => {
      /* Your code here! */
    })
    
    // Emit at end of observation chat.
    // reason: string?
    liveChat.on("end", (reason) => {
      /* Your code here! */
    })
    
    // Emit at receive chat.
    // chat: ChatItem
    liveChat.on("chat", (chatItem) => {
      /* Your code here! */
    })
    
    // Emit when an error occurs
    // err: Error or any
    liveChat.on("error", (err) => {
      /* Your code here! */
    })
  5. Start
    // Start fetch loop
    const ok = await liveChat.start()
    if (!ok) {
      console.log("Failed to start, check emitted error")
    }
  6. Stop loop
    liveChat.stop()

Types

ChatItem

interface ChatItem {
   author: {
      name: string
      thumbnail?: ImageItem
      channelId: string
      badge?: {
         thumbnail: ImageItem
         label: string
      }
   }
   message: MessageItem[]
   superchat?: {
      amount: string
      color: string
      sticker?: ImageItem
   }
   isMembership: boolean
   isVerified: boolean
   isOwner: boolean
   isModerator: boolean
   timestamp: Date
}

MessageItem

type MessageItem = { text: string } | EmojiItem

ImageItem

interface ImageItem {
  url: string
  alt: string
}

EmojiItem

interface EmojiItem extends ImageItem {
  emojiText: string
  isCustomEmoji: boolean
}

References

Thank you!👍