Skip to content

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

Notifications You must be signed in to change notification settings

smilefx/tmi-emote-parse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

36 Commits
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

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! πŸ’œ

About

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

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published