# youtube-chat
> Fetch Youtube live chat without API

This module is a fork of `youtube-chat`, which was written by [LinaTsukusu](https://github.com/LinaTsukusu) and fixed up by [IcedCoffeee](https://github.com/IcedCoffeee), then it was used for freetube.. and was fixed again by BlueTree242.

Since all those people don't work on it anymore, i had to fix the bugs myself.

***You will need to take full responsibility for your actions***

## Getting started
1. Install
    - `npm i @freetube/youtube-chat`
    - `yarn add @freetube/youtube-chat`
2. Import
    - Javascript
    ```javascript
    const LiveChat = require('@freetube/youtube-chat').LiveChat
    ```
    - Typescript
    ```typescript
    import {LiveChat} from '@freetube/youtube-chat'
    ```
3. Create instance with ChannelID or LiveID
    ```javascript
    // If channelId is specified, liveId in the current stream is automatically acquired.
    const liveChat = new LiveChat({channelId: 'UCxkOLgdNumvVIQqn5ps_bJA?'})
    
    // Or specify LiveID in Stream manually.
    const liveChat = new LiveChat({liveId: 'bc5DoKBZRIo'})
    ```
4. Add events
    ```typescript
    // Emit at start of observation chat.
    // liveId: string
    liveChat.on('start', (liveId) => {})
   
    // Emit at end of observation chat.
    // reason: string?
    liveChat.on('end', (reason) => {})
    
    // Emit at receive chat.
    // comment: CommentItem
    liveChat.on('comment', (comment) => {})
    
    // Emit when an error occurs
    // err: Error
    liveChat.on('error', (err) => {})
    ```

## Types
### CommentItem
```typescript
interface CommentItem {
  id: string
  author: {
    name: string
    thumbnail?: ImageItem
    channelId: string
    badge?: {
      thumbnail: ImageItem
      label: string
    }
  }
  message: MessageItem[]
  superchat?: {
    amount: string
    color: number
  }
  membership: boolean
  isOwner: boolean
  timestamp: number
}
```

### MessageItem
```typescript
type MessageItem = { text: string } | ImageItem
```

### ImageItem
```typescript
interface ImageItem {
  url: string
  alt: string
  width: number
  height: number
}
```
