npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

tmi-emote-parse

v2.0.0

Published

Chat parser for legacy Twitch, BTTV, FFZ and 7TV emotes aswell as badges using TMI.js

Downloads

58

Readme

tmi-emote-parse

Load and parse Twitch, BTTV, FFZ and 7TV emotes and badges from messages for multiple channels.

⚠ This module is mainly designed to be integrated in a https://github.com/tmijs/tmi.js environment but can also be used as a standalone with limited features.

Table of Contents

Installation

Install using npm:

npm install tmi-emote-parse

Usage

Without tmi.js

// 🟦 Require the Module
const emoteParser = require("tmi-emote-parse");


// 🟦 Set debug state and add event handlers (optional)
emoteParser.setDebug(true);
emoteParser.events.on("error", e => {
    console.log("Error:", e);
})


// 🟦 Register Twitch API credentials (ClientID and OAuth Token) needed for User-ID request
emoteParser.setTwitchCredentials("<ClientID>", "<OAuth>");


// 🟦 Now you can finally load emotes and badges for a specific channel to later parse/use
emoteParser.loadAssets("twitch");
emoteParser.loadAssets("twitchdev");

emoteParser.events.on("emotes", (event) => {

    // Get all BTTV & FFZ Emotes used on a channel
    console.log(emoteParser.getAllEmotes(event.channel));
    /* 
        [{
          name: 'KEKW',
          type: 'ffz',
          img: 'https://cdn.frankerfacez.com/emote/381875/4'
        }, ...] 
    */
})

emoteParser.events.on("badges", (event) => {

    // Get all Badges available on a channel
    console.log(emoteParser.getAllBadges(event.channel));
    /* 
        [{
          name: 'bits/1000',
          info: 'cheer 1000',
          img: 'https://static-cdn.jtvnw.net/badges/v1/0d85a29e-79ad-4c63-a285-3acd2c66f2ba/3'
        }, ...] 
    */
})

With tmi.js

// 🟦 Require the Module
const emoteParser = require("tmi-emote-parse");


// 🟦 Set debug state and add event handlers (optional)
emoteParser.setDebug(true);
emoteParser.events.on("error", e => {
    console.log("Error:", e);
})


// 🟦 Register Twitch API credentials (ClientID and OAuth Token) needed for User-ID request
emoteParser.setTwitchCredentials("<ClientID>", "<OAuth>");


// 🟦 Now you can finally load emotes and badges for a specific channel to later parse/use
emoteParser.loadAssets("twitch");
emoteParser.loadAssets("twitchdev");


// 🅾 The following part is the tmi.js integration
// (Documentation can be found here: https://github.com/tmijs/tmi.js)
const tmi = require("tmi.js");

client = new tmi.Client({
    options: {
        debug: false
    },
    connection: {
        reconnect: true,
        secure: true
    },
    identity: {
        username: /* Channel Bot Username */,
        password: /* Channel Bot OAuth */
    },
    channels: [ '#twitch', '#twitchdev' ] /* Channels to join with leading '#' */
});
client.connect().catch(console.error);


// 🅾 tmi.js message event handler (as of tmi.js v1.4.2)
client.on('message', (channel, userstate, message, self) => {

    // 🟦 Use the tmi-emote-parse module here
    // Replace Emotes with HTML in a given message for a specific channel
    console.log(emoteParser.replaceEmotes(message, userstate, channel, self));
    /* 
        -> message: 'I can see you ariW' 
        -> output:  'I can see you <img class="message-emote" src="https://cdn.betterttv.net/emote/56fa09f18eff3b595e93ac26/3x"/>'
    */
    
    // Return the badges the message author uses on a specific channel
    console.log(emoteParser.getBadges(userstate, channel));
    /* 
        [{
          name: 'premium/1',
          info: 'Prime Gaming',
          img: 'https://static-cdn.jtvnw.net/badges/v1/bbbe0db0-a598-423e-86d0-f9fb98ca1933/3'
        }, ...] 
    */
});

Documentation

Functions

emoteParser.setTwitchCredentials()

Set Twitch API credentials for User-ID requests on the Twitch Helix API endpoint. (Void)

Parameters:

  • clientId: String - Twitch API clientId
  • oauth: String - Twitch API OAuth token (matching the clientId)
emoteParser.setTwitchCredentials("<ClientID>", "<OAuth>");

emoteParser.loadAssets()

Load Emotes and Badges of a specific Twitch channel. (Void)

Parameters:

  • channel: String - Channel name
  • options: Object - Load only specific providers [Defaults to loading all] (optional)
    • options["bttv"]: Boolean - Load BetterTTV Emotes
    • options["ffz"]: Boolean - Load FrankerFaceZ Emotes
    • options["7tv"]: Boolean - Load 7TV Emotes
emoteParser.loadAssets("twitch");
emoteParser.loadAssets("twitchdev", { "bttv": true, "ffz": false, "7tv": false });

emoteParser.getLoaded()

Check the loaded status of all channels or one specific channel. (Object)

Parameters:

  • channel: String - Channel name (optional)
console.log(emoteParser.getLoaded("twitch"));

Returns something like this:

{
  "twitch": { channel: 'twitch', emotes: true, badges: true }
}

emoteParser.getLoadedDetailed()

Check the loaded status of all channels or one specific channel. (Object)

Parameters:

  • channel: String - Channel name (optional)
console.log(emoteParser.getLoadedDetailed("twitch"));

Returns something like this:

{
  "twitch": { channel: 'twitch', emotes: { "all": false, "bttv": { global: true, channel: true }, "ffz": { global: true, channel: true }, "7tv": { global: true, channel: false }}, badges: true }
}

emoteParser.getAllBadges()

Return all badges present in the chat for one specific channel. (Array)

Parameters:

  • channel: String - Channel name
console.log(emoteParser.getAllBadges("twitch"));

Returns something like this:

[{
  name: 'bits/1000',
  info: 'cheer 1000',
  img: 'https://static-cdn.jtvnw.net/badges/v1/0d85a29e-79ad-4c63-a285-3acd2c66f2ba/3'
}, ...]

emoteParser.getAllEmotes()

Return all BTTV & FFZ emotes present in the chat for one specific channel. (Array)

Parameters:

  • channel: String - Channel name
console.log(emoteParser.getAllEmotes("twitch"));

Returns something like this:

[{
  name: 'ariW',
  type: 'bttv',
  img: 'https://cdn.betterttv.net/emote/56fa09f18eff3b595e93ac26/3x'
}, ...]

emoteParser.getEmotes()

⚠ tmi.js only: Return all unique emotes in a single message. (Array)

Parameters:

  • message: String - Chat message
  • userstate: Object - Twitch userstate object (tmi.js)
    • userstate["badges-raw"]: String - User badges
    • ...
  • channel: String - Channel name
console.log(emoteParser.getEmotes("LUL LUL", userstate, "twitch"));

Returns something like this:

[{
  code: 'LUL',
  img: 'https://static-cdn.jtvnw.net/emoticons/v2/425618/default/dark/3.0',
  type: 'twitch'
}]

emoteParser.getBadges()

⚠ tmi.js only: Return all badges a message author uses for one specific channel. (Array)

Parameters:

  • userstate: Object - Twitch userstate object (tmi.js)
    • userstate["badges-raw"]: String - User badges
    • ...
  • channel: String - Channel name
console.log(emoteParser.getBadges(userstate, "twitch"));

Returns something like this:

[{
  name: 'bits/1000',
  info: 'cheer 1000',
  img: 'https://static-cdn.jtvnw.net/badges/v1/0d85a29e-79ad-4c63-a285-3acd2c66f2ba/3'
}, ...]

emoteParser.replaceEmotes()

⚠ tmi.js only: Parses all legacy Twitch, BTTV and FFZ emotes to HTML in the message for one specific channel. (String)

Parameters:

  • message: String - Chat message
  • userstate: Object - Twitch userstate object (tmi.js)
    • userstate["emotes"]: Object - Used emotes in message
    • ...
  • channel: String - Channel name
console.log(emoteParser.replaceEmotes("I can see you ariW", userstate, "twitch"));

Returns something like this:

'I can see you <img class="message-emote" src="https://cdn.betterttv.net/emote/56fa09f18eff3b595e93ac26/3x"/>'

emoteParser.setDebug()

Switch debug mode on/off - will impact error events (Debug mode default is off). (Void)

Parameters:

  • active: Boolean - Debug mode state to set
emoteParser.setDebug(false);

Events

Emotes

Event fires after BTTV & FFZ emotes for any channel have finished loading. (Object)

Parameters:

  • event: Object - Event
    • event.channel: String - Channel name
emoteParser.events.on("emotes", (event) => {
  console.log(event);
})

Returns something like this:

{ channel: 'twitchdev' }

Badges

Event fires after Twitch badges for any channel have finished loading. (Object)

Parameters:

  • event: Object - Event
    • event.channel: String - Channel name
emoteParser.events.on("badges", (event) => {
  console.log(event);
})

Returns something like this:

{ channel: 'twitchdev' }

Loaded

Event fires after all badges and emotes for any channel have finished loading. (Object)

Parameters:

  • event: Object - Event
    • event.channel: String - Channel name
emoteParser.events.on("loaded", (event) => {
  console.log(event);
})

Returns something like this:

{ channel: 'twitchdev' }

Error

Event fires iff debug mode is enabled and any error on load occurs for any channel. (Object)

Parameters:

  • event: Object - Event
    • event.channel: String - Channel name
    • event.error: String - Error message
emoteParser.events.on("error", (event) => {
  console.log(event);
})

Returns something like this:

{ channel: 'twitchdev', error: 'Failed to load FFZ global emotes for twitchdev' }

Community

Thanks for using the project! 💜