Twitch Logo Message Event

There are 8 unique types of messages, that all contain all the Event Data below, + message containing type + additional data specific to that message type.

Message Event Data

user is defined further below as User.

parts gives you a parsed version of text, as a Part array of text, emotes, and cheermotes.

first is true if this is a first-time chat message.

tags is the raw chat data from Twitch, if you need that.

remove is a function you can use to manually remove the rendered event if using managed mode.

Event Data
type MessageEvent = {
  type: 'message'
  id: string // same as id in message
  userId: string // same as id in user
  renderable: true
  remove: () => void
  message: {
    id: string
    date: Date
    user: User
    text: string
    parts: Part[]
    first: boolean
    tags: Map<string, string>
  } & (
    | BasicMessage
    | ActionMessage
    | HighlightMessage
    | CheerMessage
    | ReplyMessage
    | RedeemMessage
    | ResubMessage
    | AnnouncementMessage
  )
  source: 'twitch'
}

BasicMessage

Any message that isn't of a special type.

Basic Message Data
type BasicMessage = { type: 'basic' }

ActionMessage

Messages created using the /me command.

Action Message Data
type ActionMessage = { type: 'action' }

HighlightMessage

Messages created using the "Highlight My Message" channel point reward.

Highlight Message Data
type HighlightMessage = { type: 'highlight' }

CheerMessage

Cheers (opens in a new tab) are messages that contains bits.

amount is the total number of bits cheered in the message.

Cheer Message Data
type CheerMessage = {
  type: 'cheer'
  cheer: { amount: number }
}

ReplyMessage

When a user uses the "Reply to Message" feature in chat.

reply contains details of the message being replied to.

Reply Message Data
type ReplyMessage = {
  type: 'reply'
  reply: {
    id: string
    text: string
    user: {
      id: string
      userName: string
      displayName: string
    }
  }
}

RedeemMessage

When a user redeems a channel point reward that requires text.

redeem contains details of the channel point reward.

Redeem Message Data
type RedeemMessage = {
  type: 'redeem'
  redeem: {
    id: string
    name: string
    image: string
    color: string
    cost: number
  }
}

ResubMessage

When a user sends a resub message.

Resub Message Data
type ResubMessage = {
  type: 'resub'
  resub: {
    months: number
    tier: '1000' | '2000' | '3000' | 'Prime'
  }
}

AnnouncementMessage

When a moderator sends an announcement using /announce (opens in a new tab).

Announcement Message Data
type AnnouncementMessage = {
  type: 'announcement'
  announcement: { color: 'PRIMARY' | 'BLUE' | 'GREEN' | 'ORANGE' | 'PURPLE' }
}

User

pronouns is null if the user hasn't set pronouns.

color is set to a random twitch chat color if the user hasn't set a chat color. Their color will always be the same color for the entire session.

followDate is null if the user hasn't followed. The broadcaster is assigned new Date(0) (January 1, 1970, UTC).

User Data
type User = {
  id: string
  userName: string
  displayName: string
  badges: Badge[]
  pronouns: string | null
  color: string
  followDate: Date | null
  roles: {
    broadcaster: boolean
    moderator: boolean
    artist: boolean
    vip: boolean
    founder: boolean
    subscriber: boolean
  }
}
 
type Badge = {
  id: string
  image: string
}

Part

There are 3 kinds of parts, TextPart, CheerPart, and EmotePart. They all include the type and text properties.

Only channel emotes are parsed from BetterTTV (opens in a new tab) and FrankerFaceZ (opens in a new tab). Global emotes from those sources are not included.

Part Data
type Part = { text: string } & (TextPart | CheerPart | EmotePart)
 
type TextPart = { type: 'text' }
 
type CheerPart = {
  type: 'cheer'
  name: string
  amount: number
  color: string
  images: Images
}
 
type EmotePart = {
  type: 'emote'
  id: string
  name: string
  images: Images
  source: 'twitch' | 'betterttv' | 'frankerfacez'
}
 
type Images = {
  default: Urls
  static: Urls
}
 
type Urls = {
  x1: string
  x2: string
  x4: string
}

7TV will never be supported, and widgets that include 7TV support will not be allowed on the forums. More information here: https://twitter.com/imZaytri/status/1461147801144868873 (opens in a new tab).