Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zomoxyz/node-twitch-emotes
https://github.com/zomoxyz/node-twitch-emotes
Last synced: 28 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/zomoxyz/node-twitch-emotes
- Owner: ZomoXYZ
- Created: 2022-04-14T22:26:02.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2023-12-22T07:50:37.000Z (about 1 year ago)
- Last Synced: 2024-11-07T18:18:26.744Z (3 months ago)
- Language: TypeScript
- Size: 135 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# twitch-emote
```bash
npm i twitch-emote
```## initialization
```ts
async function initCache(
channels?: string[],
settings?: Partial
): 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` | `{}` | 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
```ts
function spliceMessage(
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"]`
```ts
function splitMessage(
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
```ts
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
```ts
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
```ts
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' ]
```