1.1.3 • Published 1 year ago
twitch-emote v1.1.3
twitch-emote
npm i twitch-emote
initialization
async function initCache(
channels?: string[],
settings?: Partial<Settings>
): void
this function must be ran first (and awaited) before spliceMessage
or splitMessage
will work.
argument | type | default | description |
---|---|---|---|
channels | string[] | [] | array of channel names to load |
settings | Partial<Settings> | {} | optional settings |
Settings
key | type | default | description |
---|---|---|---|
autoRefresh | boolean | true | if true , run indefinitely and regularly check for new data |
refreshInterval | number | 300000 (5 minutes) | time in milliseconds |
cache | boolean | true | caching on the disk |
cacheDir | string | ./cache | directory for cache |
logApiRate | boolean | true | log data about api rate limits |
maxRetryRateLimit | number | 1 | maximum retry attempts when rate limited (the request retries again after the rate limit time so 1 should suffice) |
usage
function spliceMessage<T>(
message: string,
channel: string,
callback?: (emote: EmoteData) => string | T,
withEmotes?: string,
strictTwitchEmotes?: boolean
): (string | T)[]
spliceMessage
returns an array with strings cut directly where the emotes are, including spaces between emotes and grouping words together.
example: ["emote:EZ", " ", "emote:clap", " too good"]
function splitMessage<T>(
message: string,
channel: string,
callback?: (emote: EmoteData) => string | T,
withEmotes?: string,
strictTwitchEmotes?: boolean
): (string | T)[]
splitMessage
returns an array of words with some words replaced with emote data.
example: ["emote:EZ", "emote:clap", "too", "good"]
argument | type | default | description |
---|---|---|---|
message | string | chat message | |
channel | string | channel name | |
callback | (EmoteData) => string \| T | highest quality url string | convert the emote data into something |
withEmotes | string | "" | native twitch emotes given via an IRC tag |
strictTwitchEmotes | boolean | false | if true , native twitch emotes will only be applied through withEmotes ; otherwise when false , all twitch and channel emotes will be checked for in the message (i.e. non-subs appear to have sub emotes) |
types
export interface EmoteData {
provider: Provider
code: string
urls: EmoteURL[]
}
export interface EmoteURL {
size: '1x' | '2x' | '3x' | '4x'
url: string
}
export enum Provider {
'Twitch' = 0,
'7TV' = 1,
'BetterTTV' = 2,
'FrankerFaceZ' = 3,
}
example
(see the examples folder for ready and functional examples)
simple
import { initCache, spliceMessage } from 'twitch-emote'
await initCache(['xqc'])
let message = spliceMessage('EZ Clap too good', 'xqc')
console.log(message)
/*
* [
* 'https://cdn.betterttv.net/emote/5590b223b344e2c42a9e28e3/3x',
* ' ',
* 'https://cdn.betterttv.net/emote/55b6f480e66682f576dd94f5/3x',
* ' too good'
* ]
*/
let messageWords = splitMessage('EZ Clap too good', 'xqc')
console.log(messageWords)
/*
* [
* 'https://cdn.betterttv.net/emote/5590b223b344e2c42a9e28e3/3x',
* 'https://cdn.betterttv.net/emote/55b6f480e66682f576dd94f5/3x',
* 'too'.
* 'good'
* ]
*/
advanced
import { initCache, spliceMessage } from 'twitch-emote'
await initCache(['xqc'])
let message = spliceMessage('EZ Clap too good', 'xqc', emote => {
return `emote:${emote.code}`
})
console.log(message)
// [ 'emote:EZ', ' ', 'emote:Clap', ' too good' ]
let messageWords = splitMessage('EZ Clap too good', 'xqc', emote => {
return `emote:${emote.code}`
})
console.log(messageWords)
// [ 'emote:EZ', 'emote:Clap', 'too', 'good' ]