twitch-emote
v1.1.3
Published
splice twitch emotes from a message string
Downloads
28
Maintainers
Readme
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' ]