@tixyel/streamelements 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/utils/EventProvider.ts","../src/utils/useStorage.ts","../src/client/index.ts","../src/types/alejo/pronouns.ts","../src/utils/Message.ts","../src/simulation/data/avatars.ts","../src/simulation/data/badges.ts","../src/simulation/data/emotes.ts","../src/simulation/data/messages.ts","../src/simulation/data/names.ts","../src/simulation/data/tts.ts","../src/simulation/data/items.ts","../src/simulation/data/tiers.ts","../src/simulation/index.ts","../src/utils/Logger.ts","../src/actions/button.ts","../src/actions/command.ts","../src/utils/useQueue.ts","../src/streamelements/api.ts","../src/client/listener.ts","../src/index.ts"],"sourcesContent":["/**\n * EventProvider class for managing event listeners and emitters.\n * This class allows you to register event listeners, emit events, and manage event subscriptions.\n * @example\n * ```typescript\n * interface TestEvents {\n * load: [{ type: 'load' }];\n * event: [{ type: 'event' }];\n * }\n *\n * class Test extends EventProvider<TestEvents> {}\n *\n * const test = new Test();\n * test.on('load', (data) => {})\n * test.once('event', (data) => {})\n * test.emit('load', { type: 'load' });\n * ```\n */\nexport class EventProvider<EventMap extends Record<string, any[]> = Record<string, any[]>> {\n /**\n * Stores registered event listeners.\n */\n private registeredEvents: { [K in keyof EventMap]?: Array<(this: this, ...args: EventMap[K]) => any> } = {};\n\n /**\n * Emits an event to all registered listeners.\n * Returns an array of return values from the listeners.\n * @param eventName The name of the event.\n * @param args Arguments to pass to the listeners.\n */\n emit<K extends keyof EventMap>(eventName: K, ...args: EventMap[K]): any[] {\n const listeners = this.registeredEvents[eventName] || [];\n\n return listeners.map((listener) => listener.apply(this, args));\n }\n\n /**\n * Registers an event listener.\n * @param eventName The name of the event.\n * @param callback The callback function.\n */\n on<K extends keyof EventMap>(eventName: K, callback: (this: this, ...args: EventMap[K]) => any): this {\n if (typeof callback !== 'function') {\n throw new TypeError('Callback must be a function');\n }\n\n if (!this.registeredEvents[eventName]) {\n this.registeredEvents[eventName] = [];\n }\n\n this.registeredEvents[eventName]!.push(callback);\n\n return this;\n }\n\n /**\n * Removes a specific event listener.\n * @param eventName The name of the event.\n * @param callback The callback function to remove.\n */\n off<K extends keyof EventMap>(eventName: K, callback?: (this: this, ...args: EventMap[K]) => any): this {\n const listeners = this.registeredEvents[eventName] || [];\n\n if (!callback) {\n this.registeredEvents[eventName] = [];\n\n return this;\n }\n\n this.registeredEvents[eventName] = listeners.filter((fn) => fn !== callback);\n\n return this;\n }\n\n /**\n * Registers a listener that is executed only once.\n * @param eventName The name of the event.\n * @param callback The callback function.\n */\n once<K extends keyof EventMap>(eventName: K, callback: (this: this, ...args: EventMap[K]) => any): this {\n const wrapper = (...args: EventMap[K]) => {\n this.off(eventName, wrapper);\n callback.apply(this, args);\n };\n\n this.on(eventName, wrapper);\n\n return this;\n }\n\n /**\n * Removes all listeners for a specific event.\n * @param eventName The name of the event.\n */\n removeAllListeners<K extends keyof EventMap>(eventName: K): this {\n this.registeredEvents[eventName] = [];\n\n return this;\n }\n}\n","import { EventProvider } from './EventProvider.js';\nimport { PathValue } from './index.js';\n\ntype UseStorageEvents<T> = {\n load: [T | null];\n update: [T];\n};\n\ntype UseStorageOptions<T> = {\n id?: string;\n data: T;\n};\n\nexport var _storages: Array<useStorage<any>> = [];\n\nexport class useStorage<T extends object = Record<string, any>> extends EventProvider<UseStorageEvents<T>> {\n /**\n * The unique identifier for the storage instance.\n */\n public id: string = 'default';\n\n public loaded: boolean = false;\n\n public data!: T;\n\n constructor(options: UseStorageOptions<T>) {\n super();\n\n this.id = options.id || this.id;\n this.data = options.data ?? ({} as T);\n\n if (!SE_API || !SE_API.store) {\n throw new Error('SE_API.store is not available');\n }\n\n SE_API!.store\n .get<T>(this.id)\n .then((save) => {\n this.data = save ?? this.data;\n\n this.loaded = true;\n\n this.emit('load', this.data);\n\n if (JSON.stringify(this.data) !== JSON.stringify(save)) {\n this.emit('update', this.data);\n }\n })\n .catch(() => {\n this.loaded = true;\n this.emit('load', null);\n });\n\n _storages.push(this);\n }\n\n /**\n * Saves the current data to storage.\n * @param data Data to save (defaults to current)\n */\n private save(data: T = this.data): void {\n if (this.loaded) {\n this.data = data;\n\n SE_API!.store.set<T>(this.id, this.data);\n\n this.emit('update', this.data);\n }\n }\n\n /**\n * Updates the storage data and emits an update event\n * @param data Data to update (defaults to current)\n */\n public update(data: T = this.data): void {\n if (this.loaded && JSON.stringify(this.data) !== JSON.stringify(data)) {\n this.data = { ...this.data, ...data };\n\n this.save(this.data);\n }\n }\n\n /**\n * Adds a value to the storage at the specified path.\n * @param path Path to add the value to\n * @param value Value to add\n */\n public add<P extends string>(path: P, value: PathValue<T, P>): void {\n if (!this.loaded) return;\n\n useStorage.setByPath(this.data, path, value);\n\n this.save(this.data);\n }\n\n /**\n * Clears all data from the storage.\n */\n public clear(): void {\n if (this.loaded) {\n this.data = {} as T;\n\n this.save(this.data);\n }\n }\n\n /**\n * Sets a value in the storage at the specified path.\n * @param obj The object to set the value in\n * @param path The path to set the value at\n * @param value The value to set\n * @returns The updated object\n */\n static setByPath<P extends string, T extends object>(obj: T, path: P, value: PathValue<T, P>): void {\n const keys = path.split('.');\n let current: any = obj;\n\n for (let i = 0; i < keys.length - 1; i++) {\n if (typeof current[keys[i]] !== 'object' || current[keys[i]] == null) {\n current[keys[i]] = {};\n }\n\n current = current[keys[i]];\n }\n\n current[keys[keys.length - 1]] = value;\n\n return current;\n }\n\n public override on<K extends keyof UseStorageEvents<T>>(eventName: K, callback: (this: useStorage<T>, ...args: UseStorageEvents<T>[K]) => void): this {\n if (eventName === 'load' && this.loaded) {\n callback.apply(this, [this.data]);\n\n return this;\n }\n\n super.on(eventName, callback);\n\n return this;\n }\n}\n","import { onWidgetLoad } from '../types/streamelements/events/onWidgetLoad.js';\nimport { Alejo$Pronouns$name } from '../types/alejo/pronouns.js';\nimport { EventProvider } from '../utils/EventProvider.js';\nimport { useStorage } from '../utils/useStorage.js';\nimport { Session } from '../types/streamelements/session.js';\nimport { ClientEvents as events, Provider } from '../types/client.js';\nimport { Command } from '../actions/command.js';\nimport { Button } from '../actions/button.js';\n\ntype ClientEvents = {\n load: [event: onWidgetLoad];\n action: [action: Button | Command, type: 'created' | 'executed'];\n session: [session: Session];\n event: [event: events];\n};\n\ntype ClientOptions = {\n id?: string;\n};\n\ntype ClientStorageOptions<T> = {\n value: T;\n timestamp: number;\n expire: number;\n};\n\ntype ClientStorage = {\n user: Record<string, ClientStorageOptions<string>>;\n avatar: Record<string, ClientStorageOptions<string>>;\n pronoun: Record<string, ClientStorageOptions<Alejo$Pronouns$name>>;\n emote: Record<string, ClientStorageOptions<string>>;\n};\n\nexport class Client extends EventProvider<ClientEvents> {\n public id: string = 'default';\n\n public storage!: useStorage<ClientStorage>;\n\n public fields: onWidgetLoad['fieldData'] = {};\n\n public session!: Session;\n\n public loaded: boolean = false;\n\n constructor(options: ClientOptions) {\n super();\n\n this.id = options.id || this.id;\n\n this.storage = new useStorage({\n id: this.id,\n data: {\n user: {},\n avatar: {},\n pronoun: {},\n emote: {},\n },\n });\n\n window.client = this;\n }\n\n public actions: {\n commands: Command[];\n buttons: Button[];\n } = {\n commands: [],\n buttons: [],\n };\n\n public details!: {\n provider: Provider | 'local';\n user: onWidgetLoad['channel'];\n currency: onWidgetLoad['currency'];\n overlay: onWidgetLoad['overlay'];\n };\n\n public cache: { avatar: number; pronoun: number; emote: number } = {\n avatar: 30,\n pronoun: 30,\n emote: 30,\n };\n\n override on<K extends keyof ClientEvents>(eventName: K, callback: (this: Client, ...args: ClientEvents[K]) => void): this {\n if (eventName === 'load' && this.loaded) {\n callback.apply(this, [\n {\n channel: this.details.user,\n currency: this.details.currency,\n fieldData: this.fields,\n recents: [],\n session: {\n data: this.session,\n settings: {\n autoReset: false,\n calendar: false,\n resetOnStart: false,\n },\n },\n overlay: this.details.overlay,\n emulated: false,\n } as onWidgetLoad,\n ] as unknown as ClientEvents[K]);\n\n return this;\n }\n\n super.on(eventName, callback);\n\n return this;\n }\n}\n","export enum Alejo$Pronouns {\n hehim = 'He/Him',\n sheher = 'She/Her',\n theythem = 'They/Them',\n shethem = 'She/They',\n hethem = 'He/They',\n heshe = 'He/She',\n xexem = 'Xe/Xem',\n faefaer = 'Fae/Faer',\n vever = 'Ve/Ver',\n aeaer = 'Ae/Aer',\n ziehir = 'Zie/Hir',\n perper = 'Per/Per',\n eem = 'E/Em',\n itits = 'It/Its',\n}\n\nexport type Alejo$Pronouns$name =\n | 'hehim'\n | 'sheher'\n | 'theythem'\n | 'shethem'\n | 'hethem'\n | 'heshe'\n | 'xexem'\n | 'faefaer'\n | 'vever'\n | 'aeaer'\n | 'ziehir'\n | 'perper'\n | 'eem'\n | 'itits';\n\nexport type Alejo$Pronouns$display =\n | 'He/Him'\n | 'She/Her'\n | 'They/Them'\n | 'She/They'\n | 'He/They'\n | 'He/She'\n | 'Xe/Xem'\n | 'Fae/Faer'\n | 'Ve/Ver'\n | 'Ae/Aer'\n | 'Zie/Hir'\n | 'Per/Per'\n | 'E/Em'\n | 'It/Its';\n\nexport type Alejo$Pronouns$User = {\n id: string;\n login: string;\n pronouns: Alejo$Pronouns$name;\n};\n","import { Simulation } from '../simulation/index.js';\nimport { TwitchBadge, TwitchBadgesKeys } from '../types/badge.js';\nimport { Provider } from '../types/client.js';\nimport { BttvEmote, SeventvEmote, TwitchEmote } from '../types/emote.js';\n\ntype Emote = TwitchEmote | BttvEmote | SeventvEmote;\n\nexport function findEmotesInText(text: string, emotes: Emote[] = Simulation.data.emotes): Emote[] {\n const result: Emote[] = [];\n\n emotes.forEach((emote) => {\n const name = emote.name;\n\n let searchIndex = 0;\n let start = 0;\n\n while (searchIndex < text.length) {\n const index = text.indexOf(name, start);\n\n if (index === -1) break;\n\n const before = index > 0 ? text[index - 1] : ' ';\n const after = index + name.length < text.length ? text[index + name.length] : ' ';\n\n if (/\\s/.test(before) && /\\s/.test(after)) {\n result.push({ ...emote, start: index, end: index + name.length });\n }\n\n start = index + 1;\n }\n });\n\n return result.sort((a, b) => a.start - b.start);\n}\n\nexport function replaceEmotesWithHTML(text: string, emotes: Emote[]): string {\n if (!emotes.length) return text;\n\n let result = '';\n let index = 0;\n\n emotes.forEach((emote) => {\n result += text.substring(index, emote.start);\n\n const imgUrl = emote.urls['4'] || emote.urls['2'] || emote.urls['1'];\n\n result += `<img src=\"${imgUrl}\" alt=\"${emote.name}\" class=\"emote\" style=\"width: auto; height: 1em; vertical-align: middle;\" />`;\n\n index = emote.end;\n });\n\n result += text.substring(index);\n\n return result;\n}\n\ntype TwitchResult = {\n keys: TwitchBadgesKeys[];\n badges: TwitchBadge[];\n};\n\ntype YouTubeResult = {\n isVerified: boolean;\n isChatOwner: boolean;\n isChatSponsor: boolean;\n isChatModerator: boolean;\n};\n\nexport type BadgeOptions =\n | TwitchBadgesKeys[]\n | TwitchBadgesKeys\n | `${TwitchBadgesKeys}, ${TwitchBadgesKeys}`\n | `${TwitchBadgesKeys}, ${TwitchBadgesKeys}, ${TwitchBadgesKeys}`;\n\nexport async function generateBadges(badges: BadgeOptions, provider: 'youtube'): Promise<YouTubeResult>;\nexport async function generateBadges(badges: BadgeOptions, provider: 'twitch'): Promise<TwitchResult>;\nexport async function generateBadges(badges: BadgeOptions = [], provider: Provider = 'twitch'): Promise<TwitchResult | YouTubeResult> {\n if (!Array.isArray(badges) && typeof badges === 'string') {\n badges = badges.split(',').map((e) => e.trim()) as TwitchBadgesKeys[];\n }\n\n if (!badges || !badges.length) {\n var max = Simulation.rand.number(1, 3);\n\n for await (const _ of Array.from({ length: max }, () => '')) {\n var current = Simulation.rand.array(Object.keys(Simulation.data.badges))[0] as TwitchBadgesKeys;\n\n if (!badges.includes(current) && Array.isArray(badges)) {\n badges.push(current);\n } else {\n badges = [current];\n }\n }\n }\n\n var result;\n\n switch (provider) {\n case 'twitch': {\n result = {\n keys: Array.from(badges).filter((e) => e in Simulation.data.badges) as TwitchBadgesKeys[],\n badges: Array.from(badges)\n .slice(0, 3)\n .map((badge) => Simulation.data.badges[badge])\n .filter(Boolean) as TwitchBadge[],\n };\n\n break;\n }\n\n case 'youtube': {\n var details = {\n 'verified': { isVerified: false },\n 'broadcaster': { isChatOwner: false },\n 'host': { isChatOwner: false },\n 'sponsor': { isChatSponsor: false },\n 'subscriber': { isChatSponsor: false },\n 'moderator': { isChatModerator: false },\n };\n\n result = Object.entries(badges).reduce(\n (acc, [key]) => {\n if (key in details) {\n Object.assign(acc, details[key as keyof typeof details]);\n }\n\n return acc;\n },\n {\n isVerified: false,\n isChatOwner: false,\n isChatSponsor: false,\n isChatModerator: false,\n } as {\n isVerified: boolean;\n isChatOwner: boolean;\n isChatSponsor: boolean;\n isChatModerator: boolean;\n },\n );\n\n break;\n }\n }\n\n return result as TwitchResult | YouTubeResult;\n}\n","export const avatars = [\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/13e5fa74-defa-11e9-809c-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/dbdc9198-def8-11e9-8681-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/998f01ae-def8-11e9-b95c-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/de130ab0-def7-11e9-b668-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/ebe4cd89-b4f4-4cd9-adac-2f30151b4209-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/215b7342-def9-11e9-9a66-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/ead5c8b2-a4c9-4724-b1dd-9f00b46cbd3d-profile_image-300x300.png',\n];\n","import { TwitchBadge, TwitchBadgesKeys } from '../../types/badge.js';\n\nexport const badges: Record<TwitchBadgesKeys, TwitchBadge> = {\n '100 bits': {\n type: '100 bits',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/09d93036-e7ce-431c-9a9e-7044297133f2/3',\n description: '100 bits badge',\n },\n 'no audio': {\n type: 'no audio',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/aef2cd08-f29b-45a1-8c12-d44d7fd5e6f0/3',\n description: 'Individuals with unreliable or no sound can select this badge',\n },\n 'no video': {\n type: 'no video',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/199a0dba-58f3-494e-a7fc-1fa0a1001fb8/3',\n description: 'Individuals with unreliable or no video can select this badge',\n },\n 'bot': {\n type: 'bot',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/df9095f6-a8a0-4cc2-bb33-d908c0adffb8/3',\n description: 'Twitch bot',\n },\n 'twitch staff': {\n type: 'twitch staff',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/d97c37bd-a6f5-4c38-8f57-4e4bef88af34/3',\n description: 'Twitch Staff',\n },\n 'admins': {\n type: 'admins',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/9ef7e029-4cdf-4d4d-a0d5-e2b3fb2583fe/3',\n description: 'Admins',\n },\n 'artist': {\n type: 'artist',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/4300a897-03dc-4e83-8c0e-c332fee7057f/3',\n description: 'Artist',\n },\n 'game developer': {\n type: 'game developer',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/85856a4a-eb7d-4e26-a43e-d204a977ade4/3',\n description: 'Game Developer',\n },\n 'prime': {\n type: 'prime',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/a1dd5073-19c3-4911-8cb4-c464a7bc1510/3',\n description: 'Prime',\n },\n 'turbo': {\n type: 'turbo',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/bd444ec6-8f34-4bf9-91f4-af1e3428d80f/3',\n description: 'Turbo',\n },\n 'subscriber': {\n type: 'subscriber',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/5d9f2208-5dd8-11e7-8513-2ff4adfae661/3',\n description: 'Subscriber',\n },\n 'broadcaster': {\n type: 'broadcaster',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/5527c58c-fb7d-422d-b71b-f309dcb85cc1/3',\n description: 'Broadcaster',\n },\n 'verified': {\n type: 'verified',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/d12a2e27-16f6-41d0-ab77-b780518f00a3/3',\n description: 'Verified',\n },\n 'moderator': {\n type: 'moderator',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/3',\n description: 'Moderator',\n },\n 'vip': {\n type: 'vip',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/b817aba4-fad8-49e2-b88a-7cc744dfa6ec/3',\n description: 'VIP',\n },\n};\n","import { BttvEmote, SeventvEmote, TwitchEmote } from '../../types/emote.js';\n\nexport const emotes: Array<TwitchEmote | BttvEmote | SeventvEmote> = Object.values([\n {\n 'type': 'twitch',\n 'name': 'TheIlluminati',\n 'id': '145315',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/static/dark/3.0',\n },\n 'start': 0,\n 'end': 13,\n },\n {\n 'type': 'twitch',\n 'name': 'BrainSlug',\n 'id': '115233',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/115233/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/115233/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/115233/static/dark/3.0',\n },\n 'start': 14,\n 'end': 23,\n },\n {\n 'type': 'twitch',\n 'name': 'imGlitch',\n 'id': '112290',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/static/dark/3.0',\n },\n 'start': 24,\n 'end': 32,\n },\n {\n 'type': 'twitch',\n 'name': 'TakeNRG',\n 'id': '112292',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/112292/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/112292/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/112292/static/dark/3.0',\n },\n 'start': 33,\n 'end': 40,\n },\n {\n 'type': 'twitch',\n 'name': 'DxCat',\n 'id': '110734',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/110734/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/110734/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/110734/static/dark/3.0',\n },\n 'start': 41,\n 'end': 46,\n },\n {\n 'type': 'twitch',\n 'name': 'VoHiYo',\n 'id': '81274',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/81274/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/81274/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/81274/static/dark/3.0',\n },\n 'start': 47,\n 'end': 53,\n },\n {\n 'type': 'twitch',\n 'name': 'DoritosChip',\n 'id': '102242',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/static/dark/3.0',\n },\n 'start': 54,\n 'end': 65,\n },\n {\n 'type': 'twitch',\n 'name': 'KomodoHype',\n 'id': '81273',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/81273/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/81273/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/81273/static/dark/3.0',\n },\n 'start': 66,\n 'end': 76,\n },\n {\n 'type': 'twitch',\n 'name': 'duDudu',\n 'id': '62834',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/62834/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/62834/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/62834/static/dark/3.0',\n },\n 'start': 77,\n 'end': 83,\n },\n {\n 'type': 'twitch',\n 'name': 'CoolCat',\n 'id': '58127',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/58127/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/58127/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/58127/static/dark/3.0',\n },\n 'start': 84,\n 'end': 91,\n },\n {\n 'type': 'twitch',\n 'name': 'KappaPride',\n 'id': '55338',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/55338/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/55338/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/55338/static/dark/3.0',\n },\n 'start': 92,\n 'end': 102,\n },\n {\n 'type': 'twitch',\n 'name': 'BloodTrail',\n 'id': '69',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/69/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/69/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/69/static/dark/3.0',\n },\n 'start': 103,\n 'end': 113,\n },\n {\n 'type': 'twitch',\n 'name': 'PunchTrees',\n 'id': '47',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/47/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/47/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/47/static/dark/3.0',\n },\n 'start': 114,\n 'end': 124,\n },\n {\n 'type': 'twitch',\n 'name': 'SSSsss',\n 'id': '46',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/46/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/46/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/46/static/dark/3.0',\n },\n 'start': 125,\n 'end': 131,\n },\n {\n 'type': 'twitch',\n 'name': 'Kappa',\n 'id': '25',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/25/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/25/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/25/static/dark/3.0',\n },\n 'start': 132,\n 'end': 137,\n },\n {\n 'type': 'twitch',\n 'name': 'MrDestructoid',\n 'id': '28',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/28/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/28/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/28/static/dark/3.0',\n },\n 'start': 138,\n 'end': 151,\n },\n {\n 'type': 'twitch',\n 'name': '<3',\n 'id': '9',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/9/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/9/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/9/static/dark/3.0',\n },\n 'start': 152,\n 'end': 154,\n },\n {\n 'type': 'twitch',\n 'name': 'HSWP',\n 'id': '446979',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/446979/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/446979/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/446979/static/dark/3.0',\n },\n 'start': 155,\n 'end': 159,\n },\n {\n 'type': 'twitch',\n 'name': 'Shush',\n 'id': 'emotesv2_819621bcb8f44566a1bd8ea63d06c58f',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_819621bcb8f44566a1bd8ea63d06c58f/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_819621bcb8f44566a1bd8ea63d06c58f/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_819621bcb8f44566a1bd8ea63d06c58f/static/dark/3.0',\n },\n 'start': 160,\n 'end': 165,\n },\n {\n 'type': 'twitch',\n 'name': 'IronmouseLuv',\n 'id': 'emotesv2_54c53ae67ad746d2bc866b6fc779183c',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_54c53ae67ad746d2bc866b6fc779183c/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_54c53ae67ad746d2bc866b6fc779183c/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_54c53ae67ad746d2bc866b6fc779183c/static/dark/3.0',\n },\n 'start': 166,\n 'end': 178,\n },\n\n {\n 'type': 'twitch',\n 'name': 'KPOPTT',\n 'id': '304047269',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/304047269/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/304047269/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/304047269/default/dark/3.0',\n },\n 'start': 0,\n 'end': 5,\n },\n {\n 'type': 'twitch',\n 'name': 'FrogPonder',\n 'id': 'emotesv2_a3cdcbfcae9b41bb8215b012362eea35',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_a3cdcbfcae9b41bb8215b012362eea35/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_a3cdcbfcae9b41bb8215b012362eea35/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_a3cdcbfcae9b41bb8215b012362eea35/default/dark/3.0',\n },\n 'start': 7,\n 'end': 16,\n },\n {\n 'type': 'twitch',\n 'name': 'HypeCheer',\n 'id': 'emotesv2_dd4f4f9cea1a4039ad3390e20900abe4',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dd4f4f9cea1a4039ad3390e20900abe4/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dd4f4f9cea1a4039ad3390e20900abe4/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dd4f4f9cea1a4039ad3390e20900abe4/default/dark/3.0',\n },\n 'start': 18,\n 'end': 26,\n },\n {\n 'type': 'twitch',\n 'name': 'HypeFail',\n 'id': 'emotesv2_0330a84e75ad48c1821c1d29a7dadd4d',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_0330a84e75ad48c1821c1d29a7dadd4d/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_0330a84e75ad48c1821c1d29a7dadd4d/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_0330a84e75ad48c1821c1d29a7dadd4d/default/dark/3.0',\n },\n 'start': 28,\n 'end': 35,\n },\n {\n 'type': 'twitch',\n 'name': 'HypePopcorn',\n 'id': 'emotesv2_7b8e74be7bd64601a2608c2ff5f6eb7a',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_7b8e74be7bd64601a2608c2ff5f6eb7a/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_7b8e74be7bd64601a2608c2ff5f6eb7a/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_7b8e74be7bd64601a2608c2ff5f6eb7a/default/dark/3.0',\n },\n 'start': 37,\n 'end': 47,\n },\n {\n 'type': 'twitch',\n 'name': 'TransgenderPride',\n 'id': '307827377',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/static/dark/3.0',\n },\n 'start': 49,\n 'end': 65,\n },\n {\n 'type': 'twitch',\n 'name': 'PansexualPride',\n 'id': '307827370',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/static/dark/3.0',\n },\n 'start': 66,\n 'end': 80,\n },\n {\n 'type': 'twitch',\n 'name': 'NonbinaryPride',\n 'id': '307827356',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/static/dark/3.0',\n },\n 'start': 81,\n 'end': 95,\n },\n {\n 'type': 'twitch',\n 'name': 'LesbianPride',\n 'id': '307827340',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/static/dark/3.0',\n },\n 'start': 96,\n 'end': 108,\n },\n {\n 'type': 'twitch',\n 'name': 'IntersexPride',\n 'id': '307827332',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/static/dark/3.0',\n },\n 'start': 109,\n 'end': 122,\n },\n {\n 'type': 'twitch',\n 'name': 'GenderFluidPride',\n 'id': '307827326',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/static/dark/3.0',\n },\n 'start': 123,\n 'end': 139,\n },\n {\n 'type': 'twitch',\n 'name': 'GayPride',\n 'id': '307827321',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/static/dark/3.0',\n },\n 'start': 140,\n 'end': 148,\n },\n {\n 'type': 'twitch',\n 'name': 'BisexualPride',\n 'id': '307827313',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/static/dark/3.0',\n },\n 'start': 149,\n 'end': 162,\n },\n {\n 'type': 'twitch',\n 'name': 'AsexualPride',\n 'id': '307827267',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/static/dark/3.0',\n },\n 'start': 163,\n 'end': 175,\n },\n {\n 'type': 'twitch',\n 'name': 'PogChamp',\n 'id': '305954156',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/static/dark/3.0',\n },\n 'start': 176,\n 'end': 184,\n },\n {\n 'type': 'twitch',\n 'name': 'GlitchCat',\n 'id': '304486301',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/static/dark/3.0',\n },\n 'start': 185,\n 'end': 194,\n },\n {\n 'type': 'twitch',\n 'name': 'SoonerLater',\n 'id': '2113050',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/2113050/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/2113050/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/2113050/static/dark/3.0',\n },\n 'start': 195,\n 'end': 206,\n },\n {\n 'type': 'twitch',\n 'name': 'FBCatch',\n 'id': '1441281',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/1441281/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/1441281/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/1441281/static/dark/3.0',\n },\n 'start': 207,\n 'end': 214,\n },\n {\n 'type': 'twitch',\n 'name': 'FBBlock',\n 'id': '1441276',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/1441276/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/1441276/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/1441276/static/dark/3.0',\n },\n 'start': 215,\n 'end': 222,\n },\n {\n 'type': 'twitch',\n 'name': 'PixelBob',\n 'id': '1547903',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/1547903/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/1547903/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/1547903/static/dark/3.0',\n },\n 'start': 223,\n 'end': 231,\n },\n {\n 'type': 'twitch',\n 'name': 'LUL',\n 'id': '425618',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/static/dark/3.0',\n },\n 'start': 232,\n 'end': 235,\n },\n {\n 'type': 'twitch',\n 'name': 'DarkMode',\n 'id': '461298',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/static/dark/3.0',\n },\n 'start': 236,\n 'end': 244,\n },\n {\n 'type': 'twitch',\n 'name': 'PopCorn',\n 'id': '724216',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/724216/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/724216/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/724216/static/dark/3.0',\n },\n 'start': 245,\n 'end': 252,\n },\n {\n 'type': 'twitch',\n 'name': 'EarthDay',\n 'id': '959018',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/959018/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/959018/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/959018/static/dark/3.0',\n },\n 'start': 253,\n 'end': 261,\n },\n {\n 'type': 'twitch',\n 'name': 'TwitchUnity',\n 'id': '196892',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/196892/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/196892/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/196892/static/dark/3.0',\n },\n 'start': 262,\n 'end': 273,\n },\n {\n 'type': 'twitch',\n 'name': 'Squid4',\n 'id': '191767',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191767/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191767/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191767/static/dark/3.0',\n },\n 'start': 274,\n 'end': 280,\n },\n {\n 'type': 'twitch',\n 'name': 'Squid3',\n 'id': '191764',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191764/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191764/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191764/static/dark/3.0',\n },\n 'start': 281,\n 'end': 287,\n },\n {\n 'type': 'twitch',\n 'name': 'Squid2',\n 'id': '191763',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191763/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191763/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191763/static/dark/3.0',\n },\n 'start': 288,\n 'end': 294,\n },\n {\n 'type': 'twitch',\n 'name': 'Squid1',\n 'id': '191762',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191762/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191762/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191762/static/dark/3.0',\n },\n 'start': 295,\n 'end': 301,\n },\n {\n 'type': 'twitch',\n 'name': 'CrreamAwk',\n 'id': '191313',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191313/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191313/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191313/static/dark/3.0',\n },\n 'start': 302,\n 'end': 311,\n },\n {\n 'type': 'twitch',\n 'name': 'DinoDance',\n 'id': 'emotesv2_dcd06b30a5c24f6eb871e8f5edbd44f7',\n 'gif': true,\n 'animated': true,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dcd06b30a5c24f6eb871e8f5edbd44f7/animated/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dcd06b30a5c24f6eb871e8f5edbd44f7/animated/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dcd06b30a5c24f6eb871e8f5edbd44f7/animated/dark/3.0',\n },\n 'start': 46,\n 'end': 55,\n },\n {\n 'type': 'twitch',\n 'name': 'PopNemo',\n 'id': 'emotesv2_5d523adb8bbb4786821cd7091e47da21',\n 'gif': true,\n 'animated': true,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_5d523adb8bbb4786821cd7091e47da21/animated/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_5d523adb8bbb4786821cd7091e47da21/animated/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_5d523adb8bbb4786821cd7091e47da21/animated/dark/3.0',\n },\n 'start': 56,\n 'end': 63,\n },\n {\n 'type': 'twitch',\n 'name': 'TransgenderPride',\n 'id': '307827377',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/default/dark/3.0',\n },\n 'start': 0,\n 'end': 15,\n },\n {\n 'type': 'twitch',\n 'name': 'PansexualPride',\n 'id': '307827370',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/default/dark/3.0',\n },\n 'start': 17,\n 'end': 30,\n },\n {\n 'type': 'twitch',\n 'name': 'NonbinaryPride',\n 'id': '307827356',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/default/dark/3.0',\n },\n 'start': 32,\n 'end': 45,\n },\n {\n 'type': 'twitch',\n 'name': 'LesbianPride',\n 'id': '307827340',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/default/dark/3.0',\n },\n 'start': 47,\n 'end': 58,\n },\n {\n 'type': 'twitch',\n 'name': 'IntersexPride',\n 'id': '307827332',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/default/dark/3.0',\n },\n 'start': 60,\n 'end': 72,\n },\n {\n 'type': 'twitch',\n 'name': 'GenderFluidPride',\n 'id': '307827326',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/default/dark/3.0',\n },\n 'start': 74,\n 'end': 89,\n },\n {\n 'type': 'twitch',\n 'name': 'GayPride',\n 'id': '307827321',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/default/dark/3.0',\n },\n 'start': 91,\n 'end': 98,\n },\n {\n 'type': 'twitch',\n 'name': 'BisexualPride',\n 'id': '307827313',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/default/dark/3.0',\n },\n 'start': 100,\n 'end': 112,\n },\n {\n 'type': 'twitch',\n 'name': 'AsexualPride',\n 'id': '307827267',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/default/dark/3.0',\n },\n 'start': 114,\n 'end': 125,\n },\n {\n 'type': 'twitch',\n 'name': 'PogChamp',\n 'id': '305954156',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/default/dark/3.0',\n },\n 'start': 127,\n 'end': 134,\n },\n {\n 'type': 'twitch',\n 'name': 'GlitchCat',\n 'id': '304486301',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/default/dark/3.0',\n },\n 'start': 136,\n 'end': 144,\n },\n {\n 'type': 'twitch',\n 'name': 'DarkMode',\n 'id': '461298',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/default/dark/3.0',\n },\n 'start': 146,\n 'end': 153,\n },\n {\n 'type': 'twitch',\n 'name': 'LUL',\n 'id': '425618',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/default/dark/3.0',\n },\n 'start': 155,\n 'end': 157,\n },\n {\n 'type': 'twitch',\n 'name': 'TheIlluminati',\n 'id': '145315',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/default/dark/3.0',\n },\n 'start': 159,\n 'end': 171,\n },\n {\n 'type': 'twitch',\n 'name': 'imGlitch',\n 'id': '112290',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/default/dark/3.0',\n },\n 'start': 173,\n 'end': 180,\n },\n {\n 'type': 'twitch',\n 'name': 'DoritosChip',\n 'id': '102242',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/default/dark/3.0',\n },\n 'start': 182,\n 'end': 192,\n },\n {\n 'type': 'twitch',\n 'name': 'SSSsss',\n 'id': '46',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/46/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/46/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/46/default/dark/3.0',\n },\n 'start': 194,\n 'end': 199,\n },\n {\n 'type': 'twitch',\n 'name': 'PunchTrees',\n 'id': '47',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/47/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/47/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/47/default/dark/3.0',\n },\n 'start': 201,\n 'end': 210,\n },\n {\n 'type': 'twitch',\n 'name': 'BloodTrail',\n 'id': '69',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/69/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/69/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/69/default/dark/3.0',\n },\n 'start': 223,\n 'end': 232,\n },\n {\n 'type': '7tv',\n 'name': 'CookieTime',\n 'id': '635b0184ea9ce7391cbf77d6',\n 'gif': true,\n 'animated': true,\n 'urls': {\n '1': 'https://cdn.7tv.app/emote/635b0184ea9ce7391cbf77d6/1x.webp',\n '2': 'https://cdn.7tv.app/emote/635b0184ea9ce7391cbf77d6/2x.webp',\n '3': 'https://cdn.7tv.app/emote/635b0184ea9ce7391cbf77d6/3x.webp',\n '4': 'https://cdn.7tv.app/emote/635b0184ea9ce7391cbf77d6/4x.webp',\n },\n 'start': 0,\n 'end': 10,\n 'coords': {\n 'x': 0,\n 'y': 0,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'catJAM',\n 'id': '5f1b0186cf6d2144653d2970',\n 'gif': true,\n 'animated': true,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/5f1b0186cf6d2144653d2970/1x',\n '2': 'https://cdn.betterttv.net/emote/5f1b0186cf6d2144653d2970/2x',\n '4': 'https://cdn.betterttv.net/emote/5f1b0186cf6d2144653d2970/3x',\n },\n 'start': 0,\n 'end': 6,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': ':tf:',\n 'id': '54fa8f1401e468494b85b537',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fa8f1401e468494b85b537/1x',\n '2': 'https://cdn.betterttv.net/emote/54fa8f1401e468494b85b537/2x',\n '4': 'https://cdn.betterttv.net/emote/54fa8f1401e468494b85b537/3x',\n },\n 'start': 7,\n 'end': 11,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'AngelThump',\n 'id': '566ca1a365dbbdab32ec055b',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/566ca1a365dbbdab32ec055b/1x',\n '2': 'https://cdn.betterttv.net/emote/566ca1a365dbbdab32ec055b/2x',\n '4': 'https://cdn.betterttv.net/emote/566ca1a365dbbdab32ec055b/3x',\n },\n 'start': 12,\n 'end': 22,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 334,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'ariW',\n 'id': '56fa09f18eff3b595e93ac26',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/56fa09f18eff3b595e93ac26/1x',\n '2': 'https://cdn.betterttv.net/emote/56fa09f18eff3b595e93ac26/2x',\n '4': 'https://cdn.betterttv.net/emote/56fa09f18eff3b595e93ac26/3x',\n },\n 'start': 23,\n 'end': 27,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'BroBalt',\n 'id': '54fbf00a01abde735115de5c',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fbf00a01abde735115de5c/1x',\n '2': 'https://cdn.betterttv.net/emote/54fbf00a01abde735115de5c/2x',\n '4': 'https://cdn.betterttv.net/emote/54fbf00a01abde735115de5c/3x',\n },\n 'start': 28,\n 'end': 35,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 184,\n 'height': 120,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'bttvNice',\n 'id': '54fab7d2633595ca4c713abf',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fab7d2633595ca4c713abf/1x',\n '2': 'https://cdn.betterttv.net/emote/54fab7d2633595ca4c713abf/2x',\n '4': 'https://cdn.betterttv.net/emote/54fab7d2633595ca4c713abf/3x',\n },\n 'start': 36,\n 'end': 44,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 168,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'bUrself',\n 'id': '566c9f3b65dbbdab32ec052e',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/566c9f3b65dbbdab32ec052e/1x',\n '2': 'https://cdn.betterttv.net/emote/566c9f3b65dbbdab32ec052e/2x',\n '4': 'https://cdn.betterttv.net/emote/566c9f3b65dbbdab32ec052e/3x',\n },\n 'start': 45,\n 'end': 52,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'c!',\n 'id': '6468f7acaee1f7f47567708e',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/6468f7acaee1f7f47567708e/1x',\n '2': 'https://cdn.betterttv.net/emote/6468f7acaee1f7f47567708e/2x',\n '4': 'https://cdn.betterttv.net/emote/6468f7acaee1f7f47567708e/3x',\n },\n 'start': 53,\n 'end': 55,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'CandianRage',\n 'id': '54fbf09c01abde735115de61',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fbf09c01abde735115de61/1x',\n '2': 'https://cdn.betterttv.net/emote/54fbf09c01abde735115de61/2x',\n '4': 'https://cdn.betterttv.net/emote/54fbf09c01abde735115de61/3x',\n },\n 'start': 56,\n 'end': 67,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'CiGrip',\n 'id': '54fa8fce01e468494b85b53c',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fa8fce01e468494b85b53c/1x',\n '2': 'https://cdn.betterttv.net/emote/54fa8fce01e468494b85b53c/2x',\n '4': 'https://cdn.betterttv.net/emote/54fa8fce01e468494b85b53c/3x',\n },\n 'start': 68,\n 'end': 74,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'ConcernDoge',\n 'id': '566c9f6365dbbdab32ec0532',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/566c9f6365dbbdab32ec0532/1x',\n '2': 'https://cdn.betterttv.net/emote/566c9f6365dbbdab32ec0532/2x',\n '4': 'https://cdn.betterttv.net/emote/566c9f6365dbbdab32ec0532/3x',\n },\n 'start': 75,\n 'end': 86,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 101,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'CruW',\n 'id': '55471c2789d53f2d12781713',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/55471c2789d53f2d12781713/1x',\n '2': 'https://cdn.betterttv.net/emote/55471c2789d53f2d12781713/2x',\n '4': 'https://cdn.betterttv.net/emote/55471c2789d53f2d12781713/3x',\n },\n 'start': 87,\n 'end': 91,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'cvHazmat',\n 'id': '5e76d338d6581c3724c0f0b2',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/5e76d338d6581c3724c0f0b2/1x',\n '2': 'https://cdn.betterttv.net/emote/5e76d338d6581c3724c0f0b2/2x',\n '4': 'https://cdn.betterttv.net/emote/5e76d338d6581c3724c0f0b2/3x',\n },\n 'start': 92,\n 'end': 100,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'D:',\n 'id': '55028cd2135896936880fdd7',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/55028cd2135896936880fdd7/1x',\n '2': 'https://cdn.betterttv.net/emote/55028cd2135896936880fdd7/2x',\n '4': 'https://cdn.betterttv.net/emote/55028cd2135896936880fdd7/3x',\n },\n 'start': 101,\n 'end': 103,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'haHAA',\n 'id': '555981336ba1901877765555',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/555981336ba1901877765555/1x',\n '2': 'https://cdn.betterttv.net/emote/555981336ba1901877765555/2x',\n '4': 'https://cdn.betterttv.net/emote/555981336ba1901877765555/3x',\n },\n 'start': 104,\n 'end': 109,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'LuL',\n 'id': '567b00c61ddbe1786688a633',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/567b00c61ddbe1786688a633/1x',\n '2': 'https://cdn.betterttv.net/emote/567b00c61ddbe1786688a633/2x',\n '4': 'https://cdn.betterttv.net/emote/567b00c61ddbe1786688a633/3x',\n },\n 'start': 110,\n 'end': 113,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'DuckerZ',\n 'id': '573d38b50ffbf6cc5cc38dc9',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/573d38b50ffbf6cc5cc38dc9/1x',\n '2': 'https://cdn.betterttv.net/emote/573d38b50ffbf6cc5cc38dc9/2x',\n '4': 'https://cdn.betterttv.net/emote/573d38b50ffbf6cc5cc38dc9/3x',\n },\n 'start': 114,\n 'end': 121,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 149,\n 'height': 112,\n },\n },\n {\n 'type': 'ffz',\n 'name': 'CatBag',\n 'id': '25927',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.frankerfacez.com/emote/25927/1',\n '2': 'https://cdn.frankerfacez.com/emote/25927/2',\n '4': 'https://cdn.frankerfacez.com/emote/25927/4',\n },\n 'start': 122,\n 'end': 128,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 143,\n 'height': 128,\n },\n },\n]).reduce(\n (acc, emote) => {\n if (!acc.some((e) => e.name === emote.name)) {\n acc.push({\n ...emote,\n start: 0,\n end: 0,\n } as TwitchEmote | BttvEmote | SeventvEmote);\n }\n\n return acc;\n },\n [] as Array<TwitchEmote | BttvEmote | SeventvEmote>,\n);\n","export const messages = [\n 'Hello everyone!',\n 'PogChamp',\n 'This stream is amazing!',\n 'catJAM catJAM catJAM',\n 'LUL that was funny',\n 'GG!',\n 'First time here, loving it!',\n 'DinoDance',\n 'Can we get some hype in chat?',\n 'TransgenderPride PansexualPride NonbinaryPride',\n 'POGGERS',\n 'I just followed! PogChamp',\n 'Great gameplay btw',\n 'LUL LUL LUL',\n 'This is so wholesome AngelThump',\n 'catJAM vibing',\n 'haHAA',\n 'Wait what just happened? D:',\n 'GlitchCat GlitchCat',\n 'Best stream on Twitch right now!',\n 'DarkMode gang where you at?',\n 'PogChamp PogChamp PogChamp PogChamp',\n 'Anyone else eating? DoritosChip',\n 'I love this community!',\n 'TheIlluminati confirmed',\n 'bUrself be yourself!',\n 'CookieTime nom nom',\n 'imGlitch technical difficulties',\n 'This music is fire catJAM',\n 'bttvNice',\n 'LesbianPride GayPride BisexualPride',\n 'SSSsss Minecraft time',\n 'PopNemo',\n 'Going to bed, good night everyone!',\n 'Just got here, what did I miss?',\n ':tf: trollface',\n 'ariW wave',\n 'BroBalt nice one',\n 'AsexualPride IntersexPride GenderFluidPride',\n 'This chat is moving so fast!',\n 'CandianRage',\n 'PunchTrees PunchTrees',\n 'CiGrip',\n 'ConcernDoge hmm',\n 'CruW salute',\n 'cvHazmat stay safe',\n 'DuckerZ quack',\n 'BloodTrail hunting time',\n 'CatBag kitty!',\n 'c! poggers',\n];\n","export const names = ['Local', 'Tixyel', 'Urie_s2', 'itzzcatt', 'BeniArts', 'Cupidiko', 'shy_madeit'];\n","export const tts = [\n 'Filiz',\n 'Astrid',\n 'Tatyana',\n 'Maxim',\n 'Carmen',\n 'Ines',\n 'Cristiano',\n 'Vitoria',\n 'Ricardo',\n 'Maja',\n 'Jan',\n 'Jacek',\n 'Ewa',\n 'Ruben',\n 'Lotte',\n 'Liv',\n 'Seoyeon',\n 'Takumi',\n 'Mizuki',\n 'Giorgio',\n 'Carla',\n 'Bianca',\n 'Karl',\n 'Dora',\n 'Mathieu',\n 'Celine',\n 'Chantal',\n 'Penelope',\n 'Miguel',\n 'Mia',\n 'Enrique',\n 'Conchita',\n 'Geraint',\n 'Salli',\n 'Matthew',\n 'Kimberly',\n 'Kendra',\n 'Justin',\n 'Joey',\n 'Joanna',\n 'Ivy',\n 'Raveena',\n 'Aditi',\n 'Emma',\n 'Brian',\n 'Amy',\n 'Russell',\n 'Nicole',\n 'Vicki',\n 'Marlene',\n 'Hans',\n 'Naja',\n 'Mads',\n 'Gwyneth',\n 'Zhiyu',\n 'Tracy',\n 'Danny',\n 'Huihui',\n 'Yaoyao',\n 'Kangkang',\n 'HanHan',\n 'Zhiwei',\n 'Asaf',\n 'An',\n 'Stefanos',\n 'Filip',\n 'Ivan',\n 'Heidi',\n 'Herena',\n 'Kalpana',\n 'Hemant',\n 'Matej',\n 'Andika',\n 'Rizwan',\n 'Lado',\n 'Valluvar',\n 'Linda',\n 'Heather',\n 'Sean',\n 'Michael',\n 'Karsten',\n 'Guillaume',\n 'Pattara',\n 'Jakub',\n 'Szabolcs',\n 'Hoda',\n 'Naayf',\n];\n","export const items: any[] = [];\n","export const tiers = ['1000', '2000', '3000', 'prime'];\n","import { Tixyel } from '../index.js';\nimport { Alejo$Pronouns } from '../types/alejo/pronouns.js';\nimport type { TwitchBadge, TwitchBadgesKeys } from '../types/badge.js';\nimport type { Provider } from '../types/client.js';\nimport type { BttvEmote, SeventvEmote, TwitchEmote } from '../types/emote.js';\nimport type {\n FieldSettings,\n NormalizedFieldSettings,\n StreamElementsField,\n StreamElementsFieldTypes,\n StreamElementsFieldValue,\n} from '../types/streamelements/customfields.js';\nimport type { StreamElements$AlertService } from '../types/streamelements/events/integrated/alertService.js';\nimport type { StreamElements$BotCounter } from '../types/streamelements/events/integrated/botCounter.js';\nimport type { StreamElements$EventSkip } from '../types/streamelements/events/integrated/eventSkip.js';\nimport type { StreamElements } from '../types/streamelements/events/integrated/index.js';\nimport type { StreamElements$KVStore } from '../types/streamelements/events/integrated/kvstore.js';\nimport type { StreamElements$Tip } from '../types/streamelements/events/integrated/tip.js';\nimport type { onEventReceived } from '../types/streamelements/events/onEventReceived.js';\nimport type { onSessionUpdate } from '../types/streamelements/events/onSessionUpdate.js';\nimport type { onWidgetLoad } from '../types/streamelements/events/onWidgetLoad.js';\nimport type { Twitch$Cheer } from '../types/streamelements/events/twitch/cheer.js';\nimport type { Twitch$Follower } from '../types/streamelements/events/twitch/follower.js';\nimport type { Twitch } from '../types/streamelements/events/twitch/index.js';\nimport type { Twitch$DeleteMessage, Twitch$DeleteMessages } from '../types/streamelements/events/twitch/message.delete.js';\nimport type { Twitch$Message } from '../types/streamelements/events/twitch/message.js';\nimport type { Twitch$Raid } from '../types/streamelements/events/twitch/raid.js';\nimport type { Subscriber$community, Subscriber$gift, Subscriber$spam, Twitch$Subscriber } from '../types/streamelements/events/twitch/subscriber.js';\nimport type { Youtube } from '../types/streamelements/events/youtube/index.js';\nimport type { Youtube$Message } from '../types/streamelements/events/youtube/message.js';\nimport type { Sponsor$community, Sponsor$gift, Sponsor$spam, Youtube$Sponsor } from '../types/streamelements/events/youtube/sponsor.js';\nimport type { YouTube$Subscriber } from '../types/streamelements/events/youtube/subscriber.js';\nimport type { YouTube$Superchat } from '../types/streamelements/events/youtube/superchat.js';\nimport type { Session$AnyConfig, Session$AvailableCategory, Session$AvailableData } from '../types/streamelements/session.generate.js';\nimport type { Session } from '../types/streamelements/session.js';\nimport { BadgeOptions, findEmotesInText, generateBadges, replaceEmotesWithHTML } from '../utils/Message.js';\nimport { names, messages, avatars, emotes, badges, tts, items, tiers } from './data/index.js';\n\ntype Modifier = (value: string, param: string | null | undefined, values: { amount?: number; count?: number }) => string;\n\nexport class Simulation {\n static data = {\n names: names,\n messages: messages,\n tiers: tiers,\n avatars: avatars,\n items: items,\n emotes: emotes,\n badges: badges,\n pronouns: Alejo$Pronouns,\n tts: tts,\n };\n\n static color = {\n opacity(opacity: number = 100, color: string) {\n color = color.length > 7 ? color.substring(0, 6) : color;\n opacity = opacity > 1 ? opacity / 100 : opacity;\n\n let result = Math.round(Math.min(Math.max(opacity, 0), 1) * 255)\n .toString(16)\n .toLowerCase();\n\n result = result.padStart(2, '0');\n\n return color + result;\n },\n\n getOpacity(hex: string) {\n if (!hex.startsWith('#') || hex.length <= 7) return { opacity: 100, hex };\n\n var ohex = hex.slice(-2);\n var decimal = parseInt(ohex, 16) / 255;\n var percentage = Math.round(decimal * 100);\n var color = hex.length > 7 ? hex.slice(0, 7) : hex;\n\n return { opacity: percentage, color: color };\n },\n\n validate(str: string): 'hex' | 'rgb' | 'rgba' | 'hsl' | 'hsla' | 'css-color-name' | false {\n if (typeof str !== 'string' || !str.length) return false;\n\n const s = str.trim();\n\n // HEX (#FFF, #FFFFFF, #FFFFFFFF)\n if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(s) || /^#([A-Fa-f0-9]{4}|[A-Fa-f0-9]{8})$/.test(s)) {\n return 'hex';\n }\n\n // rgb(255, 255, 255)\n if (/^rgb\\(\\s*(?:\\d{1,3}\\s*,\\s*){2}\\d{1,3}\\s*\\)$/.test(s)) {\n return 'rgb';\n }\n\n // rgba(255, 255, 255, 0.5)\n if (/^rgba\\(\\s*(?:\\d{1,3}\\s*,\\s*){3}(?:0|1|0?\\.\\d+)\\s*\\)$/.test(s)) {\n return 'rgba';\n }\n\n // hsl(360, 100%, 100%)\n if (/^hsl\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%\\s*,\\s*\\d{1,3}%\\s*\\)$/.test(s)) {\n return 'hsl';\n }\n\n // hsla(360, 100%, 100%, 0.5)\n if (/^hsla\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%\\s*,\\s*\\d{1,3}%\\s*,\\s*(?:0|1|0?\\.\\d+)\\s*\\)$/.test(s)) {\n return 'hsla';\n }\n\n if (\n [\n 'aliceblue',\n 'antiquewhite',\n 'aqua',\n 'aquamarine',\n 'azure',\n 'beige',\n 'bisque',\n 'black',\n 'blanchedalmond',\n 'blue',\n 'blueviolet',\n 'brown',\n 'burlywood',\n 'cadetblue',\n 'chartreuse',\n 'chocolate',\n 'coral',\n 'cornflowerblue',\n 'cornsilk',\n 'crimson',\n 'cyan',\n 'darkblue',\n 'darkcyan',\n 'darkgoldenrod',\n 'darkgray',\n 'darkgreen',\n 'darkgrey',\n 'darkkhaki',\n 'darkmagenta',\n 'darkolivegreen',\n 'darkorange',\n 'darkorchid',\n 'darkred',\n 'darksalmon',\n 'darkseagreen',\n 'darkslateblue',\n 'darkslategray',\n 'darkslategrey',\n 'darkturquoise',\n 'darkviolet',\n 'deeppink',\n 'deepskyblue',\n 'dimgray',\n 'dimgrey',\n 'dodgerblue',\n 'firebrick',\n 'floralwhite',\n 'forestgreen',\n 'fuchsia',\n 'gainsboro',\n 'ghostwhite',\n 'gold',\n 'goldenrod',\n 'gray',\n 'green',\n 'greenyellow',\n 'grey',\n 'honeydew',\n 'hotpink',\n 'indianred',\n 'indigo',\n 'ivory',\n 'khaki',\n 'lavender',\n 'lavenderblush',\n 'lawngreen',\n 'lemonchiffon',\n 'lightblue',\n 'lightcoral',\n 'lightcyan',\n 'lightgoldenrodyellow',\n 'lightgray',\n 'lightgreen',\n 'lightgrey',\n 'lightpink',\n 'lightsalmon',\n 'lightseagreen',\n 'lightskyblue',\n 'lightslategray',\n 'lightslategrey',\n 'lightsteelblue',\n 'lightyellow',\n 'lime',\n 'limegreen',\n 'linen',\n 'magenta',\n 'maroon',\n 'mediumaquamarine',\n 'mediumblue',\n 'mediumorchid',\n 'mediumpurple',\n 'mediumseagreen',\n 'mediumslateblue',\n 'mediumspringgreen',\n 'mediumturquoise',\n 'mediumvioletred',\n 'midnightblue',\n 'mintcream',\n 'mistyrose',\n 'moccasin',\n 'navajowhite',\n 'navy',\n 'oldlace',\n 'olive',\n 'olivedrab',\n 'orange',\n 'orangered',\n 'orchid',\n 'palegoldenrod',\n 'palegreen',\n 'paleturquoise',\n 'palevioletred',\n 'papayawhip',\n 'peachpuff',\n 'peru',\n 'pink',\n 'plum',\n 'powderblue',\n 'purple',\n 'rebeccapurple',\n 'red',\n 'rosybrown',\n 'royalblue',\n 'saddlebrown',\n 'salmon',\n 'sandybrown',\n 'seagreen',\n 'seashell',\n 'sienna',\n 'silver',\n 'skyblue',\n 'slateblue',\n 'slategray',\n 'slategrey',\n 'snow',\n 'springgreen',\n 'steelblue',\n 'tan',\n 'teal',\n 'thistle',\n 'tomato',\n 'turquoise',\n 'violet',\n 'wheat',\n 'white',\n 'whitesmoke',\n 'yellow',\n 'yellowgreen',\n 'transparent',\n ].includes(s.toLowerCase())\n ) {\n return 'css-color-name';\n }\n\n return false;\n },\n };\n\n static rand = {\n color(type: 'hex' | 'hexa' | 'rgb' | 'rgba' | 'hsl' | 'hsla' | 'css-color-name' = 'hex'): string {\n switch (type) {\n default:\n case 'hex': {\n return `#${Math.floor(Math.random() * 0xffffff)\n .toString(16)\n .padStart(6, '0')}`;\n }\n case 'hexa': {\n const hex = `#${Math.floor(Math.random() * 0xffffff)\n .toString(16)\n .padStart(6, '0')}`;\n\n const alpha = Math.floor(Math.random() * 256)\n .toString(16)\n .padStart(2, '0');\n\n return hex + alpha;\n }\n case 'rgb': {\n const r = Math.floor(Math.random() * 256);\n const g = Math.floor(Math.random() * 256);\n const b = Math.floor(Math.random() * 256);\n\n return `rgb(${r}, ${g}, ${b})`;\n }\n case 'rgba': {\n const r = Math.floor(Math.random() * 256);\n const g = Math.floor(Math.random() * 256);\n const b = Math.floor(Math.random() * 256);\n const a = Math.random().toFixed(2);\n\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n }\n case 'hsl': {\n const h = Math.floor(Math.random() * 361);\n const s = Math.floor(Math.random() * 101);\n const l = Math.floor(Math.random() * 101);\n\n return `hsl(${h}, ${s}%, ${l}%)`;\n }\n case 'hsla': {\n const h = Math.floor(Math.random() * 361);\n const s = Math.floor(Math.random() * 101);\n const l = Math.floor(Math.random() * 101);\n const a = Math.random().toFixed(2);\n\n return `hsla(${h}, ${s}%, ${l}%, ${a})`;\n }\n case 'css-color-name': {\n var names = [\n 'aliceblue',\n 'antiquewhite',\n 'aqua',\n 'aquamarine',\n 'azure',\n 'beige',\n 'bisque',\n 'black',\n 'blanchedalmond',\n 'blue',\n 'blueviolet',\n 'brown',\n 'burlywood',\n 'cadetblue',\n 'chartreuse',\n 'chocolate',\n 'coral',\n 'cornflowerblue',\n 'cornsilk',\n 'crimson',\n 'cyan',\n 'darkblue',\n 'darkcyan',\n 'darkgoldenrod',\n 'darkgray',\n 'darkgreen',\n 'darkgrey',\n 'darkkhaki',\n 'darkmagenta',\n 'darkolivegreen',\n 'darkorange',\n 'darkorchid',\n 'darkred',\n 'darksalmon',\n 'darkseagreen',\n 'darkslateblue',\n 'darkslategray',\n 'darkslategrey',\n 'darkturquoise',\n 'darkviolet',\n 'deeppink',\n 'deepskyblue',\n 'dimgray',\n 'dimgrey',\n 'dodgerblue',\n 'firebrick',\n 'floralwhite',\n 'forestgreen',\n 'fuchsia',\n 'gainsboro',\n 'ghostwhite',\n 'gold',\n 'goldenrod',\n 'gray',\n 'green',\n 'greenyellow',\n 'grey',\n 'honeydew',\n 'hotpink',\n 'indianred',\n 'indigo',\n 'ivory',\n 'khaki',\n 'lavender',\n 'lavenderblush',\n 'lawngreen',\n 'lemonchiffon',\n 'lightblue',\n 'lightcoral',\n 'lightcyan',\n 'lightgoldenrodyellow',\n 'lightgray',\n 'lightgreen',\n 'lightgrey',\n 'lightpink',\n 'lightsalmon',\n 'lightseagreen',\n 'lightskyblue',\n 'lightslategray',\n 'lightslategrey',\n 'lightsteelblue',\n 'lightyellow',\n 'lime',\n 'limegreen',\n 'linen',\n 'magenta',\n 'maroon',\n 'mediumaquamarine',\n 'mediumblue',\n 'mediumorchid',\n 'mediumpurple',\n 'mediumseagreen',\n 'mediumslateblue',\n 'mediumspringgreen',\n 'mediumturquoise',\n 'mediumvioletred',\n 'midnightblue',\n 'mintcream',\n 'mistyrose',\n 'moccasin',\n 'navajowhite',\n 'navy',\n 'oldlace',\n 'olive',\n 'olivedrab',\n 'orange',\n 'orangered',\n 'orchid',\n 'palegoldenrod',\n 'palegreen',\n 'paleturquoise',\n 'palevioletred',\n 'papayawhip',\n 'peachpuff',\n 'peru',\n 'pink',\n 'plum',\n 'powderblue',\n 'purple',\n 'rebeccapurple',\n 'red',\n 'rosybrown',\n 'royalblue',\n 'saddlebrown',\n 'salmon',\n 'sandybrown',\n 'seagreen',\n 'seashell',\n 'sienna',\n 'silver',\n 'skyblue',\n 'slateblue',\n 'slategray',\n 'slategrey',\n 'snow',\n 'springgreen',\n 'steelblue',\n 'tan',\n 'teal',\n 'thistle',\n 'tomato',\n 'turquoise',\n 'violet',\n 'wheat',\n 'white',\n 'whitesmoke',\n 'yellow',\n 'yellowgreen',\n 'transparent',\n ];\n\n return this.array(names)[0];\n }\n }\n },\n\n number(min: number, max: number, float: number = 0): number {\n if (min > max) [min, max] = [max, min];\n\n const rand = Math.random() * (max - min) + min;\n return float ? Number(rand.toFixed(float)) : Math.round(rand);\n },\n\n boolean(threshold: number = 0.5): boolean {\n return Math.random() > threshold;\n },\n\n string(length: number, chars: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'): string {\n let result = '';\n\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n\n return result;\n },\n\n array<T>(arr: T[]): [value: T, index: number] {\n const index = this.number(0, arr.length - 1);\n\n return [arr[index], index];\n },\n\n date(rangeDays: number = 365): string {\n const now = Date.now();\n const past = now - this.number(0, rangeDays * 24 * 60 * 60 * 1000);\n\n return new Date(past).toISOString();\n },\n\n uuid(): string {\n return window.crypto && typeof crypto?.randomUUID === 'function'\n ? crypto.randomUUID()\n : '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) =>\n (+c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (+c / 4)))).toString(16),\n );\n },\n };\n\n static string = {\n /**\n * Replaces occurrences in a string based on a pattern with the result of an asynchronous callback function.\n * @param string - The input string to perform replacements on.\n * @param pattern - The pattern to match in the string (can be a string or a regular expression).\n * @param callback - An asynchronous callback function that takes the matched substring and any captured groups as arguments and returns the replacement string.\n * @returns A promise that resolves to the modified string with replacements applied.\n * @example\n * ```javascript\n * const result = await Simulation.string.replace(\"Hello World\", /World/, async (match) => {\n * return await fetchSomeData(match); // Assume this function fetches data asynchronously\n * });\n * console.log(result); // Output will depend on the fetched data\n * ```\n */\n async replace(string: string, pattern: string, callback: (match: string, ...groups: string[]) => Promise<string> | string): Promise<string> {\n const promises: Array<Promise<string>> = [];\n\n string.replace(pattern, (match: string, ...groups: string[]) => {\n const promise = typeof callback === 'function' ? callback(match, ...groups) : match;\n\n promises.push(Promise.resolve(promise));\n\n return match;\n });\n\n const replacements = await Promise.all(promises);\n\n return string.replace(pattern, () => replacements.shift() ?? '');\n },\n\n /**\n * Capitalizes the first letter of a given string.\n * @param string - The input string to be capitalized.\n * @returns The capitalized string.\n * @example\n * ```javascript\n * const result = Simulation.string.capitalize(\"hello world\");\n * console.log(result); // Output: \"Hello world\"\n * ```\n */\n capitalize(string: string): string {\n return string.charAt(0).toUpperCase() + string.slice(1);\n },\n\n /**\n * Composes a template string by replacing placeholders with corresponding values and applying optional modifiers.\n * @param template - The template string containing placeholders in the format {key} and optional modifiers in the format [MODIFIER:param=value].\n * @param values - An object containing key-value pairs to replace the placeholders in the template.\n * @param options - Optional settings for the composition process.\n * @returns The composed string with placeholders replaced and modifiers applied.\n * @example\n * ```javascript\n * const template = \"Hello, {username}! You have {amount} [UPPERCASE=messages] and your name is [CAPITALIZE=name].\";\n * const values = { username: \"john_doe\", amount: 5, name: \"john\" };\n * const result = Simulation.string.compose(template, values);\n * console.log(result); // Output: \"Hello, john_doe! You have 5 MESSAGES and your name is John.\"\n * ```\n */\n compose(\n template: string,\n values: Record<string, any> = {},\n options: {\n method?: 'loop' | 'index';\n html?: boolean;\n modifiers?: Record<string, Modifier>;\n aliases?: Record<string, string[]>;\n } = {\n method: 'index',\n html: false,\n modifiers: {},\n aliases: {},\n },\n ): string {\n const { mergeSpanStyles } = Simulation.element;\n\n values.skip = '<br/>';\n values.newline = '<br/>';\n\n const flatten: Record<string, string> = Object.entries(Simulation.object.flatten(values)).reduce(\n (acc, [k, v]) => {\n acc[k] = String(v);\n\n if (['username', 'name', 'nick', 'nickname', 'sender'].some((e) => k === e)) {\n const username = acc?.username || acc?.name || acc?.nick || acc?.nickname || acc?.sender;\n\n acc['username'] = acc.username || username;\n acc['usernameAt'] = `@${acc.username}`;\n acc['name'] = acc.name || username;\n acc['nick'] = acc.nick || username;\n acc['nickname'] = acc.nickname || username;\n acc['sender'] = acc.sender || username;\n acc['senderAt'] = `@${acc.sender}`;\n }\n\n if (['amount', 'count'].some((e) => k === e)) {\n acc['amount'] = String(amount);\n acc['count'] = String(acc?.count || amount);\n }\n\n acc['currency'] = acc.currency || window.client?.details.currency.symbol || '$';\n acc['currencyCode'] = acc.currencyCode || window.client?.details.currency.code || 'USD';\n\n return acc;\n },\n {} as Record<string, string>,\n );\n\n const REGEX = {\n PLACEHOLDERS: /{([^}]+)}/g,\n MODIFIERS: /\\[(\\w+)(:[^=]+)?=([^\\]]+)\\]/g,\n };\n\n var amount = parseFloat(flatten?.amount ?? flatten?.count ?? 0);\n\n const HTML_MODIFIERS: Record<string, Modifier> = {\n COLOR: (value, param) => mergeSpanStyles(param && !!Simulation.color.validate(param) ? `color: ${param}` : '', value),\n WEIGHT: (value, param) => mergeSpanStyles(param && !isNaN(parseInt(param)) ? `font-weight: ${param}` : '', value),\n BOLD: (value) => mergeSpanStyles('font-weight: bold', value),\n LIGHT: (value) => mergeSpanStyles('font-weight: lighter', value),\n STRONG: (value) => mergeSpanStyles('font-weight: bolder', value),\n ITALIC: (value) => mergeSpanStyles('font-style: italic', value),\n UNDERLINE: (value) => mergeSpanStyles('text-decoration: underline', value),\n STRIKETHROUGH: (value) => mergeSpanStyles('text-decoration: line-through', value),\n SUB: (value) => mergeSpanStyles('vertical-align: sub', value),\n SUP: (value) => mergeSpanStyles('vertical-align: super', value),\n LARGER: (value) => mergeSpanStyles('font-size: larger', value),\n SMALL: (value) => mergeSpanStyles('font-size: smaller', value),\n SHADOW: (value, param) => mergeSpanStyles(`text-shadow: ${param}`, value),\n SIZE: (value, param) => mergeSpanStyles(param ? `font-size: ${param}` : '', value),\n };\n\n const STRING_MODIFIERS: Record<string, Modifier> = {\n BT1: (value) => (amount > 1 ? value : ''),\n BT0: (value) => (amount > 0 ? value : ''),\n ST1: (value) => (amount < 1 ? value : ''),\n ST0: (value) => (amount < 0 ? value : ''),\n UPC: (value) => value.toUpperCase(),\n LOW: (value) => value.toLowerCase(),\n REV: (value) => value.split('').reverse().join(''),\n CAP: (value) => value.charAt(0).toUpperCase() + value.slice(1).toLowerCase(),\n FALLBACK: (value, param) => (value.length ? value : (param ?? value)),\n };\n\n const MODIFIERS: Record<string, Modifier> = {\n ...STRING_MODIFIERS,\n ...(options?.html ? HTML_MODIFIERS : {}),\n ...(options.modifiers ?? {}),\n };\n\n const ALIASES = {\n UPC: ['UPPERCASE', 'UPPER', 'UPP'],\n LOW: ['LOWERCASE', 'LOWER', 'LWC'],\n REV: ['REVERSE', 'RVS'],\n CAP: ['CAPITALIZE', 'CAPITAL'],\n BT1: ['BIGGER_THAN_1', 'GREATER_THAN_1', 'GT1'],\n BT0: ['BIGGER_THAN_0', 'GREATER_THAN_0', 'GT0'],\n ST1: ['SMALLER_THAN_1', 'LESS_THAN_1', 'LT1'],\n ST0: ['SMALLER_THAN_0', 'LESS_THAN_0', 'LT0'],\n COLOR: ['COLOUR', 'CLR', 'HIGHLIGHT'],\n BOLD: ['BOLDEN', 'B'],\n STRONG: ['STRONGEN', 'STRONG'],\n ITALIC: ['ITALICIZE', 'ITALIC', 'I'],\n UNDERLINE: ['U', 'INS', 'INSET', 'I'],\n STRIKETHROUGH: ['STRIKE', 'S', 'DELETE', 'D'],\n SUB: ['SUBSCRIPT', 'SUBS'],\n SUP: ['SUPERSCRIPT', 'SUPS'],\n LARGER: ['LARGER', 'LG'],\n SMALL: ['SMALLER', 'SM'],\n SHADOW: ['SHADOW', 'SHD'],\n FALLBACK: ['FALLBACK', 'FB'],\n ...(options.aliases ?? {}),\n };\n\n function applyModifier(value: string, name: string, param: string | null | undefined): string {\n const canonical = Object.entries(ALIASES).find(([key, aliases]) => {\n if (aliases.some((alias) => alias.toUpperCase() === name.toUpperCase())) return true;\n else if (key.toUpperCase() === name.toUpperCase()) return true;\n else return false;\n });\n const use = canonical ? canonical[0] : name.toUpperCase();\n\n if (MODIFIERS[use]) return MODIFIERS[use](value, typeof param === 'string' ? param.trim() : null, flatten);\n else return value;\n }\n\n function replaceAll(string: string): string {\n let str = string;\n let match;\n\n while ((match = REGEX.MODIFIERS.exec(str)) !== null) {\n const [fullMatch, modifier, param, value] = match;\n\n const newValue = applyModifier(replaceAll(value), modifier, param);\n\n str = str.replace(fullMatch, newValue ?? '');\n\n REGEX.MODIFIERS.lastIndex = 0;\n }\n\n return str;\n }\n\n function parseModifiers(str: string): string {\n let i = 0;\n const len = str.length;\n\n function parseText(stopChar?: string): string {\n let out = '';\n while (i < len) {\n if (str[i] === '\\\\') {\n if (i + 1 < len) {\n out += str[i + 1];\n i += 2;\n } else {\n i++;\n }\n } else if (str[i] === '[' && (!stopChar || stopChar !== '[')) {\n out += parseModifier();\n } else if (stopChar && str[i] === stopChar) {\n i++;\n break;\n } else {\n out += str[i++];\n }\n }\n return out;\n }\n\n function parseModifier(): string {\n i++;\n let name = '';\n while (i < len && /[A-Za-z0-9]/.test(str[i])) name += str[i++];\n let param: string | null = null;\n if (str[i] === ':') {\n i++;\n const paramStart = i;\n while (i < len && str[i] !== '=') i++;\n param = str.slice(paramStart, i);\n }\n if (str[i] === '=') i++;\n const value = parseText(']');\n return applyModifier(value, name, param);\n }\n\n return parseText();\n }\n\n let result = template.replace(REGEX.PLACEHOLDERS, (_, key: string) =>\n typeof flatten[key] === 'string' || typeof flatten[key] === 'number' ? String(flatten[key]) : (key ?? key),\n );\n\n result = options.method === 'loop' ? replaceAll(result) : parseModifiers(result);\n\n return result;\n },\n };\n\n static element = {\n /**\n * Merges outer span styles with inner span styles in the provided HTML string.\n * @param outerStyle - The style string to be applied to the outer span.\n * @param innerHTML - The inner HTML string which may contain a span with its own styles.\n * @returns A new HTML string with merged styles applied to a single span.\n * @example\n * ```javascript\n * const result = Simulation.element.mergeSpanStyles(\"color: red; font-weight: bold;\", '<span style=\"font-size: 14px;\">Hello World</span>');\n * console.log(result); // Output: '<span style=\"font-size: 14px; color: red; font-weight: bold;\">Hello World</span>'\n * ```\n */\n mergeSpanStyles(outerStyle: string, innerHTML: string): string {\n const match = innerHTML.match(/^<span style=\"([^\"]*)\">(.*)<\\/span>$/s);\n\n if (match) {\n const innerStyle = match[1];\n const content = match[2];\n\n const mergedStyle = [innerStyle, outerStyle]\n .filter(Boolean)\n .join('; ')\n .replace(/\\s*;\\s*/g, '; ')\n .trim();\n\n return `<span style=\"${mergedStyle}\">${content}</span>`;\n } else {\n return `<span style=\"${outerStyle}\">${innerHTML}</span>`;\n }\n },\n\n /**\n * Scales an HTML element to fit within its parent element based on specified minimum and maximum scale factors.\n * @param element - The HTML element to be scaled.\n * @param min - Minimum scale factor (default is 0).\n * @param max - Maximum scale factor (default is 1).\n * @param options - Optional settings for scaling.\n * @returns - An object containing the new width, height, and scale factor, or void if not applied.\n * @example\n * ```javascript\n * const element = document.getElementById('myElement');\n * Simulation.element.scale(element, 0.5, 1, { return: false });\n * ```\n */\n scale(\n element: HTMLElement,\n min: number = 0,\n max: number = 1,\n options?: { return: boolean; parent: HTMLElement; base: 'width' | 'height' },\n ): { width: number; height: number; scale: number } | void {\n const { return: returnOnly = false, parent: customParent, base } = options || {};\n\n const parent = customParent || element.parentElement || document.body;\n\n if (!parent) {\n Tixyel.logger.warn('No parent element found for scaling');\n return;\n }\n\n const parentRect = parent.getBoundingClientRect();\n const elementWidth = element.offsetWidth;\n const elementHeight = element.offsetHeight;\n\n if (elementWidth === 0 || elementHeight === 0) {\n Tixyel.logger.warn('Element has zero width or height, cannot scale');\n return;\n }\n\n // Calculate scales for both dimensions\n const scaleX = (parentRect.width * max) / elementWidth;\n const scaleY = (parentRect.height * max) / elementHeight;\n\n // Determine final scale based on base option or use smaller scale\n let finalScale = base === 'width' ? scaleX : base === 'height' ? scaleY : Math.min(scaleX, scaleY);\n\n // Apply minimum constraint if needed\n if (min > 0) {\n const minScaleX = (parentRect.width * min) / elementWidth;\n const minScaleY = (parentRect.height * min) / elementHeight;\n const minScale = Math.max(minScaleX, minScaleY);\n\n finalScale = Math.max(minScale, finalScale);\n }\n\n const result = {\n width: elementWidth * finalScale,\n height: elementHeight * finalScale,\n scale: finalScale,\n };\n\n if (returnOnly) {\n return result;\n }\n\n element.style.transform = `scale(${finalScale})`;\n element.style.transformOrigin = 'center center';\n\n return result;\n },\n\n /**\n * Splits the text content of an HTML string into individual characters wrapped in span elements with a data-index attribute.\n * @param htmlString - The input HTML string to be processed.\n * @param startIndex - The starting index for the data-index attribute (default is 0).\n * @returns - A new HTML string with each character wrapped in a span element.\n * @example\n * ```javascript\n * const result = Simulation.element.splitTextToChars(\"<p>Hello</p>\", 0);\n * console.log(result);\n * // Output: '<p><span class=\"char\" data-index=\"0\">H</span><span class=\"char\" data-index=\"1\">e</span><span class=\"char\" data-index=\"2\">l</span><span class=\"char\" data-index=\"3\">l</span><span class=\"char\" data-index=\"4\">o</span></p>'\n * ```\n */\n splitTextToChars(htmlString: string, startIndex: number = 0): string {\n const parser = new DOMParser();\n const doc = parser.parseFromString(htmlString, 'text/html');\n\n let charIndex = startIndex;\n\n function processNode(node: Node) {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent;\n\n const chars = text?.split('').map((char) => {\n const span = document.createElement('span');\n\n span.className = 'char';\n span.dataset.index = String(charIndex++);\n\n span.textContent = char;\n\n charIndex++;\n\n return span.outerHTML;\n });\n\n const wrapper = document.createElement('span');\n\n wrapper.innerHTML = chars?.join('') ?? '';\n\n return wrapper;\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const clone = node.cloneNode(false);\n\n node.childNodes.forEach((child) => {\n const processed = processNode(child);\n\n if (processed instanceof Node) {\n Array.from(processed.childNodes).forEach((childNode) => {\n clone.appendChild(childNode);\n });\n }\n });\n\n return clone;\n }\n\n return node.cloneNode(true);\n }\n\n const body = doc.body;\n const processed = document.createElement('div');\n\n body.childNodes.forEach((node) => {\n const result = processNode(node);\n\n if (result instanceof Node) {\n processed.appendChild(result);\n }\n });\n\n return processed.innerHTML;\n },\n };\n\n static object = {\n /**\n * Flattens a nested object into a single-level object with dot-separated keys.\n * @param obj - The nested object to be flattened.\n * @param prefix - The prefix to be added to each key (used for recursion).\n * @returns A flattened object with dot-separated keys.\n * @example\n * ```javascript\n * const nestedObj = { a: { b: 1, c: { d: 2 } }, e: [3, 4] };\n * const flatObj = Simulation.object.flatten(nestedObj);\n * console.log(flatObj);\n * // Output: { 'a.b': '1', 'a.c.d': '2', 'e:0': '3', 'e:1': '4' }\n * ```\n */\n flatten(obj: Record<string, any>, prefix: string = ''): Record<string, string> {\n const result = {} as Record<string, string>;\n\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;\n\n const value = obj[key];\n const path = prefix ? `${prefix}.${key}` : key;\n\n // Handle null and undefined\n if (value === null || value === undefined) {\n result[path] = String(value);\n\n continue;\n }\n\n // Handle Date objects\n if (value instanceof Date) {\n result[path] = value.toISOString();\n\n continue;\n }\n\n // Handle Map objects\n if (value instanceof Map) {\n value.forEach((v, k) => {\n result[`${path}.${k}`] = JSON.stringify(v);\n });\n\n continue;\n }\n\n // Handle Array objects\n if (Array.isArray(value)) {\n value.forEach((v, i) => {\n const itemPath = `${path}:${i}`;\n\n if (typeof v === 'object') {\n Object.assign(result, this.flatten(v, itemPath));\n } else {\n result[itemPath] = String(v);\n }\n });\n\n continue;\n }\n\n // Handle nested objects\n if (typeof value === 'object') {\n Object.assign(result, this.flatten(value, path));\n\n continue;\n }\n\n // Handle primitive values (string, number, boolean, etc.)\n result[path] = String(value);\n }\n\n return result;\n },\n };\n\n static generate = {\n session: {\n types: {\n name: { type: 'string', options: Simulation.data.names.filter((e) => e.length) },\n tier: { type: 'string', options: Simulation.data.tiers.filter((e) => e.length) },\n message: { type: 'string', options: Simulation.data.messages.filter((e) => e.length) },\n item: { type: 'array', options: Simulation.data.items },\n avatar: { type: 'string', options: Simulation.data.avatars.filter((e) => e.length) },\n } as Record<string, Session$AnyConfig>,\n\n available(): Session$AvailableData {\n const types = this.types;\n\n return {\n follower: {\n latest: { name: types.name },\n session: { count: { type: 'int', min: 50, max: 200 } },\n week: { count: { type: 'int', min: 200, max: 1000 } },\n month: { count: { type: 'int', min: 1000, max: 3000 } },\n goal: { amount: { type: 'int', min: 3000, max: 7000 } },\n total: { count: { type: 'int', min: 7000, max: 10000 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: { name: types.name, createdAt: { type: 'date', range: 400 } },\n },\n },\n subscriber: {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n tier: types.tier,\n message: types.message,\n },\n 'new-latest': {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n message: types.message,\n },\n 'resub-latest': {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n message: types.message,\n },\n 'gifted-latest': {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n message: types.message,\n tier: types.tier,\n sender: types.name,\n },\n session: { count: { type: 'int', min: 10, max: 40 } },\n 'new-session': { count: { type: 'int', min: 10, max: 40 } },\n 'resub-session': { count: { type: 'int', min: 10, max: 40 } },\n 'gifted-session': { count: { type: 'int', min: 10, max: 40 } },\n week: { count: { type: 'int', min: 40, max: 100 } },\n month: { count: { type: 'int', min: 100, max: 200 } },\n goal: { amount: { type: 'int', min: 200, max: 300 } },\n total: { count: { type: 'int', min: 300, max: 400 } },\n points: { amount: { type: 'int', min: 100, max: 400 } },\n 'alltime-gifter': { name: types.name, amount: { type: 'int', min: 300, max: 400 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n tier: types.tier,\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n host: {\n latest: { name: types.name, amount: { type: 'int', min: 1, max: 10 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 1, max: 10 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n raid: {\n latest: { name: types.name, amount: { type: 'int', min: 0, max: 100 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n charityCampaignDonation: {\n latest: { name: types.name, amount: { type: 'int', min: 50, max: 150 } },\n 'session-top-donation': { name: types.name, amount: { type: 'int', min: 50, max: 200 } },\n 'weekly-top-donation': { name: types.name, amount: { type: 'int', min: 200, max: 500 } },\n 'monthly-top-donation': { name: types.name, amount: { type: 'int', min: 500, max: 800 } },\n 'alltime-top-donation': { name: types.name, amount: { type: 'int', min: 800, max: 1000 } },\n 'session-top-donator': { name: types.name, amount: { type: 'int', min: 50, max: 200 } },\n 'weekly-top-donator': { name: types.name, amount: { type: 'int', min: 200, max: 500 } },\n 'monthly-top-donator': { name: types.name, amount: { type: 'int', min: 500, max: 800 } },\n 'alltime-top-donator': { name: types.name, amount: { type: 'int', min: 800, max: 1000 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 50, max: 150 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n cheer: {\n latest: { name: types.name, amount: { type: 'int', min: 200, max: 800 }, message: types.message },\n 'session-top-donation': { name: types.name, amount: { type: 'int', min: 200, max: 1000 } },\n 'weekly-top-donation': { name: types.name, amount: { type: 'int', min: 1000, max: 5000 } },\n 'monthly-top-donation': { name: types.name, amount: { type: 'int', min: 5000, max: 12000 } },\n 'alltime-top-donation': { name: types.name, amount: { type: 'int', min: 12000, max: 20000 } },\n 'session-top-donator': { name: types.name, amount: { type: 'int', min: 200, max: 1000 } },\n 'weekly-top-donator': { name: types.name, amount: { type: 'int', min: 1000, max: 5000 } },\n 'monthly-top-donator': { name: types.name, amount: { type: 'int', min: 5000, max: 12000 } },\n 'alltime-top-donator': { name: types.name, amount: { type: 'int', min: 12000, max: 20000 } },\n session: { amount: { type: 'int', min: 200, max: 1000 } },\n week: { amount: { type: 'int', min: 1000, max: 5000 } },\n month: { amount: { type: 'int', min: 5000, max: 12000 } },\n goal: { amount: { type: 'int', min: 12000, max: 18000 } },\n total: { amount: { type: 'int', min: 18000, max: 20000 } },\n count: { count: { type: 'int', min: 200, max: 1000 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 200, max: 800 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n cheerPurchase: {\n latest: { name: types.name, amount: { type: 'int', min: 200, max: 400 } },\n 'session-top-donation': { name: types.name, amount: { type: 'int', min: 200, max: 400 } },\n 'weekly-top-donation': { name: types.name, amount: { type: 'int', min: 400, max: 800 } },\n 'monthly-top-donation': { name: types.name, amount: { type: 'int', min: 800, max: 1500 } },\n 'alltime-top-donation': { name: types.name, amount: { type: 'int', min: 1500, max: 2000 } },\n 'session-top-donator': { name: types.name, amount: { type: 'int', min: 200, max: 400 } },\n 'weekly-top-donator': { name: types.name, amount: { type: 'int', min: 400, max: 800 } },\n 'monthly-top-donator': { name: types.name, amount: { type: 'int', min: 800, max: 1500 } },\n 'alltime-top-donator': { name: types.name, amount: { type: 'int', min: 1500, max: 2000 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 200, max: 400 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n superchat: {\n latest: { name: types.name, amount: { type: 'int', min: 100, max: 400 } },\n 'session-top-donation': { name: types.name, amount: { type: 'int', min: 100, max: 500 } },\n 'weekly-top-donation': { name: types.name, amount: { type: 'int', min: 500, max: 1000 } },\n 'monthly-top-donation': { name: types.name, amount: { type: 'int', min: 1000, max: 2000 } },\n 'alltime-top-donation': { name: types.name, amount: { type: 'int', min: 2000, max: 2500 } },\n 'session-top-donator': { name: types.name, amount: { type: 'int', min: 100, max: 500 } },\n 'weekly-top-donator': { name: types.name, amount: { type: 'int', min: 500, max: 1000 } },\n 'monthly-top-donator': { name: types.name, amount: { type: 'int', min: 1000, max: 2000 } },\n 'alltime-top-donator': { name: types.name, amount: { type: 'int', min: 2000, max: 2500 } },\n session: { amount: { type: 'int', min: 100, max: 500 } },\n week: { amount: { type: 'int', min: 500, max: 1000 } },\n month: { amount: { type: 'int', min: 1000, max: 2000 } },\n goal: { amount: { type: 'int', min: 2000, max: 2300 } },\n total: { amount: { type: 'int', min: 2300, max: 2500 } },\n count: { count: { type: 'int', min: 100, max: 500 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 100, max: 400 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n hypetrain: {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n active: { type: 'int', min: 0, max: 1 },\n level: { type: 'int', min: 5, max: 10 },\n levelChanged: { type: 'int', min: 0, max: 5 },\n _type: { type: 'array', options: ['follower', 'subscriber', 'cheer', 'donation'] },\n },\n 'level-goal': { amount: { type: 'int', min: 0, max: 100 } },\n 'level-progress': { amount: { type: 'int', min: 0, max: 100 }, percent: { type: 'int', min: 0, max: 100 } },\n total: { amount: { type: 'int', min: 0, max: 100 } },\n 'latest-top-contributors': { type: 'recent', amount: 25, value: { name: types.name } },\n },\n 'channel-points': {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n message: types.message,\n redemption: { type: 'array', options: ['Reward 1', 'Reward 2', 'Reward 3'] },\n },\n },\n tip: {\n latest: { name: types.name, amount: { type: 'int', min: 100, max: 400 } },\n 'session-top-donation': { name: types.name, amount: { type: 'int', min: 100, max: 500 } },\n 'weekly-top-donation': { name: types.name, amount: { type: 'int', min: 500, max: 1000 } },\n 'monthly-top-donation': { name: types.name, amount: { type: 'int', min: 1000, max: 2000 } },\n 'alltime-top-donation': { name: types.name, amount: { type: 'int', min: 2000, max: 2500 } },\n 'session-top-donator': { name: types.name, amount: { type: 'int', min: 100, max: 500 } },\n 'weekly-top-donator': { name: types.name, amount: { type: 'int', min: 500, max: 1000 } },\n 'monthly-top-donator': { name: types.name, amount: { type: 'int', min: 1000, max: 2000 } },\n 'alltime-top-donator': { name: types.name, amount: { type: 'int', min: 2000, max: 2500 } },\n session: { amount: { type: 'int', min: 100, max: 500 } },\n week: { amount: { type: 'int', min: 500, max: 1000 } },\n month: { amount: { type: 'int', min: 1000, max: 2000 } },\n goal: { amount: { type: 'int', min: 2000, max: 2300 } },\n total: { amount: { type: 'int', min: 2300, max: 2500 } },\n count: { count: { type: 'int', min: 100, max: 500 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 100, max: 400 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n merch: {\n latest: { name: types.name, amount: { type: 'int', min: 0, max: 100 }, items: types.item },\n 'goal-orders': { amount: { type: 'int', min: 0, max: 100 } },\n 'goal-items': { amount: { type: 'int', min: 0, max: 100 } },\n 'goal-total': { amount: { type: 'int', min: 0, max: 100 } },\n recent: { type: 'recent', amount: 25, value: { name: types.name } },\n },\n purchase: {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n items: types.item,\n avatar: types.avatar,\n message: types.message,\n },\n },\n };\n },\n\n async get(): Promise<Session> {\n const available = this.available();\n\n const generate = (available: Session$AvailableData | Session$AvailableCategory | Session$AnyConfig): any => {\n const generateRecentData = (config: Session$AnyConfig): Array<any> => {\n if (!config || !('amount' in config)) return [];\n\n const items: Array<{ createdAt: string }> = [];\n\n for (let i = 0; i < config.amount; i++) {\n items.push(generate(config.value));\n }\n\n return items.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n };\n\n const generateObjectData = (config: Record<string, any>): Record<string, any> => {\n const result: Record<string, any> = {};\n\n for (const key in config) {\n const processedKey = key.replace('_type', 'type');\n\n result[processedKey] = generate(config[key]);\n }\n\n return result;\n };\n\n const processTypedConfig = (config: Session$AnyConfig): any => {\n if (!config) return config;\n\n switch (config.type) {\n case 'int':\n return Simulation.rand.number(config.min, config.max);\n case 'string':\n return Simulation.rand.array(config.options)[0];\n case 'date':\n return Simulation.rand.date(config.range);\n case 'array':\n return Simulation.rand.array(config.options)[0];\n case 'recent':\n return generateRecentData(config);\n default:\n return config;\n }\n };\n\n // Main generation logic\n\n // Handle primitive values (non-objects)\n if (typeof available !== 'object' || available === null) {\n return available;\n }\n\n // Handle typed configurations (objects with a 'type' property)\n if ('type' in available && typeof available.type === 'string') {\n return processTypedConfig(available);\n }\n\n // Handle generic objects - recursively process each property\n return generateObjectData(available);\n };\n\n var session: Session = Object.entries(generate(available)).reduce(\n (acc, [key, value]) => {\n Object.entries(value as any).forEach(\n ([subKey, subValue]) =>\n //\n (acc[`${key}-${subKey}`] = subValue),\n );\n\n return acc;\n },\n {} as Record<string, any>,\n ) as Session;\n\n return session;\n },\n },\n event: {\n /**\n * Simulates the onWidgetLoad event for a widget.\n * @param fields - The field values to be included in the event.\n * @param session - The session data to be included in the event.\n * @param currency - The currency to be used (default is 'USD').\n * @returns A Promise that resolves to the simulated onWidgetLoad event data.\n */\n async onWidgetLoad(fields: Record<string, StreamElementsFieldValue>, session: Session, currency: 'BRL' | 'USD' | 'EUR' = 'USD'): Promise<onWidgetLoad> {\n const currencies = {\n BRL: { code: 'BRL', name: 'Brazilian Real', symbol: 'R$' },\n USD: { code: 'USD', name: 'US Dollar', symbol: '$' },\n EUR: { code: 'EUR', name: 'Euro', symbol: '€' },\n };\n\n return {\n channel: {\n username: 'local',\n apiToken: '',\n id: '',\n providerId: '',\n avatar: '',\n },\n currency: currencies[currency] ?? currencies.USD,\n fieldData: fields,\n recents: [],\n session: {\n data: session,\n settings: {\n autoReset: false,\n calendar: false,\n resetOnStart: false,\n },\n },\n overlay: {\n isEditorMode: true,\n muted: false,\n },\n emulated: true,\n };\n },\n /**\n * Simulates the onSessionUpdate event for a widget.\n * @param session - The session data to be included in the event.\n * @returns A Promise that resolves to the simulated onSessionUpdate event data.\n */\n async onSessionUpdate(session?: Session): Promise<onSessionUpdate> {\n session ??= await Simulation.generate.session.get();\n\n return { session };\n },\n /**\n * Simulates the onEventReceived event for a widget.\n * @param provider - The provider of the event (default is 'random').\n * @param type - The type of event to simulate (default is 'random').\n * @param options - Additional options to customize the event data.\n * @returns A Promise that resolves to the simulated onEventReceived event data, or null if the event type is not supported.\n * @example\n * ```javascript\n * // Simulate a random event\n * const randomEvent = await Simulation.generate.event.onEventReceived();\n *\n * // Simulate a Twitch message event with custom options\n * const twitchMessageEvent = await Simulation.generate.event.onEventReceived('twitch', 'message', { name: 'Streamer', message: 'Hello World!' });\n * ```\n */\n async onEventReceived(\n provider: Provider | 'random' = 'random',\n type: onEventReceived['listener'] | 'random' | 'tip' | 'cheer' | 'follower' | 'raid' | 'subscriber' = 'random',\n options: Record<string, string | number | boolean> = {},\n ): Promise<onEventReceived | null> {\n const available: Record<Provider, string[]> = {\n twitch: ['message', 'follower-latest', 'cheer-latest', 'raid-latest', 'subscriber-latest'],\n streamelements: ['tip-latest'],\n youtube: ['message', 'superchat-latest', 'subscriber-latest', 'sponsor-latest'],\n kick: [],\n facebook: [],\n };\n\n switch (provider) {\n default:\n case 'random': {\n var randomProvider = Simulation.rand.array(Object.keys(available).filter((e) => available[e as Provider].length))[0] as Provider;\n var randomEvent = Simulation.rand.array(available[randomProvider])[0] as onEventReceived['listener'];\n\n return this.onEventReceived(randomProvider, randomEvent);\n }\n\n case 'twitch': {\n switch (type as Twitch['listener'] | 'random' | 'cheer' | 'follower' | 'raid' | 'subscriber') {\n default:\n case 'random': {\n var randomEvent = Simulation.rand.array(available[provider])[0] as onEventReceived['listener'];\n\n return this.onEventReceived(provider, randomEvent);\n }\n case 'message': {\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n var message = (options?.message as string) ?? Simulation.rand.array(Simulation.data.messages.filter((e) => e.length))[0];\n\n var badges = await generateBadges((options?.badges as BadgeOptions) ?? [], provider);\n\n var emotes = findEmotesInText(message);\n var renderedText = replaceEmotesWithHTML(message, emotes);\n\n var color = (options?.color as string) ?? Simulation.rand.color('hex');\n var userId = (options?.userId as string) ?? Simulation.rand.number(10000000, 99999999).toString();\n var time = Date.now();\n\n const event: Twitch$Message = {\n listener: 'message',\n event: {\n service: provider,\n data: {\n time: time,\n tags: {\n 'badge-info': `${badges.keys.map((key) => `${key}/${Simulation.rand.number(1, 5)}`).join(',')}`,\n 'badges': badges.keys.join('/1,'),\n\n 'mod': badges.keys.includes('moderator') ? '1' : '0',\n 'subscriber': badges.keys.includes('subscriber') ? '1' : '0',\n 'turbo': badges.keys.includes('turbo') ? '1' : '0',\n\n 'tmi-sent-ts': time.toString(),\n\n 'user-id': userId,\n 'user-type': '',\n\n 'color': color,\n 'display-name': name,\n 'emotes': '',\n\n 'client-nonce': Simulation.rand.string(16),\n 'flags': '',\n 'id': Simulation.rand.uuid(),\n 'first-msg': '0',\n 'returning-chatter': '0',\n },\n nick: name.toLowerCase(),\n displayName: name,\n displayColor: color,\n channel: 'local',\n text: message,\n isAction: false,\n userId: userId,\n msgId: Simulation.rand.uuid(),\n badges: badges.badges,\n emotes: emotes,\n },\n renderedText: renderedText,\n },\n };\n\n return event;\n }\n case 'cheer':\n case 'cheer-latest': {\n var amount = (options?.amount as number) ?? Simulation.rand.number(100, 10000);\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n var message = (options?.message as string) ?? Simulation.rand.array(Simulation.data.messages.filter((e) => e.length))[0];\n\n const event: Twitch$Cheer = {\n listener: 'cheer-latest',\n event: {\n amount,\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n message: message,\n providerId: '',\n _id: Simulation.rand.uuid(),\n sessionTop: false,\n type: 'cheer',\n originalEventName: 'cheer-latest',\n },\n };\n\n return event;\n }\n case 'follower':\n case 'follower-latest': {\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n\n const event: Twitch$Follower = {\n listener: 'follower-latest',\n event: {\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n _id: Simulation.rand.uuid(),\n sessionTop: false,\n type: 'follower',\n originalEventName: 'follower-latest',\n },\n };\n\n return event;\n }\n case 'raid':\n case 'raid-latest': {\n var amount = (options?.amount as number) ?? Simulation.rand.number(1, 100);\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n\n const event: Twitch$Raid = {\n listener: 'raid-latest',\n event: {\n amount,\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n _id: Simulation.rand.uuid(),\n sessionTop: false,\n type: 'raid',\n originalEventName: 'raid-latest',\n },\n };\n\n return event;\n }\n case 'subscriber':\n case 'subscriber-latest': {\n var tier = (options?.tier as string) ?? Simulation.rand.array(['1000', '2000', '3000'])[0];\n var amount = (options?.amount as number) ?? Simulation.rand.number(1, 24);\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n var sender = (options?.sender as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length && e !== name))[0];\n var message = (options?.message as string) ?? Simulation.rand.array(Simulation.data.messages.filter((e) => e.length))[0];\n\n var addons = {\n default: {\n avatar,\n tier,\n playedAsCommunityGift: false,\n },\n gift: {\n sender,\n gifted: true,\n } as Subscriber$gift,\n community: {\n message,\n sender,\n bulkGifted: true,\n } as Subscriber$community,\n spam: {\n sender,\n gifted: true,\n isCommunityGift: true,\n } as Subscriber$spam,\n };\n\n var subTypes = ['default', 'gift', 'community', 'spam'];\n var subType = (options?.subType as string) ?? Simulation.rand.array(subTypes)[0];\n\n subType = subTypes.includes(subType) ? subType : 'default';\n\n const event: Twitch$Subscriber = {\n listener: 'subscriber-latest',\n event: {\n amount,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n\n ...addons.default,\n ...addons[subType as keyof typeof addons],\n\n _id: Simulation.rand.uuid(),\n sessionTop: false,\n type: 'subscriber',\n originalEventName: 'subscriber-latest',\n },\n };\n\n return event;\n }\n case 'delete-message': {\n const event: Twitch$DeleteMessage = {\n listener: 'delete-message',\n event: {\n msgId: (options?.id as string) ?? Simulation.rand.uuid(),\n },\n };\n\n return event;\n }\n case 'delete-messages': {\n const event: Twitch$DeleteMessages = {\n listener: 'delete-messages',\n event: {\n userId: (options?.id as string) ?? Simulation.rand.number(10000000, 99999999).toString(),\n },\n };\n\n return event;\n }\n }\n }\n\n case 'streamelements': {\n switch (type as StreamElements['listener'] | 'random' | 'tip' | 'mute' | 'unmute' | 'skip') {\n default:\n case 'random': {\n var randomEvent = Simulation.rand.array(available[provider])[0] as onEventReceived['listener'];\n\n return this.onEventReceived(provider, randomEvent);\n }\n case 'tip':\n case 'tip-latest': {\n var amount = (options?.amount as number) ?? Simulation.rand.number(100, 4000);\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n\n const event: StreamElements$Tip = {\n listener: 'tip-latest',\n event: {\n amount,\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n _id: Simulation.rand.uuid(),\n sessionTop: false,\n type: 'tip',\n originalEventName: 'tip-latest',\n },\n };\n\n return event;\n }\n case 'kvstore:update': {\n const event: StreamElements$KVStore = {\n listener: 'kvstore:update',\n event: {\n data: {\n key: `customWidget.${(options?.key as string) ?? 'sampleKey'}`,\n value: (options?.value as string) ?? 'sampleValue',\n },\n },\n };\n\n return event;\n }\n case 'bot:counter': {\n const event: StreamElements$BotCounter = {\n listener: 'bot:counter',\n event: {\n counter: (options?.counter as string) ?? 'sampleCounter',\n value: (options?.value as number) ?? Simulation.rand.number(0, 100),\n },\n };\n\n return event;\n }\n case 'mute':\n case 'unmute':\n case 'alertService:toggleSound': {\n var muted = (options?.muted as boolean) ?? !client.details.overlay.muted;\n\n const event: StreamElements$AlertService = {\n listener: 'alertService:toggleSound',\n event: { muted },\n };\n\n return event;\n }\n case 'skip':\n case 'event:skip': {\n const event: StreamElements$EventSkip = {\n listener: 'event:skip',\n event: {},\n };\n\n return event;\n }\n }\n }\n\n case 'youtube': {\n switch (type as Youtube['listener'] | 'random' | 'message' | 'superchat' | 'subscriber' | 'sponsor') {\n default:\n case 'random': {\n var randomEvent = Simulation.rand.array(available[provider])[0] as onEventReceived['listener'];\n\n return this.onEventReceived(provider, randomEvent);\n }\n case 'message': {\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n var message = (options?.message as string) ?? Simulation.rand.array(Simulation.data.messages.filter((e) => e.length))[0];\n\n const badges = await generateBadges((options?.badges as BadgeOptions) ?? [], provider);\n\n var emotes = findEmotesInText(message);\n var renderedText = replaceEmotesWithHTML(message, emotes);\n\n var color = (options?.color as string) ?? Simulation.rand.color('hex');\n var userId = (options?.userId as string) ?? Simulation.rand.number(10000000, 99999999).toString();\n var time = Date.now();\n\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n\n const event: Youtube$Message = {\n listener: 'message',\n event: {\n service: 'youtube',\n data: {\n kind: '',\n etag: '',\n id: '',\n snippet: {\n type: '',\n liveChatId: '',\n authorChannelId: 'local',\n publishedAt: new Date().toISOString(),\n hasDisplayContent: true,\n displayMessage: message,\n textMessageDetails: {\n messageText: message,\n },\n },\n authorDetails: {\n channelId: 'local',\n channelUrl: '',\n displayName: name,\n profileImageUrl: avatar,\n ...badges,\n },\n msgId: Simulation.rand.uuid(),\n userId: Simulation.rand.uuid(),\n nick: name.toLowerCase(),\n badges: [],\n displayName: name,\n isAction: false,\n time: Date.now(),\n tags: [],\n displayColor: Simulation.rand.color('hex'),\n channel: 'local',\n text: message,\n avatar: avatar,\n emotes: [],\n },\n renderedText: message,\n },\n };\n\n return event;\n }\n case 'subscriber':\n case 'subscriber-latest': {\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n\n const event: YouTube$Subscriber = {\n listener: 'subscriber-latest',\n event: {\n avatar,\n displayName: name,\n name: name.toLowerCase(),\n providerId: '',\n _id: Simulation.rand.uuid(),\n sessionTop: false,\n type: 'subscriber',\n originalEventName: 'subscriber-latest',\n },\n };\n\n return event;\n }\n case 'superchat':\n case 'superchat-latest': {\n var amount = (options?.amount as number) ?? Simulation.rand.number(100, 4000);\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n\n const event: YouTube$Superchat = {\n listener: 'superchat-latest',\n event: {\n amount,\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n _id: Simulation.rand.uuid(),\n sessionTop: false,\n type: 'superchat',\n originalEventName: 'superchat-latest',\n },\n };\n\n return event;\n }\n case 'sponsor':\n case 'sponsor-latest': {\n var tier = (options?.tier as string) ?? Simulation.rand.array(['1000', '2000', '3000'])[0];\n var amount = (options?.amount as number) ?? Simulation.rand.number(1, 24);\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n var sender = (options?.sender as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length && e !== name))[0];\n var message = (options?.message as string) ?? Simulation.rand.array(Simulation.data.messages.filter((e) => e.length))[0];\n\n var addons = {\n default: {\n avatar,\n tier,\n playedAsCommunityGift: false,\n },\n gift: {\n sender,\n gifted: true,\n } as Sponsor$gift,\n community: {\n message,\n sender,\n bulkGifted: true,\n } as Sponsor$community,\n spam: {\n sender,\n gifted: true,\n isCommunityGift: true,\n } as Sponsor$spam,\n };\n\n var subTypes = ['default', 'gift', 'community', 'spam'];\n var subType = (options?.subType as string) ?? Simulation.rand.array(subTypes)[0];\n\n subType = subTypes.includes(subType) ? subType : 'default';\n\n const event: Youtube$Sponsor = {\n listener: 'sponsor-latest',\n event: {\n amount,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n\n ...addons.default,\n ...addons[subType as keyof typeof addons],\n\n _id: Simulation.rand.uuid(),\n sessionTop: false,\n type: 'sponsor',\n originalEventName: 'sponsor-latest',\n },\n };\n\n return event;\n }\n }\n }\n }\n },\n },\n };\n\n static fields(settings: FieldSettings): Record<string, StreamElementsField> {\n const defaultOptions: NormalizedFieldSettings = {\n from: 'main',\n endsWith: [],\n ignore: [],\n replace: {},\n subgroup: false,\n template: '• {key}',\n subgroupTemplate: '★ {key}',\n settings: {\n types: [\n [['size', 'width', 'number', 'gap', 'duration'], 'number'],\n [['options', 'dropdown', 'weight'], 'dropdown'],\n [['range', 'radius'], 'slider'],\n [['color', 'background'], 'colorpicker'],\n [['font-family', 'font', 'family'], 'googleFont'],\n ],\n addons: [\n [['slider', 'radius'], { step: 1, min: 0, max: 'inherit' }],\n [['options', 'dropdown'], { options: {} }],\n [\n ['weight'],\n {\n options: {\n '100': 'Thin',\n '200': 'Extra Light',\n '300': 'Light',\n '400': 'Regular',\n '500': 'Medium',\n '600': 'Semi Bold',\n '700': 'Bold',\n '800': 'Extra Bold',\n '900': 'Black',\n },\n },\n ],\n ],\n transforms: [\n [['size', 'width', 'number', 'gap', 'duration'], (value) => parseFloat(String(value))],\n [['font-family', 'font', 'family'], (value) => value],\n [['range', 'radius'], (value) => parseFloat(String(value))],\n [['options', 'dropdown'], (value) => value],\n [['weight'], (value) => value],\n [['color', 'background'], (value) => value],\n ],\n labels: [\n [['font-size'], ' • In pixels'],\n [['font-radius'], ' • In pixels'],\n ],\n },\n };\n\n function normalizeFieldSettings(settings: FieldSettings): NormalizedFieldSettings {\n return {\n ...defaultOptions,\n ...settings,\n endsWith: Array.isArray(settings.endsWith) ? settings.endsWith : defaultOptions.endsWith,\n ignore: Array.isArray(settings.ignore) ? settings.ignore : defaultOptions.ignore,\n replace: { ...defaultOptions.replace, ...(settings.replace ?? {}) },\n settings: {\n types: Array.isArray(settings.settings?.types) ? settings.settings.types : defaultOptions.settings.types,\n addons: Array.isArray(settings.settings?.addons) ? settings.settings.addons : defaultOptions.settings.addons,\n transforms: Array.isArray(settings.settings?.transforms) ? settings.settings.transforms : defaultOptions.settings.transforms,\n labels: Array.isArray(settings.settings?.labels) ? settings.settings.labels : defaultOptions.settings.labels,\n },\n subgroup: settings.subgroup ?? defaultOptions.subgroup,\n template: settings.template ?? defaultOptions.template,\n subgroupTemplate: settings.subgroupTemplate ?? defaultOptions.subgroupTemplate,\n from: settings.from ?? defaultOptions.from,\n };\n }\n\n const options = normalizeFieldSettings(settings);\n\n const extractCssVariables = (): Record<string, string> => {\n return Array.from(document.styleSheets)\n .filter(({ href }) => !href || href.startsWith(window.location.origin))\n .reduce(\n (acc, { cssRules }) => {\n if (!cssRules) return acc;\n Array.from(cssRules).forEach((rule) => {\n if (rule instanceof CSSStyleRule && rule.selectorText === options.from && Array.from(rule.style).some((prop) => prop.startsWith('--'))) {\n Array.from(rule.style)\n .filter((prop) => prop.startsWith('--'))\n .forEach((prop) => {\n acc[prop] = rule.style.getPropertyValue(prop).trim();\n });\n }\n });\n return acc;\n },\n {} as Record<string, string>,\n );\n };\n\n const allVariables = extractCssVariables();\n\n const filteredVariables = Object.entries(allVariables)\n .filter(([name]) => options.endsWith.some((suffix) => name.toLowerCase().endsWith(suffix.toLowerCase()) && !name.includes('-options-')))\n .filter(([name]) => !options.ignore.some((ignoreName) => name.toLowerCase() === ignoreName.toLowerCase()))\n .reduce(\n (acc, [name, value]) => {\n acc[name.replace('--', '')] = String(options.replace?.[name] ?? value);\n return acc;\n },\n {} as Record<string, string | number>,\n );\n\n let usedSubgroups: string[] = [];\n\n const fields = Object.entries(filteredVariables).reduce(\n (fields, [name, value]) => {\n let type = options.settings.types.find(([names]) => names.some((n) => name.toLowerCase().includes(n)))?.[1] || 'text';\n\n let transform = options.settings.transforms.find(([names]) => names.some((n) => name.toLowerCase().includes(n)))?.[1] || ((v: any) => v);\n\n let labelAddon = options.settings.labels.find(([names]) => names.some((n) => name.toLowerCase().includes(n)))?.[1] || '';\n\n let fieldAddons: Record<string, any> = {\n type: 'text',\n label: labelAddon,\n ...(options.settings.addons.find(([names]) => names.some((n) => name.toLowerCase().includes(n)))?.[1] || {}),\n };\n\n (['min', 'max', 'step', 'label', 'type'] as const).forEach((addonKey) => {\n const addonValue = allVariables[`--${name}-${addonKey}`];\n if (addonValue && addonValue.length) {\n fieldAddons[addonKey] = isNaN(parseFloat(addonValue)) ? String(addonValue).replace(/^['\"]|['\"]$/g, '') : String(parseFloat(addonValue));\n }\n });\n\n let subgroupKey = name\n .replace(/-(size|color|weight|width|height|gap|duration|radius|amount)$/g, '')\n .replace(/-([a-z])/g, (_, c) => c.toUpperCase())\n .replace(/[A-Z]/g, ' $&')\n .toLowerCase()\n .trim();\n\n let matchingSubgroupVars = Object.keys(filteredVariables).filter((key) =>\n key.startsWith(subgroupKey.replace(/[A-Z]/g, '-$&').replaceAll(' ', '-').toLowerCase().slice(1)),\n );\n\n if (\n options.subgroup &&\n !fields[`${subgroupKey.replace(/[A-Z]/g, '-$&').replaceAll(' ', '-').toLowerCase().slice(1)}-subgroup`] &&\n matchingSubgroupVars.length > 1 &&\n !usedSubgroups.includes(name)\n ) {\n usedSubgroups.push(...matchingSubgroupVars);\n\n fields[`${subgroupKey.replace(/[A-Z]/g, '-$&').replaceAll(' ', '-').toLowerCase().slice(1)}-subgroup`] = {\n type: 'hidden',\n label: options.subgroupTemplate.replaceAll('{key}', Simulation.string.capitalize(subgroupKey)),\n };\n }\n\n let label = Simulation.string.capitalize(\n name\n .replace(/-([a-z])/g, (_, c) => c.toUpperCase())\n .replace(/[A-Z]/g, ' $&')\n .toLowerCase(),\n );\n\n value = transform(value) ?? value;\n\n const getCustomOptions = () => {\n const values = Object.entries(allVariables)\n .filter(([key]) => key.startsWith(`--${name}-options-`))\n .reduce(\n (acc, [key, value]) => {\n const optionLabel = key.replace(`--${name}-options-`, '');\n if (optionLabel)\n acc[String(value)] = Simulation.string.capitalize(\n optionLabel\n .replace(/-([a-z])/g, (_, c) => c.toUpperCase())\n .replace(/[A-Z]/g, ' $&')\n .toLowerCase(),\n );\n return acc;\n },\n {} as Record<string, string>,\n );\n return Object.keys(values).length ? values : null;\n };\n\n const customOptions = getCustomOptions();\n\n if (customOptions) {\n type = 'dropdown';\n fieldAddons.options = customOptions;\n value = String(value);\n }\n\n Object.entries(fieldAddons).forEach(([key, val]) => {\n if ([false, 'inherit', 'auto', null].includes(val)) fieldAddons[key] = value;\n });\n\n fields[name] = {\n type: (fieldAddons.type as StreamElementsFieldTypes) || type,\n label: options.template.toString().replaceAll('{key}', Simulation.string.capitalize(label) + fieldAddons.label),\n value,\n min: fieldAddons.min,\n max: fieldAddons.max,\n step: fieldAddons.step,\n options: fieldAddons.options,\n };\n\n return fields;\n },\n {} as Record<string, StreamElementsField>,\n );\n\n const errors = Object.entries(fields).reduce(\n (acc, [name, field]) => {\n const hasInvalidLabel = field?.label?.includes('undefined');\n const isInvalidValue = !['hidden', 'button'].includes(field.type) && field.value === undefined;\n if (hasInvalidLabel || isInvalidValue) acc[name] = field;\n return acc;\n },\n {} as Record<string, StreamElementsField>,\n );\n\n if (Object.keys(errors).length) {\n Tixyel.logger.error('Simulation.fields: Detected errors in generated fields:', errors);\n\n throw new Error('Error while processing fields');\n }\n\n return fields;\n }\n\n static async start() {\n const localFiles = {\n fields: ['fields.json', 'cf.json', 'field.json', 'customfields.json'].find((file) => {\n try {\n new URL('./' + file, window.location.href);\n return true;\n } catch (error) {\n return false;\n }\n }),\n data: ['data.json', 'fielddata.json', 'fd.json', 'DATA.json'].find((file) => {\n try {\n new URL('./' + file, window.location.href);\n return true;\n } catch (error) {\n return false;\n }\n }),\n };\n\n const data: Record<string, string | number | boolean> = await fetch('./' + (localFiles.data ?? 'data.json'), {\n cache: 'no-store',\n })\n .then((res) => res.json())\n .catch(() => ({}));\n\n await fetch('./' + (localFiles.fields ?? 'fields.json'), {\n cache: 'no-store',\n })\n .then((res) => res.json())\n .then(async (customfields: Record<string, StreamElementsField>) => {\n const fields = Object.entries(customfields)\n .filter(([_, { value }]) => value != undefined)\n .reduce(\n (acc, [key, { value }]) => {\n if (data && data[key] !== undefined) value = data[key];\n\n acc[key] = value;\n\n return acc;\n },\n {\n ...data,\n } as Record<string, StreamElementsFieldValue>,\n );\n\n const load = await Simulation.generate.event.onWidgetLoad(fields, await Simulation.generate.session.get());\n\n window.dispatchEvent(new CustomEvent('onWidgetLoad', { detail: load }));\n });\n }\n\n static emulate = {\n twitch: {\n message(data: Record<string, string | number | boolean> = {}) {\n Simulation.generate.event.onEventReceived('twitch', 'message', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n follower(data: Record<string, string | number | boolean> = {}) {\n Simulation.generate.event.onEventReceived('twitch', 'follower-latest', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n raid(data: Record<string, string | number | boolean> = {}) {\n Simulation.generate.event.onEventReceived('twitch', 'raid-latest', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n cheer(data: Record<string, string | number | boolean> = {}) {\n Simulation.generate.event.onEventReceived('twitch', 'cheer-latest', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n subscriber(data: Record<string, string | number | boolean> & { subType?: 'default' | 'gift' | 'community' | 'spam' } = {}) {\n Simulation.generate.event.onEventReceived('twitch', 'subscriber-latest', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n },\n streamelements: {\n tip(data: Record<string, string | number | boolean> = {}) {\n Simulation.generate.event.onEventReceived('streamelements', 'tip-latest', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n },\n youtube: {\n message(data: Record<string, string | number | boolean> = {}) {\n Simulation.generate.event.onEventReceived('youtube', 'message', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n subscriber(data: Record<string, string | number | boolean> = {}) {\n Simulation.generate.event.onEventReceived('youtube', 'subscriber-latest', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n superchat(data: Record<string, string | number | boolean> = {}) {\n Simulation.generate.event.onEventReceived('youtube', 'superchat-latest', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n sponsor(data: Record<string, string | number | boolean> & { subType?: 'default' | 'gift' | 'community' | 'spam' } = {}) {\n Simulation.generate.event.onEventReceived('youtube', 'sponsor-latest', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n },\n kick: {},\n facebook: {},\n\n send<T extends 'onEventReceived' | 'onSessionUpdate' | 'onWidgetLoad'>(\n listener: T,\n event: T extends 'onEventReceived' ? onEventReceived : T extends 'onSessionUpdate' ? onSessionUpdate : onWidgetLoad,\n ): void {\n window.dispatchEvent(new CustomEvent(listener, { detail: event }));\n },\n };\n}\n","type LoggerThemeName = 'error' | 'success' | 'alert' | 'warn' | 'status' | 'received' | 'simple' | 'info';\n\ninterface LoggerTheme {\n name: LoggerThemeName;\n color?: string;\n background?: string;\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n fontSize?: number;\n template?: {\n before?: string;\n after?: string;\n };\n}\n\ntype LoggerLogFunction = (...args: any[]) => void;\n\ntype LoggerMethods = Record<LoggerThemeName, LoggerLogFunction>;\n\nexport class Logger implements LoggerMethods {\n private readonly themes: LoggerTheme[] = [\n {\n name: 'error',\n color: '#721c24',\n background: '#f8d7da',\n bold: true,\n italic: false,\n fontSize: 18,\n template: { before: ' ✖ ', after: ' ' },\n },\n {\n name: 'success',\n color: '#155724',\n background: '#d4edda',\n bold: true,\n italic: false,\n fontSize: 18,\n template: { before: ' ✔ ', after: ' ' },\n },\n {\n name: 'alert',\n color: '#856404',\n background: '#fff3cd',\n bold: true,\n italic: false,\n fontSize: 20,\n template: { before: ' ⚠ ', after: ' ' },\n },\n {\n name: 'warn',\n color: '#856404',\n background: '#fff3cd',\n bold: true,\n italic: false,\n fontSize: 20,\n template: { before: ' ⚠ ', after: ' ' },\n },\n {\n name: 'status',\n color: '#0c5460',\n background: '#d1ecf1',\n bold: true,\n italic: false,\n fontSize: 12,\n template: { before: ' · ', after: '' },\n },\n {\n name: 'received',\n color: '#E6BBFF',\n background: 'transparent',\n bold: false,\n italic: false,\n fontSize: 14,\n template: { before: ' ⬇ ', after: '' },\n },\n {\n name: 'simple',\n color: '#f5c6cb',\n background: 'transparent',\n bold: false,\n italic: false,\n fontSize: 14,\n template: { before: '', after: '' },\n },\n {\n name: 'info',\n color: '#f6c6cb',\n background: 'transparent',\n bold: false,\n italic: false,\n fontSize: 14,\n template: { before: ' ℹ ', after: '' },\n },\n ];\n\n error: LoggerLogFunction = () => {};\n success: LoggerLogFunction = () => {};\n alert: LoggerLogFunction = () => {};\n warn: LoggerLogFunction = () => {};\n status: LoggerLogFunction = () => {};\n received: LoggerLogFunction = () => {};\n simple: LoggerLogFunction = () => {};\n info: LoggerLogFunction = () => {};\n\n constructor() {\n this.themes.forEach((theme) => {\n const styles: string[] = [];\n\n if (theme.background && theme.background !== 'transparent') styles.push(`background-color: ${theme.background}`);\n if (theme.color) styles.push(`color: ${theme.color}`);\n if (theme.bold) styles.push('font-weight: bold');\n if (theme.italic) styles.push('font-style: italic');\n if (theme.underline) styles.push('text-decoration: underline');\n if (theme.fontSize) styles.push(`font-size: ${theme.fontSize}px`);\n\n const signal = '%c';\n\n const logFn: LoggerLogFunction = (...args: any[]) => {\n const textContent = Array.from(args).filter((arg) => typeof arg === 'string' || typeof arg === 'number');\n const objectContent = Array.from(args).filter((arg) => typeof arg !== 'string' && typeof arg !== 'number');\n const css = textContent.length > 0 ? styles.join('; ') : null;\n\n const log: any[] = [\n textContent.length > 0 ? signal + (theme.template?.before ?? '') + textContent.join(' ') + (theme.template?.after ?? '') : null,\n css,\n ...objectContent,\n ].filter(Boolean);\n\n return console.log(...log);\n };\n\n this[theme.name] = logFn;\n });\n }\n}\n","import { Client } from '../client/index.js';\nimport { Tixyel } from '../index.js';\n\ninterface ButtonOptions {\n field: string | ((field: string, value: string | boolean | number) => boolean);\n template?: string;\n run: (field: string, value: string | boolean | number) => void;\n}\n\nexport class Button {\n field: ButtonOptions['field'] = 'button';\n\n template: string = 'button';\n\n run!: ButtonOptions['run'];\n\n constructor(options: ButtonOptions) {\n if (!(window.client instanceof Client)) return;\n\n this.field = options.field ?? this.field;\n this.template = options.template ?? this.template;\n\n this.run = options.run;\n\n // Register the button in the client actions\n window.client.actions.buttons.push(this);\n\n window.client.emit('action', this, 'created');\n }\n\n parse(field: string, value: string | boolean | number): Button {\n var f = field.replace(typeof this.field === 'string' ? this.field : (this.template.replace(/\\{[^}]*\\}/g, '') ?? ''), '').trim();\n\n try {\n this.run.apply(window.client, [f.length ? f : (field ?? field), value]);\n } catch (error) {\n throw new Error(`Error running button \"${this.field}\": ${error instanceof Error ? error.message : error}`);\n }\n\n return this;\n }\n\n static execute(field: string, value: string | boolean | number): boolean {\n try {\n if (!(window.client instanceof Client)) return false;\n\n if (window.client.actions.buttons.length) {\n const button = window.client.actions.buttons.find((b) =>\n typeof b.field === 'string' ? b.field === field : typeof b.field === 'function' ? b.field(field, value) : false,\n );\n\n if (button && button instanceof Button) {\n try {\n button.parse(field, value);\n window.client.emit('action', button, 'executed');\n\n Tixyel.logger.received(`Button executed: ${field} with value: ${value}`);\n } catch (error) {\n Tixyel.logger.error(`Error executing button \"${field}\": ${error instanceof Error ? error.message : error}`);\n }\n\n return true;\n }\n }\n } catch (error) {\n return false;\n } finally {\n return false;\n }\n }\n}\n","import { Client } from '../client/index.js';\nimport { Tixyel } from '../index.js';\nimport { Twitch$Message } from '../types/streamelements/events/twitch/message.js';\nimport { Youtube$Message } from '../types/streamelements/events/youtube/message.js';\n\ninterface CommandOptions {\n prefix?: string;\n name: string;\n description?: string;\n arguments?: boolean;\n run: (this: Client, args: string[], event: CommandEvent) => void;\n test?: string;\n aliases?: string[];\n permissions?: string[];\n admins?: string[];\n}\n\ntype CommandEvent = { provider: 'twitch'; data: Twitch$Message } | { provider: 'youtube'; data: Youtube$Message } | { provider: 'kick'; data: any };\n\nexport class Command {\n prefix: string = '!';\n\n name!: string;\n description!: string;\n\n arguments: boolean = false;\n\n test: string = `${this.prefix}${this.name} arg1 arg2`;\n\n aliases: string[] = [];\n permissions?: string[] | boolean = undefined;\n admins: string[] = [];\n\n constructor(options: CommandOptions) {\n if (!(window.client instanceof Client)) return;\n\n this.prefix = options.prefix ?? this.prefix;\n this.name = options.name;\n this.description = options.description ?? this.description;\n this.arguments = options.arguments ?? this.arguments;\n\n this.run = options.run;\n\n this.test = options.test ?? this.test;\n this.aliases = options.aliases ?? this.aliases;\n this.permissions = options.permissions ?? this.permissions;\n this.admins = options.admins ?? this.admins;\n\n // Register the command in the client actions\n window.client.actions.commands.push(this);\n\n window.client.emit('action', this, 'created');\n }\n\n run(this: Client, args: string[], event: CommandEvent): void {}\n\n verify(nickname: string, roles: string[], args: string[]): boolean {\n if (this.arguments === true && (!args || !args.length)) {\n return false;\n }\n\n if (this.admins.some((a) => nickname.toLocaleLowerCase() === a.toLocaleLowerCase())) {\n return true;\n }\n\n if (this.permissions === true || typeof this.permissions === 'undefined' || (Array.isArray(this.permissions) && !this.permissions.length)) {\n return false;\n }\n\n if (Array.isArray(this.permissions) && this.permissions.some((p) => roles.map((r) => r.toLowerCase()).includes(p.toLowerCase()))) {\n return true;\n }\n\n return false;\n }\n\n parse(text: string, event: CommandEvent): boolean {\n if (!(window.client instanceof Client)) return false;\n\n const args = text\n .replace(this.prefix, '')\n .split(' ')\n .slice(1)\n .map((a) => a.trim());\n\n var nickname: string = '';\n var roles: string[] = [];\n\n const rAliases = { bits: 'cheer', premium: 'prime' };\n\n switch (event.provider) {\n case 'twitch': {\n const data = event.data;\n\n nickname = data.event.data.nick || data.event.data.displayName;\n\n if (data.event.data.tags?.badges) {\n const tags = data.event.data.tags.badges.toString().replace(/\\/\\d+/g, '').split(',');\n\n roles = tags.map((t) => (t in rAliases ? rAliases[t as keyof typeof rAliases] : t));\n }\n\n break;\n }\n case 'youtube': {\n const data = event.data;\n\n const rMap = {\n isVerified: 'verified',\n isChatOwner: 'owner',\n isChatSponsor: 'sponsor',\n isChatModerator: 'moderator',\n };\n\n nickname = data.event.data.nick || data.event.data.displayName;\n\n roles = Object.entries(data.event.data.authorDetails)\n .filter(([k, v]) => k.startsWith('is') && v)\n .map(([k]) => rMap[k as keyof typeof rMap])\n .filter(Boolean);\n\n break;\n }\n case 'kick': {\n return false;\n\n break;\n }\n }\n\n const verify = this.verify(nickname, roles, args);\n\n if (verify === true) {\n this.run.apply(window.client, [args, event]);\n }\n\n return verify;\n }\n\n static execute(received: CommandEvent): boolean {\n if (!(window.client instanceof Client)) return false;\n\n const data = received.data;\n\n try {\n if (window.client.actions.commands.length && window.client.actions.commands.some((c) => data.event.data.text.startsWith(c.prefix))) {\n const command = window.client.actions.commands.find((c) => data.event.data.text.replace(c.prefix, '').split(' ')[0] === c.name);\n\n if (command && command instanceof Command) {\n command.parse(data.event.data.text, received);\n\n window.client.emit('action', command, 'executed');\n\n Tixyel.logger.received(`Command executed: ${data.event.data.text} by ${data.event.data.nick || data.event.data.displayName}`, data);\n\n return true;\n }\n }\n } catch (error) {\n return false;\n } finally {\n return false;\n }\n }\n}\n","import { Client } from '../client/index.js';\nimport { Tixyel } from '../index.js';\nimport { EventProvider } from './EventProvider.js';\n\ntype QueueEvents<T> = {\n load: [];\n cancel: [];\n update: [queue: QueueItem<T>[], priorityQueue: QueueItem<T>[], history: QueueItem<T>[], timeouts: Array<ReturnType<typeof setTimeout>>];\n process: [item: QueueItem<T>, queue: useQueue<T>];\n};\n\ntype QueueProps = {\n isoDate: string;\n isLoop: boolean;\n isPriority: boolean;\n isImmediate: boolean;\n};\n\ntype QueueItem<T> = { value: T } & QueueProps;\n\ntype QueueProcessor<T> = (item: T, queue: useQueue<T>) => Promise<any>;\n\ntype QueueDuration = number | boolean | undefined;\n\ninterface QueueOptions<T> {\n /**\n * Duration between processing each item in milliseconds. Set to `0` or `false` for immediate processing.\n */\n duration: QueueDuration;\n /**\n * Function to process each item in the queue.\n */\n processor: QueueProcessor<T>;\n}\n\nexport class useQueue<T> extends EventProvider<QueueEvents<T>> {\n queue: QueueItem<T>[] = [];\n priorityQueue: QueueItem<T>[] = [];\n history: QueueItem<T>[] = [];\n\n private timeouts: Array<ReturnType<typeof setTimeout>> = [];\n\n public running: boolean = false;\n\n public duration: QueueDuration = undefined;\n\n private loaded: boolean = false;\n\n public processor!: QueueProcessor<T>;\n\n constructor(options: QueueOptions<T>) {\n if (!(window.client instanceof Client)) return;\n\n super();\n\n this.duration = options.duration;\n this.processor = options.processor;\n\n window.client.on('load', () => {\n this.emit('load');\n\n this.loaded = true;\n });\n }\n\n public enqueue(value: T, options: Partial<QueueProps> = {}): this {\n const item: QueueItem<T> = {\n isoDate: new Date().toISOString(),\n isLoop: options?.isLoop ?? false,\n isPriority: options?.isPriority ?? false,\n isImmediate: options?.isImmediate ?? false,\n value,\n };\n\n const hasItems = this.hasItems();\n\n if (item.isPriority && item.isImmediate) {\n this.cancel();\n this.priorityQueue.unshift(item);\n } else {\n const targetQueue = item.isPriority ? this.priorityQueue : this.queue;\n\n targetQueue.push(item);\n }\n\n // Always process immediately if it's not running\n if (this.running === false && hasItems === false) {\n this.run();\n }\n\n this.emit('update', this.queue, this.priorityQueue, this.history, this.timeouts);\n\n return this;\n }\n\n private async run() {\n if (!this.hasItems()) {\n this.running = false;\n return;\n }\n\n this.running = true;\n\n await this.next();\n\n if (typeof this.duration === 'number' && this.duration > 0) {\n this.timeouts.push(setTimeout(() => this.run(), this.duration));\n } else if (this.duration === 0 || (this.duration !== -1 && this.duration !== false)) {\n this.run();\n }\n }\n\n private async next() {\n const nextItem = this.priorityQueue.length > 0 ? this.priorityQueue.shift() : this.queue.shift();\n\n if (!nextItem) {\n this.running = false;\n\n return;\n }\n\n try {\n await this.processor.apply(this, [nextItem.value, this]);\n\n this.emit('process', nextItem, this);\n } catch (error) {\n Tixyel.logger.error(`Error during item processing: ${error instanceof Error ? error.message : String(error)}`);\n }\n\n this.history.push(nextItem);\n\n const targetQueue = nextItem.isPriority ? this.priorityQueue : this.queue;\n\n if (nextItem.isLoop) targetQueue.push(nextItem);\n }\n\n public resume() {\n if (this.running) {\n this.cancel();\n }\n\n if (this.hasItems()) this.run();\n\n return this;\n }\n\n public update(save: Partial<useQueue<T>>): this {\n this.queue = save.queue ?? this.queue;\n this.priorityQueue = save.priorityQueue ?? this.priorityQueue;\n this.history = save.history ?? this.history;\n\n if (this.hasItems() && this.running === false) {\n window.client?.on('load', () => this.run());\n }\n\n return this;\n }\n\n public cancel() {\n if (this.running) {\n this.timeouts.forEach((timeout) => clearTimeout(timeout));\n this.timeouts = [];\n this.running = false;\n\n this.emit('cancel');\n }\n }\n\n public hasItems(): boolean {\n return this.queue.length > 0 || this.priorityQueue.length > 0;\n }\n\n public override on<K extends keyof QueueEvents<T>>(eventName: K, callback: (this: useQueue<T>, ...args: QueueEvents<T>[K]) => void): this {\n if (eventName === 'load' && this.loaded) {\n callback.apply(this);\n\n return this;\n }\n\n super.on(eventName, callback);\n\n return this;\n }\n}\n","import { SE_API } from '../types/streamelements/index.js';\n\nconst LOCAL_SE_API: SE_API & { store: { list: Record<string, any> } } = {\n getOverlayStatus: () => {\n return {\n isEditorMode: false,\n muted: false,\n };\n },\n resumeQueue: () => {},\n responses: {} as Record<string, any>,\n sendMessage(message: string, data: object) {},\n counters: {\n get(key: string): number | null {\n return null;\n },\n },\n sanitize(message: string): string {\n return message;\n },\n cheerFilter(message: string): string {\n return message;\n },\n setField(key: string, value: string | number | boolean | undefined, reload: boolean) {},\n\n store: {\n set: function (name: string, obj: any) {\n this.list[name] = obj;\n\n localStorage.setItem('SE_API-STORE', JSON.stringify(LOCAL_SE_API.store.list));\n },\n get: async function (name: string) {\n if (this.list[name]) return this.list[name];\n else return null;\n },\n list: {} as Record<string, any>,\n },\n};\n\nexport function initializeLocalSEAPI() {\n let lastStore = localStorage.getItem('SE_API-STORE') ?? '';\n\n let result = lastStore ? JSON.parse(lastStore) : {};\n\n LOCAL_SE_API.store.list = result;\n\n return LOCAL_SE_API;\n}\n","import { Button } from '../actions/button.js';\nimport { Command } from '../actions/command.js';\nimport { Simulation } from '../simulation/index.js';\nimport { initializeLocalSEAPI } from '../streamelements/api.js';\nimport { ClientEvents, Provider } from '../types/client.js';\nimport { _storages } from '../utils/useStorage.js';\nimport { Client } from './index.js';\n\nwindow.addEventListener('load', () => {\n if (window.client instanceof Client) {\n Simulation.start();\n\n if (typeof SE_API === 'undefined' || !SE_API) {\n SE_API = initializeLocalSEAPI();\n }\n }\n});\n\nwindow.addEventListener('onWidgetLoad', async (data) => {\n const { detail } = data;\n\n if (window.client instanceof Client) {\n const client = window.client;\n\n client.fields = detail.fieldData;\n client.session = detail.session.data;\n\n client.details = {\n ...client.details,\n user: detail.channel,\n currency: detail.currency,\n overlay: detail.overlay,\n };\n\n if (detail.channel.id && !detail.emulated) {\n await fetch(`https://api.streamelements.com/kappa/v2/channels/${detail.channel.id}/`)\n .then((res) => res.json())\n .then((profile) => {\n if (profile.provider) {\n client.details.provider = profile.provider;\n\n return profile.provider;\n } else {\n client.details.provider = 'local';\n }\n })\n .catch(() => {\n client.details.provider = 'local';\n });\n } else {\n client.details.provider = 'local';\n }\n\n client.emit('load', detail);\n\n client.loaded = true;\n\n client.storage.on('load', () => {\n client.storage.add(`avatar.${detail.channel.providerId.toLowerCase()}`, {\n value: detail.channel.avatar,\n timestamp: Date.now(),\n expire: Date.now() + client.cache.avatar * 60 * 60 * 1000,\n });\n });\n }\n});\n\nwindow.addEventListener('onSessionUpdate', (data) => {\n const { detail } = data;\n\n if (window.client instanceof Client) {\n const client = window.client;\n\n client.session = detail.session;\n\n client.emit('session', detail.session);\n }\n});\n\nwindow.addEventListener('onEventReceived', ({ detail }) => {\n if (window.client instanceof Client) {\n var provider: Provider =\n // @ts-ignore\n detail.event?.provider || detail.event?.service || detail.event?.data?.provider || window.client.details.provider;\n\n const actAsStreamElements = ['kvstore:update', 'bot:counter', 'alertService:toggleSound', 'event:skip', 'tip-latest', 'event:test'];\n\n if (actAsStreamElements.some((l) => l === detail.listener)) provider = 'streamelements';\n\n const received = { provider: provider, data: detail } as ClientEvents;\n\n switch (received.provider) {\n case 'streamelements': {\n const data = received.data;\n\n switch (data.listener) {\n case 'tip-latest': {\n const event = data.event;\n break;\n }\n case 'event:skip': {\n const event = data.event;\n break;\n }\n case 'event:test': {\n switch (data.event.listener) {\n case 'widget-button': {\n const event = data.event;\n\n Button.execute(event.field, event.value);\n\n break;\n }\n case 'subscriber-latest': {\n const event = data.event;\n break;\n }\n\n // ... alot more\n }\n\n break;\n }\n case 'kvstore:update': {\n const event = data.event;\n\n if (_storages.length) {\n var storage = _storages.find((s) => s.id === event.data.key.replace('customWidget.', ''));\n\n if (storage) {\n storage.update(event.data.value);\n }\n }\n\n break;\n }\n case 'bot:counter': {\n const event = data.event;\n break;\n }\n case 'alertService:toggleSound': {\n const event = data.event;\n\n client.details.overlay.muted = Boolean(event.muted);\n\n break;\n }\n }\n\n break;\n }\n case 'twitch': {\n const data = received.data;\n\n switch (data.listener) {\n case 'delete-message': {\n const event = data.event;\n break;\n }\n case 'delete-messages': {\n const event = data.event;\n break;\n }\n case 'message': {\n const event = data.event;\n break;\n }\n case 'follower-latest': {\n const event = data.event;\n break;\n }\n case 'cheer-latest': {\n const event = data.event;\n break;\n }\n case 'subscriber-latest': {\n if (!data.event.gifted && !data.event.bulkGifted && !data.event.isCommunityGift) {\n // normal\n const event = data.event;\n } else if (data.event.gifted && !data.event.bulkGifted && !data.event.isCommunityGift) {\n // gift\n const event = data.event;\n } else if (data.event.gifted && !data.event.bulkGifted && data.event.isCommunityGift) {\n // community gift spam\n const event = data.event;\n } else if (!data.event.gifted && data.event.bulkGifted && !data.event.isCommunityGift) {\n // community gift\n const event = data.event;\n }\n\n break;\n }\n case 'raid-latest': {\n const event = data.event;\n break;\n }\n }\n\n break;\n }\n case 'youtube': {\n const data = received.data;\n\n switch (data.listener) {\n case 'message': {\n const event = data.event;\n\n Command.execute({ provider: 'youtube', data: data });\n\n break;\n }\n case 'subscriber-latest': {\n const event = data.event;\n\n break;\n }\n case 'sponsor-latest': {\n const event = data.event;\n\n if (!data.event.gifted && !data.event.bulkGifted && !data.event.isCommunityGift) {\n // normal\n const event = data.event;\n } else if (data.event.gifted && !data.event.bulkGifted && !data.event.isCommunityGift) {\n // gift\n const event = data.event;\n } else if (data.event.gifted && !data.event.bulkGifted && data.event.isCommunityGift) {\n // community gift spam\n const event = data.event;\n } else if (!data.event.gifted && data.event.bulkGifted && !data.event.isCommunityGift) {\n // community gift\n const event = data.event;\n }\n\n break;\n }\n case 'superchat-latest': {\n const event = data.event;\n\n break;\n }\n }\n\n break;\n }\n case 'kick': {\n const data = received.data;\n\n break;\n }\n case 'facebook': {\n const data = received.data;\n\n break;\n }\n }\n\n window.client.emit('event', received);\n }\n});\n","import { Client } from './client/index.js';\nimport { Simulation } from './simulation/index.js';\nimport { onEventReceivedEvent } from './types/streamelements/events/onEventReceived.js';\nimport { onSessionUpdateEvent } from './types/streamelements/events/onSessionUpdate.js';\nimport { onWidgetLoadEvent } from './types/streamelements/events/onWidgetLoad.js';\nimport { Logger } from './utils/Logger.js';\nimport { Button } from './actions/button.js';\nimport { Command } from './actions/command.js';\nimport { findEmotesInText, replaceEmotesWithHTML } from './utils/Message.js';\nimport { EventProvider } from './utils/EventProvider.js';\nimport { useStorage } from './utils/useStorage.js';\nimport { useQueue } from './utils/useQueue.js';\nimport type { SE_API } from './types/streamelements/index.js';\nimport './client/listener.js';\n\nexport * from './types/index.js';\n\nexport const Tixyel = {\n Client,\n Simulation,\n logger: new Logger(),\n utils: {\n findEmotesInText,\n replaceEmotesWithHTML,\n },\n modules: {\n Button,\n Command,\n EventProvider,\n useStorage,\n useQueue,\n },\n} as const;\n\ntype _Tixyel_ = typeof Tixyel;\n\ndeclare global {\n interface Window {\n Tixyel: _Tixyel_;\n client: Client;\n }\n\n interface WindowEventMap {\n onWidgetLoad: onWidgetLoadEvent;\n onSessionUpdate: onSessionUpdateEvent;\n onEventReceived: onEventReceivedEvent;\n }\n\n var Tixyel: _Tixyel_;\n var client: Client;\n var SE_API: SE_API;\n}\n\nif (typeof window !== 'undefined') {\n window.Tixyel = Tixyel;\n}\n"],"names":["EventProvider","eventName","args","listener","callback","listeners","fn","wrapper","_storages","useStorage","options","save","data","path","value","obj","keys","current","i","Client","Alejo$Pronouns","findEmotesInText","text","emotes","Simulation","result","emote","name","searchIndex","start","index","before","after","b","replaceEmotesWithHTML","imgUrl","generateBadges","badges","provider","e","max","_","badge","details","acc","key","avatars","messages","names","tts","items","tiers","_Simulation","settings","defaultOptions","normalizeFieldSettings","allVariables","href","cssRules","rule","prop","filteredVariables","suffix","ignoreName","usedSubgroups","fields","type","n","transform","fieldAddons","addonKey","addonValue","subgroupKey","c","matchingSubgroupVars","label","customOptions","values","optionLabel","val","errors","field","hasInvalidLabel","isInvalidValue","Tixyel","localFiles","file","res","customfields","load","opacity","color","hex","ohex","decimal","percentage","str","s","alpha","r","g","a","h","l","min","float","rand","threshold","length","chars","arr","rangeDays","past","string","pattern","promises","match","groups","promise","replacements","template","mergeSpanStyles","flatten","k","v","username","amount","REGEX","HTML_MODIFIERS","param","MODIFIERS","ALIASES","applyModifier","canonical","aliases","alias","use","replaceAll","fullMatch","modifier","newValue","parseModifiers","len","parseText","stopChar","out","parseModifier","paramStart","outerStyle","innerHTML","innerStyle","content","element","returnOnly","customParent","base","parent","parentRect","elementWidth","elementHeight","scaleX","scaleY","finalScale","minScaleX","minScaleY","minScale","htmlString","startIndex","doc","charIndex","processNode","node","char","span","clone","child","processed","childNode","body","prefix","itemPath","types","available","generate","generateRecentData","config","generateObjectData","processedKey","processTypedConfig","session","subKey","subValue","currency","currencies","randomProvider","randomEvent","message","renderedText","userId","time","avatar","tier","sender","addons","subTypes","subType","muted","event","Logger","theme","styles","signal","logFn","textContent","arg","objectContent","css","log","Button","f","error","button","Command","nickname","roles","p","rAliases","t","rMap","verify","received","command","useQueue","item","hasItems","nextItem","targetQueue","timeout","LOCAL_SE_API","reload","initializeLocalSEAPI","lastStore","detail","client","profile","storage"],"mappings":"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AAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;A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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/utils/EventProvider.ts","../src/utils/useStorage.ts","../src/client/index.ts","../src/types/alejo/pronouns.ts","../src/utils/Message.ts","../src/simulation/data/avatars.ts","../src/simulation/data/badges.ts","../src/simulation/data/emotes.ts","../src/simulation/data/messages.ts","../src/simulation/data/names.ts","../src/simulation/data/tts.ts","../src/simulation/data/items.ts","../src/simulation/data/tiers.ts","../src/simulation/index.ts","../src/utils/Logger.ts","../src/actions/button.ts","../src/actions/command.ts","../src/utils/useQueue.ts","../src/client/listener.ts","../src/streamelements/api.ts","../src/index.ts"],"sourcesContent":["/**\n * EventProvider class for managing event listeners and emitters.\n * This class allows you to register event listeners, emit events, and manage event subscriptions.\n * @example\n * ```typescript\n * interface TestEvents {\n * load: [{ type: 'load' }];\n * event: [{ type: 'event' }];\n * }\n *\n * class Test extends EventProvider<TestEvents> {}\n *\n * const test = new Test();\n * test.on('load', (data) => {})\n * test.once('event', (data) => {})\n * test.emit('load', { type: 'load' });\n * ```\n */\nexport class EventProvider<EventMap extends Record<string, any[]> = Record<string, any[]>> {\n /**\n * Stores registered event listeners.\n */\n private registeredEvents: { [K in keyof EventMap]?: Array<(this: this, ...args: EventMap[K]) => any> } = {};\n\n /**\n * Emits an event to all registered listeners.\n * Returns an array of return values from the listeners.\n * @param eventName The name of the event.\n * @param args Arguments to pass to the listeners.\n */\n emit<K extends keyof EventMap>(eventName: K, ...args: EventMap[K]): any[] {\n const listeners = this.registeredEvents[eventName] || [];\n\n return listeners.map((listener) => listener.apply(this, args));\n }\n\n /**\n * Registers an event listener.\n * @param eventName The name of the event.\n * @param callback The callback function.\n */\n on<K extends keyof EventMap>(eventName: K, callback: (this: this, ...args: EventMap[K]) => any): this {\n if (typeof callback !== 'function') {\n throw new TypeError('Callback must be a function');\n }\n\n if (!this.registeredEvents[eventName]) {\n this.registeredEvents[eventName] = [];\n }\n\n this.registeredEvents[eventName]!.push(callback);\n\n return this;\n }\n\n /**\n * Removes a specific event listener.\n * @param eventName The name of the event.\n * @param callback The callback function to remove.\n */\n off<K extends keyof EventMap>(eventName: K, callback?: (this: this, ...args: EventMap[K]) => any): this {\n const listeners = this.registeredEvents[eventName] || [];\n\n if (!callback) {\n this.registeredEvents[eventName] = [];\n\n return this;\n }\n\n this.registeredEvents[eventName] = listeners.filter((fn) => fn !== callback);\n\n return this;\n }\n\n /**\n * Registers a listener that is executed only once.\n * @param eventName The name of the event.\n * @param callback The callback function.\n */\n once<K extends keyof EventMap>(eventName: K, callback: (this: this, ...args: EventMap[K]) => any): this {\n const wrapper = (...args: EventMap[K]) => {\n this.off(eventName, wrapper);\n callback.apply(this, args);\n };\n\n this.on(eventName, wrapper);\n\n return this;\n }\n\n /**\n * Removes all listeners for a specific event.\n * @param eventName The name of the event.\n */\n removeAllListeners<K extends keyof EventMap>(eventName: K): this {\n this.registeredEvents[eventName] = [];\n\n return this;\n }\n}\n","import { USE_SE_API } from '../index.js';\nimport { SE_API } from '../types/streamelements/index.js';\nimport { EventProvider } from './EventProvider.js';\nimport { PathValue } from './index.js';\n\ntype UseStorageEvents<T> = {\n load: [T | null];\n update: [T];\n};\n\ntype UseStorageOptions<T> = {\n id?: string;\n data: T;\n};\n\nexport var _storages: Array<useStorage<any>> = [];\n\nexport class useStorage<T extends object = Record<string, any>> extends EventProvider<UseStorageEvents<T>> {\n /**\n * The unique identifier for the storage instance.\n */\n public id: string = 'default';\n\n public loaded: boolean = false;\n\n public data!: T;\n\n constructor(options: UseStorageOptions<T>) {\n super();\n\n this.id = options.id || this.id;\n this.data = options.data ?? ({} as T);\n\n _storages.push(this);\n\n this.start();\n }\n\n SE_API: SE_API | null = null;\n\n private start() {\n USE_SE_API?.then((se) => {\n this.SE_API = se;\n\n se!.store\n .get<T>(this.id)\n .then((save) => {\n this.data = save ?? this.data;\n\n this.loaded = true;\n\n this.emit('load', this.data);\n\n if (JSON.stringify(this.data) !== JSON.stringify(save)) {\n this.emit('update', this.data);\n }\n })\n .catch(() => {\n this.loaded = true;\n this.emit('load', null);\n });\n });\n\n // if (!USE_SE_API || !USE_SE_API.store) {\n // throw new Error('SE_API.store is not available');\n // }\n }\n\n /**\n * Saves the current data to storage.\n * @param data Data to save (defaults to current)\n */\n private save(data: T = this.data): void {\n if (this.loaded && this.SE_API) {\n this.data = data;\n\n this.SE_API.store.set<T>(this.id, this.data);\n\n this.emit('update', this.data);\n }\n }\n\n /**\n * Updates the storage data and emits an update event\n * @param data Data to update (defaults to current)\n */\n public update(data: T = this.data): void {\n if (this.loaded && JSON.stringify(this.data) !== JSON.stringify(data)) {\n this.data = { ...this.data, ...data };\n\n this.save(this.data);\n }\n }\n\n /**\n * Adds a value to the storage at the specified path.\n * @param path Path to add the value to\n * @param value Value to add\n */\n public add<P extends string>(path: P, value: PathValue<T, P>): void {\n if (!this.loaded) return;\n\n useStorage.setByPath(this.data, path, value);\n\n this.save(this.data);\n }\n\n /**\n * Clears all data from the storage.\n */\n public clear(): void {\n if (this.loaded) {\n this.data = {} as T;\n\n this.save(this.data);\n }\n }\n\n /**\n * Sets a value in the storage at the specified path.\n * @param obj The object to set the value in\n * @param path The path to set the value at\n * @param value The value to set\n * @returns The updated object\n */\n static setByPath<P extends string, T extends object>(obj: T, path: P, value: PathValue<T, P>): void {\n const keys = path.split('.');\n let current: any = obj;\n\n for (let i = 0; i < keys.length - 1; i++) {\n if (typeof current[keys[i]] !== 'object' || current[keys[i]] == null) {\n current[keys[i]] = {};\n }\n\n current = current[keys[i]];\n }\n\n current[keys[keys.length - 1]] = value;\n\n return current;\n }\n\n public override on<K extends keyof UseStorageEvents<T>>(eventName: K, callback: (this: useStorage<T>, ...args: UseStorageEvents<T>[K]) => void): this {\n if (eventName === 'load' && this.loaded) {\n callback.apply(this, [this.data]);\n\n return this;\n }\n\n super.on(eventName, callback);\n\n return this;\n }\n}\n","import { onWidgetLoad } from '../types/streamelements/events/onWidgetLoad.js';\nimport { Alejo$Pronouns$name } from '../types/alejo/pronouns.js';\nimport { EventProvider } from '../utils/EventProvider.js';\nimport { useStorage } from '../utils/useStorage.js';\nimport { Session } from '../types/streamelements/session.js';\nimport { ClientEvents as events, Provider } from '../types/client.js';\nimport { Command } from '../actions/command.js';\nimport { Button } from '../actions/button.js';\n\ntype ClientEvents = {\n load: [event: onWidgetLoad];\n action: [action: Button | Command, type: 'created' | 'executed'];\n session: [session: Session];\n event: [event: events];\n};\n\ntype ClientOptions = {\n id?: string;\n};\n\nexport type ClientStorageOptions<T> = {\n value: T;\n timestamp: number;\n expire: number;\n};\n\ntype ClientStorage = {\n user: Record<string, ClientStorageOptions<string>>;\n avatar: Record<string, ClientStorageOptions<string>>;\n pronoun: Record<string, ClientStorageOptions<Alejo$Pronouns$name>>;\n emote: Record<string, ClientStorageOptions<string>>;\n};\n\nexport class Client extends EventProvider<ClientEvents> {\n public id: string = 'default';\n\n public storage!: useStorage<ClientStorage>;\n\n public fields: onWidgetLoad['fieldData'] = {};\n\n public session!: Session;\n\n public loaded: boolean = false;\n\n constructor(options: ClientOptions) {\n super();\n\n this.id = options.id || this.id;\n\n this.storage = new useStorage({\n id: this.id,\n data: {\n user: {},\n avatar: {},\n pronoun: {},\n emote: {},\n },\n });\n\n window.client = this;\n }\n\n public actions: {\n commands: Command[];\n buttons: Button[];\n } = {\n commands: [],\n buttons: [],\n };\n\n public details!: {\n provider: Provider | 'local';\n user: onWidgetLoad['channel'];\n currency: onWidgetLoad['currency'];\n overlay: onWidgetLoad['overlay'];\n };\n\n public cache: { avatar: number; pronoun: number; emote: number } = {\n avatar: 30,\n pronoun: 30,\n emote: 30,\n };\n\n override on<K extends keyof ClientEvents>(eventName: K, callback: (this: Client, ...args: ClientEvents[K]) => void): this {\n if (eventName === 'load' && this.loaded) {\n callback.apply(this, [\n {\n channel: this.details.user,\n currency: this.details.currency,\n fieldData: this.fields,\n recents: [],\n session: {\n data: this.session,\n settings: {\n autoReset: false,\n calendar: false,\n resetOnStart: false,\n },\n },\n overlay: this.details.overlay,\n emulated: false,\n } as onWidgetLoad,\n ] as unknown as ClientEvents[K]);\n\n return this;\n }\n\n super.on(eventName, callback);\n\n return this;\n }\n}\n","export enum Alejo$Pronouns {\n hehim = 'He/Him',\n sheher = 'She/Her',\n theythem = 'They/Them',\n shethem = 'She/They',\n hethem = 'He/They',\n heshe = 'He/She',\n xexem = 'Xe/Xem',\n faefaer = 'Fae/Faer',\n vever = 'Ve/Ver',\n aeaer = 'Ae/Aer',\n ziehir = 'Zie/Hir',\n perper = 'Per/Per',\n eem = 'E/Em',\n itits = 'It/Its',\n}\n\nexport type Alejo$Pronouns$name =\n | 'hehim'\n | 'sheher'\n | 'theythem'\n | 'shethem'\n | 'hethem'\n | 'heshe'\n | 'xexem'\n | 'faefaer'\n | 'vever'\n | 'aeaer'\n | 'ziehir'\n | 'perper'\n | 'eem'\n | 'itits';\n\nexport type Alejo$Pronouns$display =\n | 'He/Him'\n | 'She/Her'\n | 'They/Them'\n | 'She/They'\n | 'He/They'\n | 'He/She'\n | 'Xe/Xem'\n | 'Fae/Faer'\n | 'Ve/Ver'\n | 'Ae/Aer'\n | 'Zie/Hir'\n | 'Per/Per'\n | 'E/Em'\n | 'It/Its';\n\nexport type Alejo$Pronouns$User = {\n id: string;\n login: string;\n pronouns: Alejo$Pronouns$name;\n};\n","import { Simulation } from '../simulation/index.js';\nimport { TwitchBadge, TwitchBadgesKeys } from '../types/badge.js';\nimport { Provider } from '../types/client.js';\nimport { BttvEmote, SeventvEmote, TwitchEmote } from '../types/emote.js';\n\ntype Emote = TwitchEmote | BttvEmote | SeventvEmote;\n\nexport function findEmotesInText(text: string, emotes: Emote[] = Simulation.data.emotes): Emote[] {\n const result: Emote[] = [];\n\n emotes.forEach((emote) => {\n const name = emote.name;\n\n let searchIndex = 0;\n let start = 0;\n\n while (searchIndex < text.length) {\n const index = text.indexOf(name, start);\n\n if (index === -1) break;\n\n const before = index > 0 ? text[index - 1] : ' ';\n const after = index + name.length < text.length ? text[index + name.length] : ' ';\n\n if (/\\s/.test(before) && /\\s/.test(after)) {\n result.push({ ...emote, start: index, end: index + name.length });\n }\n\n start = index + 1;\n }\n });\n\n return result.sort((a, b) => a.start - b.start);\n}\n\nexport function replaceEmotesWithHTML(text: string, emotes: Emote[]): string {\n if (!emotes.length) return text;\n\n let result = '';\n let index = 0;\n\n emotes.forEach((emote) => {\n result += text.substring(index, emote.start);\n\n const imgUrl = emote.urls['4'] || ((emote.urls as any)['3'] as string) || emote.urls['2'] || emote.urls['1'];\n\n result += `<img src=\"${imgUrl}\" alt=\"${emote.name}\" class=\"emote\" style=\"width: auto; height: 1em; vertical-align: middle;\" />`;\n\n index = emote.end;\n });\n\n result += text.substring(index);\n\n return result;\n}\n\ntype TwitchResult = {\n keys: TwitchBadgesKeys[];\n badges: TwitchBadge[];\n};\n\ntype YouTubeResult = {\n isVerified: boolean;\n isChatOwner: boolean;\n isChatSponsor: boolean;\n isChatModerator: boolean;\n};\n\nexport type BadgeOptions =\n | TwitchBadgesKeys[]\n | TwitchBadgesKeys\n | `${TwitchBadgesKeys}, ${TwitchBadgesKeys}`\n | `${TwitchBadgesKeys}, ${TwitchBadgesKeys}, ${TwitchBadgesKeys}`;\n\nexport async function generateBadges(badges: BadgeOptions, provider: 'youtube'): Promise<YouTubeResult>;\nexport async function generateBadges(badges: BadgeOptions, provider: 'twitch'): Promise<TwitchResult>;\nexport async function generateBadges(badges: BadgeOptions = [], provider: Provider = 'twitch'): Promise<TwitchResult | YouTubeResult> {\n if (!Array.isArray(badges) && typeof badges === 'string') {\n badges = badges.split(',').map((e) => e.trim()) as TwitchBadgesKeys[];\n }\n\n if (!badges || !badges.length) {\n var max = Simulation.rand.number(1, 3);\n\n for await (const _ of Array.from({ length: max }, () => '')) {\n var current = Simulation.rand.array(Object.keys(Simulation.data.badges))[0] as TwitchBadgesKeys;\n\n if (!badges.includes(current) && Array.isArray(badges)) {\n badges.push(current);\n } else {\n badges = [current];\n }\n }\n }\n\n var result;\n\n switch (provider) {\n case 'twitch': {\n result = {\n keys: Array.from(badges).filter((e) => e in Simulation.data.badges) as TwitchBadgesKeys[],\n badges: Array.from(badges)\n .slice(0, 3)\n .map((badge) => Simulation.data.badges[badge])\n .filter(Boolean) as TwitchBadge[],\n };\n\n break;\n }\n\n case 'youtube': {\n var details = {\n 'verified': { isVerified: false },\n 'broadcaster': { isChatOwner: false },\n 'host': { isChatOwner: false },\n 'sponsor': { isChatSponsor: false },\n 'subscriber': { isChatSponsor: false },\n 'moderator': { isChatModerator: false },\n };\n\n result = Object.entries(badges).reduce(\n (acc, [key]) => {\n if (key in details) {\n Object.assign(acc, details[key as keyof typeof details]);\n }\n\n return acc;\n },\n {\n isVerified: false,\n isChatOwner: false,\n isChatSponsor: false,\n isChatModerator: false,\n } as {\n isVerified: boolean;\n isChatOwner: boolean;\n isChatSponsor: boolean;\n isChatModerator: boolean;\n },\n );\n\n break;\n }\n }\n\n return result as TwitchResult | YouTubeResult;\n}\n","export const avatars = [\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/13e5fa74-defa-11e9-809c-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/dbdc9198-def8-11e9-8681-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/998f01ae-def8-11e9-b95c-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/de130ab0-def7-11e9-b668-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/ebe4cd89-b4f4-4cd9-adac-2f30151b4209-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/215b7342-def9-11e9-9a66-784f43822e80-profile_image-300x300.png',\n 'https://static-cdn.jtvnw.net/user-default-pictures-uv/ead5c8b2-a4c9-4724-b1dd-9f00b46cbd3d-profile_image-300x300.png',\n];\n","import { TwitchBadge, TwitchBadgesKeys } from '../../types/badge.js';\n\nexport const badges: Record<TwitchBadgesKeys, TwitchBadge> = {\n '100 bits': {\n type: '100 bits',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/09d93036-e7ce-431c-9a9e-7044297133f2/3',\n description: '100 bits badge',\n },\n 'no audio': {\n type: 'no audio',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/aef2cd08-f29b-45a1-8c12-d44d7fd5e6f0/3',\n description: 'Individuals with unreliable or no sound can select this badge',\n },\n 'no video': {\n type: 'no video',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/199a0dba-58f3-494e-a7fc-1fa0a1001fb8/3',\n description: 'Individuals with unreliable or no video can select this badge',\n },\n 'bot': {\n type: 'bot',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/df9095f6-a8a0-4cc2-bb33-d908c0adffb8/3',\n description: 'Twitch bot',\n },\n 'twitch staff': {\n type: 'twitch staff',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/d97c37bd-a6f5-4c38-8f57-4e4bef88af34/3',\n description: 'Twitch Staff',\n },\n 'admins': {\n type: 'admins',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/9ef7e029-4cdf-4d4d-a0d5-e2b3fb2583fe/3',\n description: 'Admins',\n },\n 'artist': {\n type: 'artist',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/4300a897-03dc-4e83-8c0e-c332fee7057f/3',\n description: 'Artist',\n },\n 'game developer': {\n type: 'game developer',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/85856a4a-eb7d-4e26-a43e-d204a977ade4/3',\n description: 'Game Developer',\n },\n 'prime': {\n type: 'prime',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/a1dd5073-19c3-4911-8cb4-c464a7bc1510/3',\n description: 'Prime',\n },\n 'turbo': {\n type: 'turbo',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/bd444ec6-8f34-4bf9-91f4-af1e3428d80f/3',\n description: 'Turbo',\n },\n 'subscriber': {\n type: 'subscriber',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/5d9f2208-5dd8-11e7-8513-2ff4adfae661/3',\n description: 'Subscriber',\n },\n 'broadcaster': {\n type: 'broadcaster',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/5527c58c-fb7d-422d-b71b-f309dcb85cc1/3',\n description: 'Broadcaster',\n },\n 'verified': {\n type: 'verified',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/d12a2e27-16f6-41d0-ab77-b780518f00a3/3',\n description: 'Verified',\n },\n 'moderator': {\n type: 'moderator',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/3267646d-33f0-4b17-b3df-f923a41db1d0/3',\n description: 'Moderator',\n },\n 'vip': {\n type: 'vip',\n version: '1',\n url: 'https://static-cdn.jtvnw.net/badges/v1/b817aba4-fad8-49e2-b88a-7cc744dfa6ec/3',\n description: 'VIP',\n },\n};\n","import { BttvEmote, SeventvEmote, TwitchEmote } from '../../types/emote.js';\n\nexport const emotes: Array<TwitchEmote | BttvEmote | SeventvEmote> = Object.values([\n {\n 'type': 'twitch',\n 'name': 'TheIlluminati',\n 'id': '145315',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/static/dark/3.0',\n },\n 'start': 0,\n 'end': 13,\n },\n {\n 'type': 'twitch',\n 'name': 'BrainSlug',\n 'id': '115233',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/115233/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/115233/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/115233/static/dark/3.0',\n },\n 'start': 14,\n 'end': 23,\n },\n {\n 'type': 'twitch',\n 'name': 'imGlitch',\n 'id': '112290',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/static/dark/3.0',\n },\n 'start': 24,\n 'end': 32,\n },\n {\n 'type': 'twitch',\n 'name': 'TakeNRG',\n 'id': '112292',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/112292/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/112292/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/112292/static/dark/3.0',\n },\n 'start': 33,\n 'end': 40,\n },\n {\n 'type': 'twitch',\n 'name': 'DxCat',\n 'id': '110734',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/110734/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/110734/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/110734/static/dark/3.0',\n },\n 'start': 41,\n 'end': 46,\n },\n {\n 'type': 'twitch',\n 'name': 'VoHiYo',\n 'id': '81274',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/81274/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/81274/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/81274/static/dark/3.0',\n },\n 'start': 47,\n 'end': 53,\n },\n {\n 'type': 'twitch',\n 'name': 'DoritosChip',\n 'id': '102242',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/static/dark/3.0',\n },\n 'start': 54,\n 'end': 65,\n },\n {\n 'type': 'twitch',\n 'name': 'KomodoHype',\n 'id': '81273',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/81273/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/81273/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/81273/static/dark/3.0',\n },\n 'start': 66,\n 'end': 76,\n },\n {\n 'type': 'twitch',\n 'name': 'duDudu',\n 'id': '62834',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/62834/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/62834/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/62834/static/dark/3.0',\n },\n 'start': 77,\n 'end': 83,\n },\n {\n 'type': 'twitch',\n 'name': 'CoolCat',\n 'id': '58127',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/58127/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/58127/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/58127/static/dark/3.0',\n },\n 'start': 84,\n 'end': 91,\n },\n {\n 'type': 'twitch',\n 'name': 'KappaPride',\n 'id': '55338',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/55338/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/55338/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/55338/static/dark/3.0',\n },\n 'start': 92,\n 'end': 102,\n },\n {\n 'type': 'twitch',\n 'name': 'BloodTrail',\n 'id': '69',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/69/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/69/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/69/static/dark/3.0',\n },\n 'start': 103,\n 'end': 113,\n },\n {\n 'type': 'twitch',\n 'name': 'PunchTrees',\n 'id': '47',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/47/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/47/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/47/static/dark/3.0',\n },\n 'start': 114,\n 'end': 124,\n },\n {\n 'type': 'twitch',\n 'name': 'SSSsss',\n 'id': '46',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/46/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/46/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/46/static/dark/3.0',\n },\n 'start': 125,\n 'end': 131,\n },\n {\n 'type': 'twitch',\n 'name': 'Kappa',\n 'id': '25',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/25/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/25/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/25/static/dark/3.0',\n },\n 'start': 132,\n 'end': 137,\n },\n {\n 'type': 'twitch',\n 'name': 'MrDestructoid',\n 'id': '28',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/28/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/28/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/28/static/dark/3.0',\n },\n 'start': 138,\n 'end': 151,\n },\n {\n 'type': 'twitch',\n 'name': '<3',\n 'id': '9',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/9/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/9/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/9/static/dark/3.0',\n },\n 'start': 152,\n 'end': 154,\n },\n {\n 'type': 'twitch',\n 'name': 'HSWP',\n 'id': '446979',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/446979/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/446979/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/446979/static/dark/3.0',\n },\n 'start': 155,\n 'end': 159,\n },\n {\n 'type': 'twitch',\n 'name': 'Shush',\n 'id': 'emotesv2_819621bcb8f44566a1bd8ea63d06c58f',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_819621bcb8f44566a1bd8ea63d06c58f/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_819621bcb8f44566a1bd8ea63d06c58f/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_819621bcb8f44566a1bd8ea63d06c58f/static/dark/3.0',\n },\n 'start': 160,\n 'end': 165,\n },\n {\n 'type': 'twitch',\n 'name': 'IronmouseLuv',\n 'id': 'emotesv2_54c53ae67ad746d2bc866b6fc779183c',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_54c53ae67ad746d2bc866b6fc779183c/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_54c53ae67ad746d2bc866b6fc779183c/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_54c53ae67ad746d2bc866b6fc779183c/static/dark/3.0',\n },\n 'start': 166,\n 'end': 178,\n },\n\n {\n 'type': 'twitch',\n 'name': 'KPOPTT',\n 'id': '304047269',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/304047269/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/304047269/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/304047269/default/dark/3.0',\n },\n 'start': 0,\n 'end': 5,\n },\n {\n 'type': 'twitch',\n 'name': 'FrogPonder',\n 'id': 'emotesv2_a3cdcbfcae9b41bb8215b012362eea35',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_a3cdcbfcae9b41bb8215b012362eea35/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_a3cdcbfcae9b41bb8215b012362eea35/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_a3cdcbfcae9b41bb8215b012362eea35/default/dark/3.0',\n },\n 'start': 7,\n 'end': 16,\n },\n {\n 'type': 'twitch',\n 'name': 'HypeCheer',\n 'id': 'emotesv2_dd4f4f9cea1a4039ad3390e20900abe4',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dd4f4f9cea1a4039ad3390e20900abe4/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dd4f4f9cea1a4039ad3390e20900abe4/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dd4f4f9cea1a4039ad3390e20900abe4/default/dark/3.0',\n },\n 'start': 18,\n 'end': 26,\n },\n {\n 'type': 'twitch',\n 'name': 'HypeFail',\n 'id': 'emotesv2_0330a84e75ad48c1821c1d29a7dadd4d',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_0330a84e75ad48c1821c1d29a7dadd4d/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_0330a84e75ad48c1821c1d29a7dadd4d/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_0330a84e75ad48c1821c1d29a7dadd4d/default/dark/3.0',\n },\n 'start': 28,\n 'end': 35,\n },\n {\n 'type': 'twitch',\n 'name': 'HypePopcorn',\n 'id': 'emotesv2_7b8e74be7bd64601a2608c2ff5f6eb7a',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_7b8e74be7bd64601a2608c2ff5f6eb7a/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_7b8e74be7bd64601a2608c2ff5f6eb7a/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_7b8e74be7bd64601a2608c2ff5f6eb7a/default/dark/3.0',\n },\n 'start': 37,\n 'end': 47,\n },\n {\n 'type': 'twitch',\n 'name': 'TransgenderPride',\n 'id': '307827377',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/static/dark/3.0',\n },\n 'start': 49,\n 'end': 65,\n },\n {\n 'type': 'twitch',\n 'name': 'PansexualPride',\n 'id': '307827370',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/static/dark/3.0',\n },\n 'start': 66,\n 'end': 80,\n },\n {\n 'type': 'twitch',\n 'name': 'NonbinaryPride',\n 'id': '307827356',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/static/dark/3.0',\n },\n 'start': 81,\n 'end': 95,\n },\n {\n 'type': 'twitch',\n 'name': 'LesbianPride',\n 'id': '307827340',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/static/dark/3.0',\n },\n 'start': 96,\n 'end': 108,\n },\n {\n 'type': 'twitch',\n 'name': 'IntersexPride',\n 'id': '307827332',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/static/dark/3.0',\n },\n 'start': 109,\n 'end': 122,\n },\n {\n 'type': 'twitch',\n 'name': 'GenderFluidPride',\n 'id': '307827326',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/static/dark/3.0',\n },\n 'start': 123,\n 'end': 139,\n },\n {\n 'type': 'twitch',\n 'name': 'GayPride',\n 'id': '307827321',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/static/dark/3.0',\n },\n 'start': 140,\n 'end': 148,\n },\n {\n 'type': 'twitch',\n 'name': 'BisexualPride',\n 'id': '307827313',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/static/dark/3.0',\n },\n 'start': 149,\n 'end': 162,\n },\n {\n 'type': 'twitch',\n 'name': 'AsexualPride',\n 'id': '307827267',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/static/dark/3.0',\n },\n 'start': 163,\n 'end': 175,\n },\n {\n 'type': 'twitch',\n 'name': 'PogChamp',\n 'id': '305954156',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/static/dark/3.0',\n },\n 'start': 176,\n 'end': 184,\n },\n {\n 'type': 'twitch',\n 'name': 'GlitchCat',\n 'id': '304486301',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/static/dark/3.0',\n },\n 'start': 185,\n 'end': 194,\n },\n {\n 'type': 'twitch',\n 'name': 'SoonerLater',\n 'id': '2113050',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/2113050/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/2113050/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/2113050/static/dark/3.0',\n },\n 'start': 195,\n 'end': 206,\n },\n {\n 'type': 'twitch',\n 'name': 'FBCatch',\n 'id': '1441281',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/1441281/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/1441281/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/1441281/static/dark/3.0',\n },\n 'start': 207,\n 'end': 214,\n },\n {\n 'type': 'twitch',\n 'name': 'FBBlock',\n 'id': '1441276',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/1441276/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/1441276/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/1441276/static/dark/3.0',\n },\n 'start': 215,\n 'end': 222,\n },\n {\n 'type': 'twitch',\n 'name': 'PixelBob',\n 'id': '1547903',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/1547903/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/1547903/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/1547903/static/dark/3.0',\n },\n 'start': 223,\n 'end': 231,\n },\n {\n 'type': 'twitch',\n 'name': 'LUL',\n 'id': '425618',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/static/dark/3.0',\n },\n 'start': 232,\n 'end': 235,\n },\n {\n 'type': 'twitch',\n 'name': 'DarkMode',\n 'id': '461298',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/static/dark/3.0',\n },\n 'start': 236,\n 'end': 244,\n },\n {\n 'type': 'twitch',\n 'name': 'PopCorn',\n 'id': '724216',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/724216/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/724216/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/724216/static/dark/3.0',\n },\n 'start': 245,\n 'end': 252,\n },\n {\n 'type': 'twitch',\n 'name': 'EarthDay',\n 'id': '959018',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/959018/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/959018/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/959018/static/dark/3.0',\n },\n 'start': 253,\n 'end': 261,\n },\n {\n 'type': 'twitch',\n 'name': 'TwitchUnity',\n 'id': '196892',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/196892/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/196892/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/196892/static/dark/3.0',\n },\n 'start': 262,\n 'end': 273,\n },\n {\n 'type': 'twitch',\n 'name': 'Squid4',\n 'id': '191767',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191767/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191767/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191767/static/dark/3.0',\n },\n 'start': 274,\n 'end': 280,\n },\n {\n 'type': 'twitch',\n 'name': 'Squid3',\n 'id': '191764',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191764/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191764/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191764/static/dark/3.0',\n },\n 'start': 281,\n 'end': 287,\n },\n {\n 'type': 'twitch',\n 'name': 'Squid2',\n 'id': '191763',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191763/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191763/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191763/static/dark/3.0',\n },\n 'start': 288,\n 'end': 294,\n },\n {\n 'type': 'twitch',\n 'name': 'Squid1',\n 'id': '191762',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191762/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191762/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191762/static/dark/3.0',\n },\n 'start': 295,\n 'end': 301,\n },\n {\n 'type': 'twitch',\n 'name': 'CrreamAwk',\n 'id': '191313',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/191313/static/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/191313/static/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/191313/static/dark/3.0',\n },\n 'start': 302,\n 'end': 311,\n },\n {\n 'type': 'twitch',\n 'name': 'DinoDance',\n 'id': 'emotesv2_dcd06b30a5c24f6eb871e8f5edbd44f7',\n 'gif': true,\n 'animated': true,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dcd06b30a5c24f6eb871e8f5edbd44f7/animated/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dcd06b30a5c24f6eb871e8f5edbd44f7/animated/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_dcd06b30a5c24f6eb871e8f5edbd44f7/animated/dark/3.0',\n },\n 'start': 46,\n 'end': 55,\n },\n {\n 'type': 'twitch',\n 'name': 'PopNemo',\n 'id': 'emotesv2_5d523adb8bbb4786821cd7091e47da21',\n 'gif': true,\n 'animated': true,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_5d523adb8bbb4786821cd7091e47da21/animated/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_5d523adb8bbb4786821cd7091e47da21/animated/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/emotesv2_5d523adb8bbb4786821cd7091e47da21/animated/dark/3.0',\n },\n 'start': 56,\n 'end': 63,\n },\n {\n 'type': 'twitch',\n 'name': 'TransgenderPride',\n 'id': '307827377',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827377/default/dark/3.0',\n },\n 'start': 0,\n 'end': 15,\n },\n {\n 'type': 'twitch',\n 'name': 'PansexualPride',\n 'id': '307827370',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827370/default/dark/3.0',\n },\n 'start': 17,\n 'end': 30,\n },\n {\n 'type': 'twitch',\n 'name': 'NonbinaryPride',\n 'id': '307827356',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827356/default/dark/3.0',\n },\n 'start': 32,\n 'end': 45,\n },\n {\n 'type': 'twitch',\n 'name': 'LesbianPride',\n 'id': '307827340',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827340/default/dark/3.0',\n },\n 'start': 47,\n 'end': 58,\n },\n {\n 'type': 'twitch',\n 'name': 'IntersexPride',\n 'id': '307827332',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827332/default/dark/3.0',\n },\n 'start': 60,\n 'end': 72,\n },\n {\n 'type': 'twitch',\n 'name': 'GenderFluidPride',\n 'id': '307827326',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827326/default/dark/3.0',\n },\n 'start': 74,\n 'end': 89,\n },\n {\n 'type': 'twitch',\n 'name': 'GayPride',\n 'id': '307827321',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827321/default/dark/3.0',\n },\n 'start': 91,\n 'end': 98,\n },\n {\n 'type': 'twitch',\n 'name': 'BisexualPride',\n 'id': '307827313',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827313/default/dark/3.0',\n },\n 'start': 100,\n 'end': 112,\n },\n {\n 'type': 'twitch',\n 'name': 'AsexualPride',\n 'id': '307827267',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/307827267/default/dark/3.0',\n },\n 'start': 114,\n 'end': 125,\n },\n {\n 'type': 'twitch',\n 'name': 'PogChamp',\n 'id': '305954156',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/305954156/default/dark/3.0',\n },\n 'start': 127,\n 'end': 134,\n },\n {\n 'type': 'twitch',\n 'name': 'GlitchCat',\n 'id': '304486301',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/304486301/default/dark/3.0',\n },\n 'start': 136,\n 'end': 144,\n },\n {\n 'type': 'twitch',\n 'name': 'DarkMode',\n 'id': '461298',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/461298/default/dark/3.0',\n },\n 'start': 146,\n 'end': 153,\n },\n {\n 'type': 'twitch',\n 'name': 'LUL',\n 'id': '425618',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/425618/default/dark/3.0',\n },\n 'start': 155,\n 'end': 157,\n },\n {\n 'type': 'twitch',\n 'name': 'TheIlluminati',\n 'id': '145315',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/145315/default/dark/3.0',\n },\n 'start': 159,\n 'end': 171,\n },\n {\n 'type': 'twitch',\n 'name': 'imGlitch',\n 'id': '112290',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/112290/default/dark/3.0',\n },\n 'start': 173,\n 'end': 180,\n },\n {\n 'type': 'twitch',\n 'name': 'DoritosChip',\n 'id': '102242',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/102242/default/dark/3.0',\n },\n 'start': 182,\n 'end': 192,\n },\n {\n 'type': 'twitch',\n 'name': 'SSSsss',\n 'id': '46',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/46/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/46/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/46/default/dark/3.0',\n },\n 'start': 194,\n 'end': 199,\n },\n {\n 'type': 'twitch',\n 'name': 'PunchTrees',\n 'id': '47',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/47/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/47/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/47/default/dark/3.0',\n },\n 'start': 201,\n 'end': 210,\n },\n {\n 'type': 'twitch',\n 'name': 'BloodTrail',\n 'id': '69',\n 'gif': false,\n 'urls': {\n '1': 'https://static-cdn.jtvnw.net/emoticons/v2/69/default/dark/1.0',\n '2': 'https://static-cdn.jtvnw.net/emoticons/v2/69/default/dark/2.0',\n '4': 'https://static-cdn.jtvnw.net/emoticons/v2/69/default/dark/3.0',\n },\n 'start': 223,\n 'end': 232,\n },\n {\n 'type': '7tv',\n 'name': 'CookieTime',\n 'id': '635b0184ea9ce7391cbf77d6',\n 'gif': true,\n 'animated': true,\n 'urls': {\n '1': 'https://cdn.7tv.app/emote/635b0184ea9ce7391cbf77d6/1x.webp',\n '2': 'https://cdn.7tv.app/emote/635b0184ea9ce7391cbf77d6/2x.webp',\n '3': 'https://cdn.7tv.app/emote/635b0184ea9ce7391cbf77d6/3x.webp',\n '4': 'https://cdn.7tv.app/emote/635b0184ea9ce7391cbf77d6/4x.webp',\n },\n 'start': 0,\n 'end': 10,\n 'coords': {\n 'x': 0,\n 'y': 0,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'catJAM',\n 'id': '5f1b0186cf6d2144653d2970',\n 'gif': true,\n 'animated': true,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/5f1b0186cf6d2144653d2970/1x',\n '2': 'https://cdn.betterttv.net/emote/5f1b0186cf6d2144653d2970/2x',\n '4': 'https://cdn.betterttv.net/emote/5f1b0186cf6d2144653d2970/3x',\n },\n 'start': 0,\n 'end': 6,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': ':tf:',\n 'id': '54fa8f1401e468494b85b537',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fa8f1401e468494b85b537/1x',\n '2': 'https://cdn.betterttv.net/emote/54fa8f1401e468494b85b537/2x',\n '4': 'https://cdn.betterttv.net/emote/54fa8f1401e468494b85b537/3x',\n },\n 'start': 7,\n 'end': 11,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'AngelThump',\n 'id': '566ca1a365dbbdab32ec055b',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/566ca1a365dbbdab32ec055b/1x',\n '2': 'https://cdn.betterttv.net/emote/566ca1a365dbbdab32ec055b/2x',\n '4': 'https://cdn.betterttv.net/emote/566ca1a365dbbdab32ec055b/3x',\n },\n 'start': 12,\n 'end': 22,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 334,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'ariW',\n 'id': '56fa09f18eff3b595e93ac26',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/56fa09f18eff3b595e93ac26/1x',\n '2': 'https://cdn.betterttv.net/emote/56fa09f18eff3b595e93ac26/2x',\n '4': 'https://cdn.betterttv.net/emote/56fa09f18eff3b595e93ac26/3x',\n },\n 'start': 23,\n 'end': 27,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'BroBalt',\n 'id': '54fbf00a01abde735115de5c',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fbf00a01abde735115de5c/1x',\n '2': 'https://cdn.betterttv.net/emote/54fbf00a01abde735115de5c/2x',\n '4': 'https://cdn.betterttv.net/emote/54fbf00a01abde735115de5c/3x',\n },\n 'start': 28,\n 'end': 35,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 184,\n 'height': 120,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'bttvNice',\n 'id': '54fab7d2633595ca4c713abf',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fab7d2633595ca4c713abf/1x',\n '2': 'https://cdn.betterttv.net/emote/54fab7d2633595ca4c713abf/2x',\n '4': 'https://cdn.betterttv.net/emote/54fab7d2633595ca4c713abf/3x',\n },\n 'start': 36,\n 'end': 44,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 168,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'bUrself',\n 'id': '566c9f3b65dbbdab32ec052e',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/566c9f3b65dbbdab32ec052e/1x',\n '2': 'https://cdn.betterttv.net/emote/566c9f3b65dbbdab32ec052e/2x',\n '4': 'https://cdn.betterttv.net/emote/566c9f3b65dbbdab32ec052e/3x',\n },\n 'start': 45,\n 'end': 52,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'c!',\n 'id': '6468f7acaee1f7f47567708e',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/6468f7acaee1f7f47567708e/1x',\n '2': 'https://cdn.betterttv.net/emote/6468f7acaee1f7f47567708e/2x',\n '4': 'https://cdn.betterttv.net/emote/6468f7acaee1f7f47567708e/3x',\n },\n 'start': 53,\n 'end': 55,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'CandianRage',\n 'id': '54fbf09c01abde735115de61',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fbf09c01abde735115de61/1x',\n '2': 'https://cdn.betterttv.net/emote/54fbf09c01abde735115de61/2x',\n '4': 'https://cdn.betterttv.net/emote/54fbf09c01abde735115de61/3x',\n },\n 'start': 56,\n 'end': 67,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'CiGrip',\n 'id': '54fa8fce01e468494b85b53c',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/54fa8fce01e468494b85b53c/1x',\n '2': 'https://cdn.betterttv.net/emote/54fa8fce01e468494b85b53c/2x',\n '4': 'https://cdn.betterttv.net/emote/54fa8fce01e468494b85b53c/3x',\n },\n 'start': 68,\n 'end': 74,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'ConcernDoge',\n 'id': '566c9f6365dbbdab32ec0532',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/566c9f6365dbbdab32ec0532/1x',\n '2': 'https://cdn.betterttv.net/emote/566c9f6365dbbdab32ec0532/2x',\n '4': 'https://cdn.betterttv.net/emote/566c9f6365dbbdab32ec0532/3x',\n },\n 'start': 75,\n 'end': 86,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 101,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'CruW',\n 'id': '55471c2789d53f2d12781713',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/55471c2789d53f2d12781713/1x',\n '2': 'https://cdn.betterttv.net/emote/55471c2789d53f2d12781713/2x',\n '4': 'https://cdn.betterttv.net/emote/55471c2789d53f2d12781713/3x',\n },\n 'start': 87,\n 'end': 91,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'cvHazmat',\n 'id': '5e76d338d6581c3724c0f0b2',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/5e76d338d6581c3724c0f0b2/1x',\n '2': 'https://cdn.betterttv.net/emote/5e76d338d6581c3724c0f0b2/2x',\n '4': 'https://cdn.betterttv.net/emote/5e76d338d6581c3724c0f0b2/3x',\n },\n 'start': 92,\n 'end': 100,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'D:',\n 'id': '55028cd2135896936880fdd7',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/55028cd2135896936880fdd7/1x',\n '2': 'https://cdn.betterttv.net/emote/55028cd2135896936880fdd7/2x',\n '4': 'https://cdn.betterttv.net/emote/55028cd2135896936880fdd7/3x',\n },\n 'start': 101,\n 'end': 103,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'haHAA',\n 'id': '555981336ba1901877765555',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/555981336ba1901877765555/1x',\n '2': 'https://cdn.betterttv.net/emote/555981336ba1901877765555/2x',\n '4': 'https://cdn.betterttv.net/emote/555981336ba1901877765555/3x',\n },\n 'start': 104,\n 'end': 109,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'LuL',\n 'id': '567b00c61ddbe1786688a633',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/567b00c61ddbe1786688a633/1x',\n '2': 'https://cdn.betterttv.net/emote/567b00c61ddbe1786688a633/2x',\n '4': 'https://cdn.betterttv.net/emote/567b00c61ddbe1786688a633/3x',\n },\n 'start': 110,\n 'end': 113,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 112,\n 'height': 112,\n },\n },\n {\n 'type': 'bttv',\n 'name': 'DuckerZ',\n 'id': '573d38b50ffbf6cc5cc38dc9',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.betterttv.net/emote/573d38b50ffbf6cc5cc38dc9/1x',\n '2': 'https://cdn.betterttv.net/emote/573d38b50ffbf6cc5cc38dc9/2x',\n '4': 'https://cdn.betterttv.net/emote/573d38b50ffbf6cc5cc38dc9/3x',\n },\n 'start': 114,\n 'end': 121,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 149,\n 'height': 112,\n },\n },\n {\n 'type': 'ffz',\n 'name': 'CatBag',\n 'id': '25927',\n 'gif': false,\n 'animated': false,\n 'urls': {\n '1': 'https://cdn.frankerfacez.com/emote/25927/1',\n '2': 'https://cdn.frankerfacez.com/emote/25927/2',\n '4': 'https://cdn.frankerfacez.com/emote/25927/4',\n },\n 'start': 122,\n 'end': 128,\n 'coords': {\n 'x': 0,\n 'y': 0,\n 'width': 143,\n 'height': 128,\n },\n },\n]).reduce(\n (acc, emote) => {\n if (!acc.some((e) => e.name === emote.name)) {\n acc.push({\n ...emote,\n start: 0,\n end: 0,\n } as TwitchEmote | BttvEmote | SeventvEmote);\n }\n\n return acc;\n },\n [] as Array<TwitchEmote | BttvEmote | SeventvEmote>,\n);\n","export const messages = [\n 'Hello everyone!',\n 'PogChamp',\n 'This stream is amazing!',\n 'catJAM catJAM catJAM',\n 'LUL that was funny',\n 'GG!',\n 'First time here, loving it!',\n 'DinoDance',\n 'Can we get some hype in chat?',\n 'TransgenderPride PansexualPride NonbinaryPride',\n 'POGGERS',\n 'I just followed! PogChamp',\n 'Great gameplay btw',\n 'LUL LUL LUL',\n 'This is so wholesome AngelThump',\n 'catJAM vibing',\n 'haHAA',\n 'Wait what just happened? D:',\n 'GlitchCat GlitchCat',\n 'Best stream on Twitch right now!',\n 'DarkMode gang where you at?',\n 'PogChamp PogChamp PogChamp PogChamp',\n 'Anyone else eating? DoritosChip',\n 'I love this community!',\n 'TheIlluminati confirmed',\n 'bUrself be yourself!',\n 'CookieTime nom nom',\n 'imGlitch technical difficulties',\n 'This music is fire catJAM',\n 'bttvNice',\n 'LesbianPride GayPride BisexualPride',\n 'SSSsss Minecraft time',\n 'PopNemo',\n 'Going to bed, good night everyone!',\n 'Just got here, what did I miss?',\n ':tf: trollface',\n 'ariW wave',\n 'BroBalt nice one',\n 'AsexualPride IntersexPride GenderFluidPride',\n 'This chat is moving so fast!',\n 'CandianRage',\n 'PunchTrees PunchTrees',\n 'CiGrip',\n 'ConcernDoge hmm',\n 'CruW salute',\n 'cvHazmat stay safe',\n 'DuckerZ quack',\n 'BloodTrail hunting time',\n 'CatBag kitty!',\n 'c! poggers',\n];\n","export const names = ['Local', 'Tixyel', 'Urie_s2', 'itzzcatt', 'BeniArts', 'Cupidiko', 'shy_madeit'];\n","export const tts = [\n 'Filiz',\n 'Astrid',\n 'Tatyana',\n 'Maxim',\n 'Carmen',\n 'Ines',\n 'Cristiano',\n 'Vitoria',\n 'Ricardo',\n 'Maja',\n 'Jan',\n 'Jacek',\n 'Ewa',\n 'Ruben',\n 'Lotte',\n 'Liv',\n 'Seoyeon',\n 'Takumi',\n 'Mizuki',\n 'Giorgio',\n 'Carla',\n 'Bianca',\n 'Karl',\n 'Dora',\n 'Mathieu',\n 'Celine',\n 'Chantal',\n 'Penelope',\n 'Miguel',\n 'Mia',\n 'Enrique',\n 'Conchita',\n 'Geraint',\n 'Salli',\n 'Matthew',\n 'Kimberly',\n 'Kendra',\n 'Justin',\n 'Joey',\n 'Joanna',\n 'Ivy',\n 'Raveena',\n 'Aditi',\n 'Emma',\n 'Brian',\n 'Amy',\n 'Russell',\n 'Nicole',\n 'Vicki',\n 'Marlene',\n 'Hans',\n 'Naja',\n 'Mads',\n 'Gwyneth',\n 'Zhiyu',\n 'Tracy',\n 'Danny',\n 'Huihui',\n 'Yaoyao',\n 'Kangkang',\n 'HanHan',\n 'Zhiwei',\n 'Asaf',\n 'An',\n 'Stefanos',\n 'Filip',\n 'Ivan',\n 'Heidi',\n 'Herena',\n 'Kalpana',\n 'Hemant',\n 'Matej',\n 'Andika',\n 'Rizwan',\n 'Lado',\n 'Valluvar',\n 'Linda',\n 'Heather',\n 'Sean',\n 'Michael',\n 'Karsten',\n 'Guillaume',\n 'Pattara',\n 'Jakub',\n 'Szabolcs',\n 'Hoda',\n 'Naayf',\n];\n","export const items: any[] = [];\n","export const tiers = ['1000', '2000', '3000', 'prime'];\n","import { Tixyel } from '../index.js';\nimport { Alejo$Pronouns } from '../types/alejo/pronouns.js';\nimport type { TwitchBadge, TwitchBadgesKeys } from '../types/badge.js';\nimport type { Provider } from '../types/client.js';\nimport type { BttvEmote, SeventvEmote, TwitchEmote } from '../types/emote.js';\nimport type {\n FieldSettings,\n NormalizedFieldSettings,\n StreamElementsField,\n StreamElementsFieldTypes,\n StreamElementsFieldValue,\n} from '../types/streamelements/customfields.js';\nimport type { StreamElements$AlertService } from '../types/streamelements/events/integrated/alertService.js';\nimport type { StreamElements$BotCounter } from '../types/streamelements/events/integrated/botCounter.js';\nimport type { StreamElements$EventSkip } from '../types/streamelements/events/integrated/eventSkip.js';\nimport type { StreamElements } from '../types/streamelements/events/integrated/index.js';\nimport type { StreamElements$KVStore } from '../types/streamelements/events/integrated/kvstore.js';\nimport type { StreamElements$Tip } from '../types/streamelements/events/integrated/tip.js';\nimport type { onEventReceived } from '../types/streamelements/events/onEventReceived.js';\nimport type { onSessionUpdate } from '../types/streamelements/events/onSessionUpdate.js';\nimport type { onWidgetLoad } from '../types/streamelements/events/onWidgetLoad.js';\nimport type { Twitch$Cheer } from '../types/streamelements/events/twitch/cheer.js';\nimport type { Twitch$Follower } from '../types/streamelements/events/twitch/follower.js';\nimport type { Twitch } from '../types/streamelements/events/twitch/index.js';\nimport type { Twitch$DeleteMessage, Twitch$DeleteMessages } from '../types/streamelements/events/twitch/message.delete.js';\nimport type { Twitch$Message } from '../types/streamelements/events/twitch/message.js';\nimport type { Twitch$Raid } from '../types/streamelements/events/twitch/raid.js';\nimport type { Subscriber$community, Subscriber$gift, Subscriber$spam, Twitch$Subscriber } from '../types/streamelements/events/twitch/subscriber.js';\nimport type { Youtube } from '../types/streamelements/events/youtube/index.js';\nimport type { Youtube$Message } from '../types/streamelements/events/youtube/message.js';\nimport type { Sponsor$community, Sponsor$gift, Sponsor$spam, Youtube$Sponsor } from '../types/streamelements/events/youtube/sponsor.js';\nimport type { YouTube$Subscriber } from '../types/streamelements/events/youtube/subscriber.js';\nimport type { YouTube$Superchat } from '../types/streamelements/events/youtube/superchat.js';\nimport type { Session$AnyConfig, Session$AvailableCategory, Session$AvailableData } from '../types/streamelements/session.generate.js';\nimport type { Session } from '../types/streamelements/session.js';\nimport { BadgeOptions, findEmotesInText, generateBadges, replaceEmotesWithHTML } from '../utils/Message.js';\nimport { names, messages, avatars, emotes, badges, tts, items, tiers } from './data/index.js';\n\ntype Modifier = (value: string, param: string | null | undefined, values: { amount?: number; count?: number }) => string;\n\nexport class Simulation {\n static data = {\n names: names,\n messages: messages,\n tiers: tiers,\n avatars: avatars,\n items: items,\n emotes: emotes,\n badges: badges,\n pronouns: Alejo$Pronouns,\n tts: tts,\n };\n\n static color = {\n opacity(opacity: number = 100, color: string) {\n color = color.length > 7 ? color.substring(0, 6) : color;\n opacity = opacity > 1 ? opacity / 100 : opacity;\n\n let result = Math.round(Math.min(Math.max(opacity, 0), 1) * 255)\n .toString(16)\n .toLowerCase();\n\n result = result.padStart(2, '0');\n\n return color + result;\n },\n\n getOpacity(hex: string) {\n if (!hex.startsWith('#') || hex.length <= 7) return { opacity: 100, hex };\n\n var ohex = hex.slice(-2);\n var decimal = parseInt(ohex, 16) / 255;\n var percentage = Math.round(decimal * 100);\n var color = hex.length > 7 ? hex.slice(0, 7) : hex;\n\n return { opacity: percentage, color: color };\n },\n\n validate(str: string): 'hex' | 'rgb' | 'rgba' | 'hsl' | 'hsla' | 'css-color-name' | false {\n if (typeof str !== 'string' || !str.length) return false;\n\n const s = str.trim();\n\n // HEX (#FFF, #FFFFFF, #FFFFFFFF)\n if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(s) || /^#([A-Fa-f0-9]{4}|[A-Fa-f0-9]{8})$/.test(s)) {\n return 'hex';\n }\n\n // rgb(255, 255, 255)\n if (/^rgb\\(\\s*(?:\\d{1,3}\\s*,\\s*){2}\\d{1,3}\\s*\\)$/.test(s)) {\n return 'rgb';\n }\n\n // rgba(255, 255, 255, 0.5)\n if (/^rgba\\(\\s*(?:\\d{1,3}\\s*,\\s*){3}(?:0|1|0?\\.\\d+)\\s*\\)$/.test(s)) {\n return 'rgba';\n }\n\n // hsl(360, 100%, 100%)\n if (/^hsl\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%\\s*,\\s*\\d{1,3}%\\s*\\)$/.test(s)) {\n return 'hsl';\n }\n\n // hsla(360, 100%, 100%, 0.5)\n if (/^hsla\\(\\s*\\d{1,3}\\s*,\\s*\\d{1,3}%\\s*,\\s*\\d{1,3}%\\s*,\\s*(?:0|1|0?\\.\\d+)\\s*\\)$/.test(s)) {\n return 'hsla';\n }\n\n if (\n [\n 'aliceblue',\n 'antiquewhite',\n 'aqua',\n 'aquamarine',\n 'azure',\n 'beige',\n 'bisque',\n 'black',\n 'blanchedalmond',\n 'blue',\n 'blueviolet',\n 'brown',\n 'burlywood',\n 'cadetblue',\n 'chartreuse',\n 'chocolate',\n 'coral',\n 'cornflowerblue',\n 'cornsilk',\n 'crimson',\n 'cyan',\n 'darkblue',\n 'darkcyan',\n 'darkgoldenrod',\n 'darkgray',\n 'darkgreen',\n 'darkgrey',\n 'darkkhaki',\n 'darkmagenta',\n 'darkolivegreen',\n 'darkorange',\n 'darkorchid',\n 'darkred',\n 'darksalmon',\n 'darkseagreen',\n 'darkslateblue',\n 'darkslategray',\n 'darkslategrey',\n 'darkturquoise',\n 'darkviolet',\n 'deeppink',\n 'deepskyblue',\n 'dimgray',\n 'dimgrey',\n 'dodgerblue',\n 'firebrick',\n 'floralwhite',\n 'forestgreen',\n 'fuchsia',\n 'gainsboro',\n 'ghostwhite',\n 'gold',\n 'goldenrod',\n 'gray',\n 'green',\n 'greenyellow',\n 'grey',\n 'honeydew',\n 'hotpink',\n 'indianred',\n 'indigo',\n 'ivory',\n 'khaki',\n 'lavender',\n 'lavenderblush',\n 'lawngreen',\n 'lemonchiffon',\n 'lightblue',\n 'lightcoral',\n 'lightcyan',\n 'lightgoldenrodyellow',\n 'lightgray',\n 'lightgreen',\n 'lightgrey',\n 'lightpink',\n 'lightsalmon',\n 'lightseagreen',\n 'lightskyblue',\n 'lightslategray',\n 'lightslategrey',\n 'lightsteelblue',\n 'lightyellow',\n 'lime',\n 'limegreen',\n 'linen',\n 'magenta',\n 'maroon',\n 'mediumaquamarine',\n 'mediumblue',\n 'mediumorchid',\n 'mediumpurple',\n 'mediumseagreen',\n 'mediumslateblue',\n 'mediumspringgreen',\n 'mediumturquoise',\n 'mediumvioletred',\n 'midnightblue',\n 'mintcream',\n 'mistyrose',\n 'moccasin',\n 'navajowhite',\n 'navy',\n 'oldlace',\n 'olive',\n 'olivedrab',\n 'orange',\n 'orangered',\n 'orchid',\n 'palegoldenrod',\n 'palegreen',\n 'paleturquoise',\n 'palevioletred',\n 'papayawhip',\n 'peachpuff',\n 'peru',\n 'pink',\n 'plum',\n 'powderblue',\n 'purple',\n 'rebeccapurple',\n 'red',\n 'rosybrown',\n 'royalblue',\n 'saddlebrown',\n 'salmon',\n 'sandybrown',\n 'seagreen',\n 'seashell',\n 'sienna',\n 'silver',\n 'skyblue',\n 'slateblue',\n 'slategray',\n 'slategrey',\n 'snow',\n 'springgreen',\n 'steelblue',\n 'tan',\n 'teal',\n 'thistle',\n 'tomato',\n 'turquoise',\n 'violet',\n 'wheat',\n 'white',\n 'whitesmoke',\n 'yellow',\n 'yellowgreen',\n 'transparent',\n ].includes(s.toLowerCase())\n ) {\n return 'css-color-name';\n }\n\n return false;\n },\n };\n\n static rand = {\n color(type: 'hex' | 'hexa' | 'rgb' | 'rgba' | 'hsl' | 'hsla' | 'css-color-name' = 'hex'): string {\n switch (type) {\n default:\n case 'hex': {\n return `#${Math.floor(Math.random() * 0xffffff)\n .toString(16)\n .padStart(6, '0')}`;\n }\n case 'hexa': {\n const hex = `#${Math.floor(Math.random() * 0xffffff)\n .toString(16)\n .padStart(6, '0')}`;\n\n const alpha = Math.floor(Math.random() * 256)\n .toString(16)\n .padStart(2, '0');\n\n return hex + alpha;\n }\n case 'rgb': {\n const r = Math.floor(Math.random() * 256);\n const g = Math.floor(Math.random() * 256);\n const b = Math.floor(Math.random() * 256);\n\n return `rgb(${r}, ${g}, ${b})`;\n }\n case 'rgba': {\n const r = Math.floor(Math.random() * 256);\n const g = Math.floor(Math.random() * 256);\n const b = Math.floor(Math.random() * 256);\n const a = Math.random().toFixed(2);\n\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n }\n case 'hsl': {\n const h = Math.floor(Math.random() * 361);\n const s = Math.floor(Math.random() * 101);\n const l = Math.floor(Math.random() * 101);\n\n return `hsl(${h}, ${s}%, ${l}%)`;\n }\n case 'hsla': {\n const h = Math.floor(Math.random() * 361);\n const s = Math.floor(Math.random() * 101);\n const l = Math.floor(Math.random() * 101);\n const a = Math.random().toFixed(2);\n\n return `hsla(${h}, ${s}%, ${l}%, ${a})`;\n }\n case 'css-color-name': {\n var names = [\n 'aliceblue',\n 'antiquewhite',\n 'aqua',\n 'aquamarine',\n 'azure',\n 'beige',\n 'bisque',\n 'black',\n 'blanchedalmond',\n 'blue',\n 'blueviolet',\n 'brown',\n 'burlywood',\n 'cadetblue',\n 'chartreuse',\n 'chocolate',\n 'coral',\n 'cornflowerblue',\n 'cornsilk',\n 'crimson',\n 'cyan',\n 'darkblue',\n 'darkcyan',\n 'darkgoldenrod',\n 'darkgray',\n 'darkgreen',\n 'darkgrey',\n 'darkkhaki',\n 'darkmagenta',\n 'darkolivegreen',\n 'darkorange',\n 'darkorchid',\n 'darkred',\n 'darksalmon',\n 'darkseagreen',\n 'darkslateblue',\n 'darkslategray',\n 'darkslategrey',\n 'darkturquoise',\n 'darkviolet',\n 'deeppink',\n 'deepskyblue',\n 'dimgray',\n 'dimgrey',\n 'dodgerblue',\n 'firebrick',\n 'floralwhite',\n 'forestgreen',\n 'fuchsia',\n 'gainsboro',\n 'ghostwhite',\n 'gold',\n 'goldenrod',\n 'gray',\n 'green',\n 'greenyellow',\n 'grey',\n 'honeydew',\n 'hotpink',\n 'indianred',\n 'indigo',\n 'ivory',\n 'khaki',\n 'lavender',\n 'lavenderblush',\n 'lawngreen',\n 'lemonchiffon',\n 'lightblue',\n 'lightcoral',\n 'lightcyan',\n 'lightgoldenrodyellow',\n 'lightgray',\n 'lightgreen',\n 'lightgrey',\n 'lightpink',\n 'lightsalmon',\n 'lightseagreen',\n 'lightskyblue',\n 'lightslategray',\n 'lightslategrey',\n 'lightsteelblue',\n 'lightyellow',\n 'lime',\n 'limegreen',\n 'linen',\n 'magenta',\n 'maroon',\n 'mediumaquamarine',\n 'mediumblue',\n 'mediumorchid',\n 'mediumpurple',\n 'mediumseagreen',\n 'mediumslateblue',\n 'mediumspringgreen',\n 'mediumturquoise',\n 'mediumvioletred',\n 'midnightblue',\n 'mintcream',\n 'mistyrose',\n 'moccasin',\n 'navajowhite',\n 'navy',\n 'oldlace',\n 'olive',\n 'olivedrab',\n 'orange',\n 'orangered',\n 'orchid',\n 'palegoldenrod',\n 'palegreen',\n 'paleturquoise',\n 'palevioletred',\n 'papayawhip',\n 'peachpuff',\n 'peru',\n 'pink',\n 'plum',\n 'powderblue',\n 'purple',\n 'rebeccapurple',\n 'red',\n 'rosybrown',\n 'royalblue',\n 'saddlebrown',\n 'salmon',\n 'sandybrown',\n 'seagreen',\n 'seashell',\n 'sienna',\n 'silver',\n 'skyblue',\n 'slateblue',\n 'slategray',\n 'slategrey',\n 'snow',\n 'springgreen',\n 'steelblue',\n 'tan',\n 'teal',\n 'thistle',\n 'tomato',\n 'turquoise',\n 'violet',\n 'wheat',\n 'white',\n 'whitesmoke',\n 'yellow',\n 'yellowgreen',\n 'transparent',\n ];\n\n return this.array(names)[0];\n }\n }\n },\n\n number(min: number, max: number, float: number = 0): number {\n if (min > max) [min, max] = [max, min];\n\n const rand = Math.random() * (max - min) + min;\n return float ? Number(rand.toFixed(float)) : Math.round(rand);\n },\n\n boolean(threshold: number = 0.5): boolean {\n return Math.random() > threshold;\n },\n\n string(length: number, chars: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'): string {\n let result = '';\n\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n\n return result;\n },\n\n array<T>(arr: T[]): [value: T, index: number] {\n const index = this.number(0, arr.length - 1);\n\n return [arr[index], index];\n },\n\n date(rangeDays: number = 365): string {\n const now = Date.now();\n const past = now - this.number(0, rangeDays * 24 * 60 * 60 * 1000);\n\n return new Date(past).toISOString();\n },\n\n uuid(): string {\n return window.crypto && typeof crypto?.randomUUID === 'function'\n ? crypto.randomUUID()\n : '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) =>\n (+c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (+c / 4)))).toString(16),\n );\n },\n };\n\n static string = {\n /**\n * Replaces occurrences in a string based on a pattern with the result of an asynchronous callback function.\n * @param string - The input string to perform replacements on.\n * @param pattern - The pattern to match in the string (can be a string or a regular expression).\n * @param callback - An asynchronous callback function that takes the matched substring and any captured groups as arguments and returns the replacement string.\n * @returns A promise that resolves to the modified string with replacements applied.\n * @example\n * ```javascript\n * const result = await Simulation.string.replace(\"Hello World\", /World/, async (match) => {\n * return await fetchSomeData(match); // Assume this function fetches data asynchronously\n * });\n * console.log(result); // Output will depend on the fetched data\n * ```\n */\n async replace(string: string, pattern: string, callback: (match: string, ...groups: string[]) => Promise<string> | string): Promise<string> {\n const promises: Array<Promise<string>> = [];\n\n string.replace(pattern, (match: string, ...groups: string[]) => {\n const promise = typeof callback === 'function' ? callback(match, ...groups) : match;\n\n promises.push(Promise.resolve(promise));\n\n return match;\n });\n\n const replacements = await Promise.all(promises);\n\n return string.replace(pattern, () => replacements.shift() ?? '');\n },\n\n /**\n * Capitalizes the first letter of a given string.\n * @param string - The input string to be capitalized.\n * @returns The capitalized string.\n * @example\n * ```javascript\n * const result = Simulation.string.capitalize(\"hello world\");\n * console.log(result); // Output: \"Hello world\"\n * ```\n */\n capitalize(string: string): string {\n return string.charAt(0).toUpperCase() + string.slice(1);\n },\n\n /**\n * Composes a template string by replacing placeholders with corresponding values and applying optional modifiers.\n * @param template - The template string containing placeholders in the format {key} and optional modifiers in the format [MODIFIER:param=value].\n * @param values - An object containing key-value pairs to replace the placeholders in the template.\n * @param options - Optional settings for the composition process.\n * @returns The composed string with placeholders replaced and modifiers applied.\n * @example\n * ```javascript\n * const template = \"Hello, {username}! You have {amount} [UPPERCASE=messages] and your name is [CAPITALIZE=name].\";\n * const values = { username: \"john_doe\", amount: 5, name: \"john\" };\n * const result = Simulation.string.compose(template, values);\n * console.log(result); // Output: \"Hello, john_doe! You have 5 MESSAGES and your name is John.\"\n * ```\n */\n compose(\n template: string,\n values: Record<string, any> = {},\n options: {\n method?: 'loop' | 'index';\n html?: boolean;\n modifiers?: Record<string, Modifier>;\n aliases?: Record<string, string[]>;\n } = {\n method: 'index',\n html: false,\n modifiers: {},\n aliases: {},\n },\n ): string {\n const { mergeSpanStyles } = Simulation.element;\n\n values.skip = '<br/>';\n values.newline = '<br/>';\n\n const flatten: Record<string, string> = Object.entries(Simulation.object.flatten(values)).reduce(\n (acc, [k, v]) => {\n acc[k] = String(v);\n\n if (['username', 'name', 'nick', 'nickname', 'sender'].some((e) => k === e)) {\n const username = acc?.username || acc?.name || acc?.nick || acc?.nickname || acc?.sender;\n\n acc['username'] = acc.username || username;\n acc['usernameAt'] = `@${acc.username}`;\n acc['name'] = acc.name || username;\n acc['nick'] = acc.nick || username;\n acc['nickname'] = acc.nickname || username;\n acc['sender'] = acc.sender || username;\n acc['senderAt'] = `@${acc.sender}`;\n }\n\n if (['amount', 'count'].some((e) => k === e)) {\n acc['amount'] = String(amount);\n acc['count'] = String(acc?.count || amount);\n }\n\n acc['currency'] = acc.currency || window.client?.details.currency.symbol || '$';\n acc['currencyCode'] = acc.currencyCode || window.client?.details.currency.code || 'USD';\n\n return acc;\n },\n {} as Record<string, string>,\n );\n\n const REGEX = {\n PLACEHOLDERS: /{([^}]+)}/g,\n MODIFIERS: /\\[(\\w+)(:[^=]+)?=([^\\]]+)\\]/g,\n };\n\n var amount = parseFloat(flatten?.amount ?? flatten?.count ?? 0);\n\n const HTML_MODIFIERS: Record<string, Modifier> = {\n COLOR: (value, param) => mergeSpanStyles(param && !!Simulation.color.validate(param) ? `color: ${param}` : '', value),\n WEIGHT: (value, param) => mergeSpanStyles(param && !isNaN(parseInt(param)) ? `font-weight: ${param}` : '', value),\n BOLD: (value) => mergeSpanStyles('font-weight: bold', value),\n LIGHT: (value) => mergeSpanStyles('font-weight: lighter', value),\n STRONG: (value) => mergeSpanStyles('font-weight: bolder', value),\n ITALIC: (value) => mergeSpanStyles('font-style: italic', value),\n UNDERLINE: (value) => mergeSpanStyles('text-decoration: underline', value),\n STRIKETHROUGH: (value) => mergeSpanStyles('text-decoration: line-through', value),\n SUB: (value) => mergeSpanStyles('vertical-align: sub', value),\n SUP: (value) => mergeSpanStyles('vertical-align: super', value),\n LARGER: (value) => mergeSpanStyles('font-size: larger', value),\n SMALL: (value) => mergeSpanStyles('font-size: smaller', value),\n SHADOW: (value, param) => mergeSpanStyles(`text-shadow: ${param}`, value),\n SIZE: (value, param) => mergeSpanStyles(param ? `font-size: ${param}` : '', value),\n };\n\n const STRING_MODIFIERS: Record<string, Modifier> = {\n BT1: (value) => (amount > 1 ? value : ''),\n BT0: (value) => (amount > 0 ? value : ''),\n ST1: (value) => (amount < 1 ? value : ''),\n ST0: (value) => (amount < 0 ? value : ''),\n UPC: (value) => value.toUpperCase(),\n LOW: (value) => value.toLowerCase(),\n REV: (value) => value.split('').reverse().join(''),\n CAP: (value) => value.charAt(0).toUpperCase() + value.slice(1).toLowerCase(),\n FALLBACK: (value, param) => (value.length ? value : (param ?? value)),\n };\n\n const MODIFIERS: Record<string, Modifier> = {\n ...STRING_MODIFIERS,\n ...(options?.html ? HTML_MODIFIERS : {}),\n ...(options.modifiers ?? {}),\n };\n\n const ALIASES = {\n UPC: ['UPPERCASE', 'UPPER', 'UPP'],\n LOW: ['LOWERCASE', 'LOWER', 'LWC'],\n REV: ['REVERSE', 'RVS'],\n CAP: ['CAPITALIZE', 'CAPITAL'],\n BT1: ['BIGGER_THAN_1', 'GREATER_THAN_1', 'GT1'],\n BT0: ['BIGGER_THAN_0', 'GREATER_THAN_0', 'GT0'],\n ST1: ['SMALLER_THAN_1', 'LESS_THAN_1', 'LT1'],\n ST0: ['SMALLER_THAN_0', 'LESS_THAN_0', 'LT0'],\n COLOR: ['COLOUR', 'CLR', 'HIGHLIGHT'],\n BOLD: ['BOLDEN', 'B'],\n STRONG: ['STRONGEN', 'STRONG'],\n ITALIC: ['ITALICIZE', 'ITALIC', 'I'],\n UNDERLINE: ['U', 'INS', 'INSET', 'I'],\n STRIKETHROUGH: ['STRIKE', 'S', 'DELETE', 'D'],\n SUB: ['SUBSCRIPT', 'SUBS'],\n SUP: ['SUPERSCRIPT', 'SUPS'],\n LARGER: ['LARGER', 'LG'],\n SMALL: ['SMALLER', 'SM'],\n SHADOW: ['SHADOW', 'SHD'],\n FALLBACK: ['FALLBACK', 'FB'],\n ...(options.aliases ?? {}),\n };\n\n function applyModifier(value: string, name: string, param: string | null | undefined): string {\n const canonical = Object.entries(ALIASES).find(([key, aliases]) => {\n if (aliases.some((alias) => alias.toUpperCase() === name.toUpperCase())) return true;\n else if (key.toUpperCase() === name.toUpperCase()) return true;\n else return false;\n });\n const use = canonical ? canonical[0] : name.toUpperCase();\n\n if (MODIFIERS[use]) return MODIFIERS[use](value, typeof param === 'string' ? param.trim() : null, flatten);\n else return value;\n }\n\n function replaceAll(string: string): string {\n let str = string;\n let match;\n\n while ((match = REGEX.MODIFIERS.exec(str)) !== null) {\n const [fullMatch, modifier, param, value] = match;\n\n const newValue = applyModifier(replaceAll(value), modifier, param);\n\n str = str.replace(fullMatch, newValue ?? '');\n\n REGEX.MODIFIERS.lastIndex = 0;\n }\n\n return str;\n }\n\n function parseModifiers(str: string): string {\n let i = 0;\n const len = str.length;\n\n function parseText(stopChar?: string): string {\n let out = '';\n while (i < len) {\n if (str[i] === '\\\\') {\n if (i + 1 < len) {\n out += str[i + 1];\n i += 2;\n } else {\n i++;\n }\n } else if (str[i] === '[' && (!stopChar || stopChar !== '[')) {\n out += parseModifier();\n } else if (stopChar && str[i] === stopChar) {\n i++;\n break;\n } else {\n out += str[i++];\n }\n }\n return out;\n }\n\n function parseModifier(): string {\n i++;\n let name = '';\n while (i < len && /[A-Za-z0-9]/.test(str[i])) name += str[i++];\n let param: string | null = null;\n if (str[i] === ':') {\n i++;\n const paramStart = i;\n while (i < len && str[i] !== '=') i++;\n param = str.slice(paramStart, i);\n }\n if (str[i] === '=') i++;\n const value = parseText(']');\n return applyModifier(value, name, param);\n }\n\n return parseText();\n }\n\n let result = template.replace(REGEX.PLACEHOLDERS, (_, key: string) =>\n typeof flatten[key] === 'string' || typeof flatten[key] === 'number' ? String(flatten[key]) : (key ?? key),\n );\n\n result = options.method === 'loop' ? replaceAll(result) : parseModifiers(result);\n\n return result;\n },\n };\n\n static element = {\n /**\n * Merges outer span styles with inner span styles in the provided HTML string.\n * @param outerStyle - The style string to be applied to the outer span.\n * @param innerHTML - The inner HTML string which may contain a span with its own styles.\n * @returns A new HTML string with merged styles applied to a single span.\n * @example\n * ```javascript\n * const result = Simulation.element.mergeSpanStyles(\"color: red; font-weight: bold;\", '<span style=\"font-size: 14px;\">Hello World</span>');\n * console.log(result); // Output: '<span style=\"font-size: 14px; color: red; font-weight: bold;\">Hello World</span>'\n * ```\n */\n mergeSpanStyles(outerStyle: string, innerHTML: string): string {\n const match = innerHTML.match(/^<span style=\"([^\"]*)\">(.*)<\\/span>$/s);\n\n if (match) {\n const innerStyle = match[1];\n const content = match[2];\n\n const mergedStyle = [innerStyle, outerStyle]\n .filter(Boolean)\n .join('; ')\n .replace(/\\s*;\\s*/g, '; ')\n .trim();\n\n return `<span style=\"${mergedStyle}\">${content}</span>`;\n } else {\n return `<span style=\"${outerStyle}\">${innerHTML}</span>`;\n }\n },\n\n /**\n * Scales an HTML element to fit within its parent element based on specified minimum and maximum scale factors.\n * @param element - The HTML element to be scaled.\n * @param min - Minimum scale factor (default is 0).\n * @param max - Maximum scale factor (default is 1).\n * @param options - Optional settings for scaling.\n * @returns - An object containing the new width, height, and scale factor, or void if not applied.\n * @example\n * ```javascript\n * const element = document.getElementById('myElement');\n * Simulation.element.scale(element, 0.5, 1, { return: false });\n * ```\n */\n scale(\n element: HTMLElement,\n min: number = 0,\n max: number = 1,\n options?: { return: boolean; parent: HTMLElement; base: 'width' | 'height' },\n ): { width: number; height: number; scale: number } | void {\n const { return: returnOnly = false, parent: customParent, base } = options || {};\n\n const parent = customParent || element.parentElement || document.body;\n\n if (!parent) {\n Tixyel.logger.warn('No parent element found for scaling');\n return;\n }\n\n const parentRect = parent.getBoundingClientRect();\n const elementWidth = element.offsetWidth;\n const elementHeight = element.offsetHeight;\n\n if (elementWidth === 0 || elementHeight === 0) {\n Tixyel.logger.warn('Element has zero width or height, cannot scale');\n return;\n }\n\n // Calculate scales for both dimensions\n const scaleX = (parentRect.width * max) / elementWidth;\n const scaleY = (parentRect.height * max) / elementHeight;\n\n // Determine final scale based on base option or use smaller scale\n let finalScale = base === 'width' ? scaleX : base === 'height' ? scaleY : Math.min(scaleX, scaleY);\n\n // Apply minimum constraint if needed\n if (min > 0) {\n const minScaleX = (parentRect.width * min) / elementWidth;\n const minScaleY = (parentRect.height * min) / elementHeight;\n const minScale = Math.max(minScaleX, minScaleY);\n\n finalScale = Math.max(minScale, finalScale);\n }\n\n const result = {\n width: elementWidth * finalScale,\n height: elementHeight * finalScale,\n scale: finalScale,\n };\n\n if (returnOnly) {\n return result;\n }\n\n element.style.transform = `scale(${finalScale})`;\n element.style.transformOrigin = 'center center';\n\n return result;\n },\n\n /**\n * Splits the text content of an HTML string into individual characters wrapped in span elements with a data-index attribute.\n * @param htmlString - The input HTML string to be processed.\n * @param startIndex - The starting index for the data-index attribute (default is 0).\n * @returns - A new HTML string with each character wrapped in a span element.\n * @example\n * ```javascript\n * const result = Simulation.element.splitTextToChars(\"<p>Hello</p>\", 0);\n * console.log(result);\n * // Output: '<p><span class=\"char\" data-index=\"0\">H</span><span class=\"char\" data-index=\"1\">e</span><span class=\"char\" data-index=\"2\">l</span><span class=\"char\" data-index=\"3\">l</span><span class=\"char\" data-index=\"4\">o</span></p>'\n * ```\n */\n splitTextToChars(htmlString: string, startIndex: number = 0): string {\n const parser = new DOMParser();\n const doc = parser.parseFromString(htmlString, 'text/html');\n\n let charIndex = startIndex;\n\n function processNode(node: Node) {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent;\n\n const chars = text?.split('').map((char) => {\n const span = document.createElement('span');\n\n span.className = 'char';\n span.dataset.index = String(charIndex++);\n\n span.textContent = char;\n\n charIndex++;\n\n return span.outerHTML;\n });\n\n const wrapper = document.createElement('span');\n\n wrapper.innerHTML = chars?.join('') ?? '';\n\n return wrapper;\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n const clone = node.cloneNode(false);\n\n node.childNodes.forEach((child) => {\n const processed = processNode(child);\n\n if (processed instanceof Node) {\n Array.from(processed.childNodes).forEach((childNode) => {\n clone.appendChild(childNode);\n });\n }\n });\n\n return clone;\n }\n\n return node.cloneNode(true);\n }\n\n const body = doc.body;\n const processed = document.createElement('div');\n\n body.childNodes.forEach((node) => {\n const result = processNode(node);\n\n if (result instanceof Node) {\n processed.appendChild(result);\n }\n });\n\n return processed.innerHTML;\n },\n };\n\n static object = {\n /**\n * Flattens a nested object into a single-level object with dot-separated keys.\n * @param obj - The nested object to be flattened.\n * @param prefix - The prefix to be added to each key (used for recursion).\n * @returns A flattened object with dot-separated keys.\n * @example\n * ```javascript\n * const nestedObj = { a: { b: 1, c: { d: 2 } }, e: [3, 4] };\n * const flatObj = Simulation.object.flatten(nestedObj);\n * console.log(flatObj);\n * // Output: { 'a.b': '1', 'a.c.d': '2', 'e:0': '3', 'e:1': '4' }\n * ```\n */\n flatten(obj: Record<string, any>, prefix: string = ''): Record<string, string> {\n const result = {} as Record<string, string>;\n\n for (const key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;\n\n const value = obj[key];\n const path = prefix ? `${prefix}.${key}` : key;\n\n // Handle null and undefined\n if (value === null || value === undefined) {\n result[path] = String(value);\n\n continue;\n }\n\n // Handle Date objects\n if (value instanceof Date) {\n result[path] = value.toISOString();\n\n continue;\n }\n\n // Handle Map objects\n if (value instanceof Map) {\n value.forEach((v, k) => {\n result[`${path}.${k}`] = JSON.stringify(v);\n });\n\n continue;\n }\n\n // Handle Array objects\n if (Array.isArray(value)) {\n value.forEach((v, i) => {\n const itemPath = `${path}:${i}`;\n\n if (typeof v === 'object') {\n Object.assign(result, this.flatten(v, itemPath));\n } else {\n result[itemPath] = String(v);\n }\n });\n\n continue;\n }\n\n // Handle nested objects\n if (typeof value === 'object') {\n Object.assign(result, this.flatten(value, path));\n\n continue;\n }\n\n // Handle primitive values (string, number, boolean, etc.)\n result[path] = String(value);\n }\n\n return result;\n },\n };\n\n static generate = {\n session: {\n types: {\n name: { type: 'string', options: Simulation.data.names.filter((e) => e.length) },\n tier: { type: 'string', options: Simulation.data.tiers.filter((e) => e.length) },\n message: { type: 'string', options: Simulation.data.messages.filter((e) => e.length) },\n item: { type: 'array', options: Simulation.data.items },\n avatar: { type: 'string', options: Simulation.data.avatars.filter((e) => e.length) },\n } as Record<string, Session$AnyConfig>,\n\n available(): Session$AvailableData {\n const types = this.types;\n\n return {\n follower: {\n latest: { name: types.name },\n session: { count: { type: 'int', min: 50, max: 200 } },\n week: { count: { type: 'int', min: 200, max: 1000 } },\n month: { count: { type: 'int', min: 1000, max: 3000 } },\n goal: { amount: { type: 'int', min: 3000, max: 7000 } },\n total: { count: { type: 'int', min: 7000, max: 10000 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: { name: types.name, createdAt: { type: 'date', range: 400 } },\n },\n },\n subscriber: {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n tier: types.tier,\n message: types.message,\n },\n 'new-latest': {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n message: types.message,\n },\n 'resub-latest': {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n message: types.message,\n },\n 'gifted-latest': {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n message: types.message,\n tier: types.tier,\n sender: types.name,\n },\n session: { count: { type: 'int', min: 10, max: 40 } },\n 'new-session': { count: { type: 'int', min: 10, max: 40 } },\n 'resub-session': { count: { type: 'int', min: 10, max: 40 } },\n 'gifted-session': { count: { type: 'int', min: 10, max: 40 } },\n week: { count: { type: 'int', min: 40, max: 100 } },\n month: { count: { type: 'int', min: 100, max: 200 } },\n goal: { amount: { type: 'int', min: 200, max: 300 } },\n total: { count: { type: 'int', min: 300, max: 400 } },\n points: { amount: { type: 'int', min: 100, max: 400 } },\n 'alltime-gifter': { name: types.name, amount: { type: 'int', min: 300, max: 400 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 10, max: 30 },\n tier: types.tier,\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n host: {\n latest: { name: types.name, amount: { type: 'int', min: 1, max: 10 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 1, max: 10 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n raid: {\n latest: { name: types.name, amount: { type: 'int', min: 0, max: 100 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n charityCampaignDonation: {\n latest: { name: types.name, amount: { type: 'int', min: 50, max: 150 } },\n 'session-top-donation': { name: types.name, amount: { type: 'int', min: 50, max: 200 } },\n 'weekly-top-donation': { name: types.name, amount: { type: 'int', min: 200, max: 500 } },\n 'monthly-top-donation': { name: types.name, amount: { type: 'int', min: 500, max: 800 } },\n 'alltime-top-donation': { name: types.name, amount: { type: 'int', min: 800, max: 1000 } },\n 'session-top-donator': { name: types.name, amount: { type: 'int', min: 50, max: 200 } },\n 'weekly-top-donator': { name: types.name, amount: { type: 'int', min: 200, max: 500 } },\n 'monthly-top-donator': { name: types.name, amount: { type: 'int', min: 500, max: 800 } },\n 'alltime-top-donator': { name: types.name, amount: { type: 'int', min: 800, max: 1000 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 50, max: 150 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n cheer: {\n latest: { name: types.name, amount: { type: 'int', min: 200, max: 800 }, message: types.message },\n 'session-top-donation': { name: types.name, amount: { type: 'int', min: 200, max: 1000 } },\n 'weekly-top-donation': { name: types.name, amount: { type: 'int', min: 1000, max: 5000 } },\n 'monthly-top-donation': { name: types.name, amount: { type: 'int', min: 5000, max: 12000 } },\n 'alltime-top-donation': { name: types.name, amount: { type: 'int', min: 12000, max: 20000 } },\n 'session-top-donator': { name: types.name, amount: { type: 'int', min: 200, max: 1000 } },\n 'weekly-top-donator': { name: types.name, amount: { type: 'int', min: 1000, max: 5000 } },\n 'monthly-top-donator': { name: types.name, amount: { type: 'int', min: 5000, max: 12000 } },\n 'alltime-top-donator': { name: types.name, amount: { type: 'int', min: 12000, max: 20000 } },\n session: { amount: { type: 'int', min: 200, max: 1000 } },\n week: { amount: { type: 'int', min: 1000, max: 5000 } },\n month: { amount: { type: 'int', min: 5000, max: 12000 } },\n goal: { amount: { type: 'int', min: 12000, max: 18000 } },\n total: { amount: { type: 'int', min: 18000, max: 20000 } },\n count: { count: { type: 'int', min: 200, max: 1000 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 200, max: 800 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n cheerPurchase: {\n latest: { name: types.name, amount: { type: 'int', min: 200, max: 400 } },\n 'session-top-donation': { name: types.name, amount: { type: 'int', min: 200, max: 400 } },\n 'weekly-top-donation': { name: types.name, amount: { type: 'int', min: 400, max: 800 } },\n 'monthly-top-donation': { name: types.name, amount: { type: 'int', min: 800, max: 1500 } },\n 'alltime-top-donation': { name: types.name, amount: { type: 'int', min: 1500, max: 2000 } },\n 'session-top-donator': { name: types.name, amount: { type: 'int', min: 200, max: 400 } },\n 'weekly-top-donator': { name: types.name, amount: { type: 'int', min: 400, max: 800 } },\n 'monthly-top-donator': { name: types.name, amount: { type: 'int', min: 800, max: 1500 } },\n 'alltime-top-donator': { name: types.name, amount: { type: 'int', min: 1500, max: 2000 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 200, max: 400 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n superchat: {\n latest: { name: types.name, amount: { type: 'int', min: 100, max: 400 } },\n 'session-top-donation': { name: types.name, amount: { type: 'int', min: 100, max: 500 } },\n 'weekly-top-donation': { name: types.name, amount: { type: 'int', min: 500, max: 1000 } },\n 'monthly-top-donation': { name: types.name, amount: { type: 'int', min: 1000, max: 2000 } },\n 'alltime-top-donation': { name: types.name, amount: { type: 'int', min: 2000, max: 2500 } },\n 'session-top-donator': { name: types.name, amount: { type: 'int', min: 100, max: 500 } },\n 'weekly-top-donator': { name: types.name, amount: { type: 'int', min: 500, max: 1000 } },\n 'monthly-top-donator': { name: types.name, amount: { type: 'int', min: 1000, max: 2000 } },\n 'alltime-top-donator': { name: types.name, amount: { type: 'int', min: 2000, max: 2500 } },\n session: { amount: { type: 'int', min: 100, max: 500 } },\n week: { amount: { type: 'int', min: 500, max: 1000 } },\n month: { amount: { type: 'int', min: 1000, max: 2000 } },\n goal: { amount: { type: 'int', min: 2000, max: 2300 } },\n total: { amount: { type: 'int', min: 2300, max: 2500 } },\n count: { count: { type: 'int', min: 100, max: 500 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 100, max: 400 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n hypetrain: {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n active: { type: 'int', min: 0, max: 1 },\n level: { type: 'int', min: 5, max: 10 },\n levelChanged: { type: 'int', min: 0, max: 5 },\n _type: { type: 'array', options: ['follower', 'subscriber', 'cheer', 'donation'] },\n },\n 'level-goal': { amount: { type: 'int', min: 0, max: 100 } },\n 'level-progress': { amount: { type: 'int', min: 0, max: 100 }, percent: { type: 'int', min: 0, max: 100 } },\n total: { amount: { type: 'int', min: 0, max: 100 } },\n 'latest-top-contributors': { type: 'recent', amount: 25, value: { name: types.name } },\n },\n 'channel-points': {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n message: types.message,\n redemption: { type: 'array', options: ['Reward 1', 'Reward 2', 'Reward 3'] },\n },\n },\n tip: {\n latest: { name: types.name, amount: { type: 'int', min: 100, max: 400 } },\n 'session-top-donation': { name: types.name, amount: { type: 'int', min: 100, max: 500 } },\n 'weekly-top-donation': { name: types.name, amount: { type: 'int', min: 500, max: 1000 } },\n 'monthly-top-donation': { name: types.name, amount: { type: 'int', min: 1000, max: 2000 } },\n 'alltime-top-donation': { name: types.name, amount: { type: 'int', min: 2000, max: 2500 } },\n 'session-top-donator': { name: types.name, amount: { type: 'int', min: 100, max: 500 } },\n 'weekly-top-donator': { name: types.name, amount: { type: 'int', min: 500, max: 1000 } },\n 'monthly-top-donator': { name: types.name, amount: { type: 'int', min: 1000, max: 2000 } },\n 'alltime-top-donator': { name: types.name, amount: { type: 'int', min: 2000, max: 2500 } },\n session: { amount: { type: 'int', min: 100, max: 500 } },\n week: { amount: { type: 'int', min: 500, max: 1000 } },\n month: { amount: { type: 'int', min: 1000, max: 2000 } },\n goal: { amount: { type: 'int', min: 2000, max: 2300 } },\n total: { amount: { type: 'int', min: 2300, max: 2500 } },\n count: { count: { type: 'int', min: 100, max: 500 } },\n recent: {\n type: 'recent',\n amount: 25,\n value: {\n name: types.name,\n amount: { type: 'int', min: 100, max: 400 },\n createdAt: { type: 'date', range: 400 },\n },\n },\n },\n merch: {\n latest: { name: types.name, amount: { type: 'int', min: 0, max: 100 }, items: types.item },\n 'goal-orders': { amount: { type: 'int', min: 0, max: 100 } },\n 'goal-items': { amount: { type: 'int', min: 0, max: 100 } },\n 'goal-total': { amount: { type: 'int', min: 0, max: 100 } },\n recent: { type: 'recent', amount: 25, value: { name: types.name } },\n },\n purchase: {\n latest: {\n name: types.name,\n amount: { type: 'int', min: 0, max: 100 },\n items: types.item,\n avatar: types.avatar,\n message: types.message,\n },\n },\n };\n },\n\n async get(): Promise<Session> {\n const available = this.available();\n\n const generate = (available: Session$AvailableData | Session$AvailableCategory | Session$AnyConfig): any => {\n const generateRecentData = (config: Session$AnyConfig): Array<any> => {\n if (!config || !('amount' in config)) return [];\n\n const items: Array<{ createdAt: string }> = [];\n\n for (let i = 0; i < config.amount; i++) {\n items.push(generate(config.value));\n }\n\n return items.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n };\n\n const generateObjectData = (config: Record<string, any>): Record<string, any> => {\n const result: Record<string, any> = {};\n\n for (const key in config) {\n const processedKey = key.replace('_type', 'type');\n\n result[processedKey] = generate(config[key]);\n }\n\n return result;\n };\n\n const processTypedConfig = (config: Session$AnyConfig): any => {\n if (!config) return config;\n\n switch (config.type) {\n case 'int':\n return Simulation.rand.number(config.min, config.max);\n case 'string':\n return Simulation.rand.array(config.options)[0];\n case 'date':\n return Simulation.rand.date(config.range);\n case 'array':\n return Simulation.rand.array(config.options)[0];\n case 'recent':\n return generateRecentData(config);\n default:\n return config;\n }\n };\n\n // Main generation logic\n\n // Handle primitive values (non-objects)\n if (typeof available !== 'object' || available === null) {\n return available;\n }\n\n // Handle typed configurations (objects with a 'type' property)\n if ('type' in available && typeof available.type === 'string') {\n return processTypedConfig(available);\n }\n\n // Handle generic objects - recursively process each property\n return generateObjectData(available);\n };\n\n var session: Session = Object.entries(generate(available)).reduce(\n (acc, [key, value]) => {\n Object.entries(value as any).forEach(\n ([subKey, subValue]) =>\n //\n (acc[`${key}-${subKey}`] = subValue),\n );\n\n return acc;\n },\n {} as Record<string, any>,\n ) as Session;\n\n return session;\n },\n },\n event: {\n /**\n * Simulates the onWidgetLoad event for a widget.\n * @param fields - The field values to be included in the event.\n * @param session - The session data to be included in the event.\n * @param currency - The currency to be used (default is 'USD').\n * @returns A Promise that resolves to the simulated onWidgetLoad event data.\n */\n async onWidgetLoad(fields: Record<string, StreamElementsFieldValue>, session: Session, currency: 'BRL' | 'USD' | 'EUR' = 'USD'): Promise<onWidgetLoad> {\n const currencies = {\n BRL: { code: 'BRL', name: 'Brazilian Real', symbol: 'R$' },\n USD: { code: 'USD', name: 'US Dollar', symbol: '$' },\n EUR: { code: 'EUR', name: 'Euro', symbol: '€' },\n };\n\n return {\n channel: {\n username: 'local',\n apiToken: '',\n id: '',\n providerId: '',\n avatar: '',\n },\n currency: currencies[currency] ?? currencies.USD,\n fieldData: fields,\n recents: [],\n session: {\n data: session,\n settings: {\n autoReset: false,\n calendar: false,\n resetOnStart: false,\n },\n },\n overlay: {\n isEditorMode: true,\n muted: false,\n },\n emulated: true,\n };\n },\n /**\n * Simulates the onSessionUpdate event for a widget.\n * @param session - The session data to be included in the event.\n * @returns A Promise that resolves to the simulated onSessionUpdate event data.\n */\n async onSessionUpdate(session?: Session): Promise<onSessionUpdate> {\n session ??= await Simulation.generate.session.get();\n\n return { session };\n },\n /**\n * Simulates the onEventReceived event for a widget.\n * @param provider - The provider of the event (default is 'random').\n * @param type - The type of event to simulate (default is 'random').\n * @param options - Additional options to customize the event data.\n * @returns A Promise that resolves to the simulated onEventReceived event data, or null if the event type is not supported.\n * @example\n * ```javascript\n * // Simulate a random event\n * const randomEvent = await Simulation.generate.event.onEventReceived();\n *\n * // Simulate a Twitch message event with custom options\n * const twitchMessageEvent = await Simulation.generate.event.onEventReceived('twitch', 'message', { name: 'Streamer', message: 'Hello World!' });\n * ```\n */\n async onEventReceived(\n provider: Provider | 'random' = 'random',\n type: onEventReceived['listener'] | 'random' | 'tip' | 'cheer' | 'follower' | 'raid' | 'subscriber' = 'random',\n options: Record<string, string | number | boolean> = {},\n ): Promise<onEventReceived | null> {\n const available: Record<Provider, string[]> = {\n twitch: ['message', 'follower-latest', 'cheer-latest', 'raid-latest', 'subscriber-latest'],\n streamelements: ['tip-latest'],\n youtube: ['message', 'superchat-latest', 'subscriber-latest', 'sponsor-latest'],\n kick: [],\n facebook: [],\n };\n\n switch (provider) {\n default:\n case 'random': {\n var randomProvider = Simulation.rand.array(Object.keys(available).filter((e) => available[e as Provider].length))[0] as Provider;\n var randomEvent = Simulation.rand.array(available[randomProvider])[0] as onEventReceived['listener'];\n\n return this.onEventReceived(randomProvider, randomEvent);\n }\n\n case 'twitch': {\n switch (type as Twitch['listener'] | 'random' | 'cheer' | 'follower' | 'raid' | 'subscriber') {\n default:\n case 'random': {\n var randomEvent = Simulation.rand.array(available[provider])[0] as onEventReceived['listener'];\n\n return this.onEventReceived(provider, randomEvent);\n }\n case 'message': {\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n var message = (options?.message as string) ?? Simulation.rand.array(Simulation.data.messages.filter((e) => e.length))[0];\n\n var badges = await generateBadges((options?.badges as BadgeOptions) ?? [], provider);\n\n var emotes = findEmotesInText(message);\n var renderedText = replaceEmotesWithHTML(message, emotes);\n\n var color = (options?.color as string) ?? Simulation.rand.color('hex');\n var userId = (options?.userId as string) ?? Simulation.rand.number(10000000, 99999999).toString();\n var time = Date.now();\n\n const event: Twitch$Message = {\n listener: 'message',\n event: {\n service: provider,\n data: {\n time: time,\n tags: {\n 'badge-info': `${badges.keys.map((key) => `${key}/${Simulation.rand.number(1, 5)}`).join(',')}`,\n 'badges': badges.keys.join('/1,'),\n\n 'mod': badges.keys.includes('moderator') ? '1' : '0',\n 'subscriber': badges.keys.includes('subscriber') ? '1' : '0',\n 'turbo': badges.keys.includes('turbo') ? '1' : '0',\n\n 'tmi-sent-ts': time.toString(),\n\n 'user-id': userId,\n 'user-type': '',\n\n 'color': color,\n 'display-name': name,\n 'emotes': '',\n\n 'client-nonce': Simulation.rand.string(16),\n 'flags': '',\n 'id': Simulation.rand.uuid(),\n 'first-msg': '0',\n 'returning-chatter': '0',\n },\n nick: name.toLowerCase(),\n displayName: name,\n displayColor: color,\n channel: 'local',\n text: message,\n isAction: false,\n userId: userId,\n msgId: Simulation.rand.uuid(),\n badges: badges.badges,\n emotes: emotes,\n },\n renderedText: renderedText,\n },\n };\n\n return event;\n }\n case 'cheer':\n case 'cheer-latest': {\n var amount = (options?.amount as number) ?? Simulation.rand.number(100, 10000);\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n var message = (options?.message as string) ?? Simulation.rand.array(Simulation.data.messages.filter((e) => e.length))[0];\n\n const event: Twitch$Cheer = {\n listener: 'cheer-latest',\n event: {\n amount,\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n message: message,\n providerId: '',\n _id: Simulation.rand.uuid(),\n sessionTop: false,\n type: 'cheer',\n originalEventName: 'cheer-latest',\n },\n };\n\n return event;\n }\n case 'follower':\n case 'follower-latest': {\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n\n const event: Twitch$Follower = {\n listener: 'follower-latest',\n event: {\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n _id: Simulation.rand.uuid(),\n sessionTop: false,\n type: 'follower',\n originalEventName: 'follower-latest',\n },\n };\n\n return event;\n }\n case 'raid':\n case 'raid-latest': {\n var amount = (options?.amount as number) ?? Simulation.rand.number(1, 100);\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n\n const event: Twitch$Raid = {\n listener: 'raid-latest',\n event: {\n amount,\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n _id: Simulation.rand.uuid(),\n sessionTop: false,\n type: 'raid',\n originalEventName: 'raid-latest',\n },\n };\n\n return event;\n }\n case 'subscriber':\n case 'subscriber-latest': {\n var tier = (options?.tier as string) ?? Simulation.rand.array(['1000', '2000', '3000'])[0];\n var amount = (options?.amount as number) ?? Simulation.rand.number(1, 24);\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n var sender = (options?.sender as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length && e !== name))[0];\n var message = (options?.message as string) ?? Simulation.rand.array(Simulation.data.messages.filter((e) => e.length))[0];\n\n var addons = {\n default: {\n avatar,\n tier,\n playedAsCommunityGift: false,\n },\n gift: {\n sender,\n gifted: true,\n } as Subscriber$gift,\n community: {\n message,\n sender,\n bulkGifted: true,\n } as Subscriber$community,\n spam: {\n sender,\n gifted: true,\n isCommunityGift: true,\n } as Subscriber$spam,\n };\n\n var subTypes = ['default', 'gift', 'community', 'spam'];\n var subType = (options?.subType as string) ?? Simulation.rand.array(subTypes)[0];\n\n subType = subTypes.includes(subType) ? subType : 'default';\n\n const event: Twitch$Subscriber = {\n listener: 'subscriber-latest',\n event: {\n amount,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n\n ...addons.default,\n ...addons[subType as keyof typeof addons],\n\n _id: Simulation.rand.uuid(),\n sessionTop: false,\n type: 'subscriber',\n originalEventName: 'subscriber-latest',\n },\n };\n\n return event;\n }\n case 'delete-message': {\n const event: Twitch$DeleteMessage = {\n listener: 'delete-message',\n event: {\n msgId: (options?.id as string) ?? Simulation.rand.uuid(),\n },\n };\n\n return event;\n }\n case 'delete-messages': {\n const event: Twitch$DeleteMessages = {\n listener: 'delete-messages',\n event: {\n userId: (options?.id as string) ?? Simulation.rand.number(10000000, 99999999).toString(),\n },\n };\n\n return event;\n }\n }\n }\n\n case 'streamelements': {\n switch (type as StreamElements['listener'] | 'random' | 'tip' | 'mute' | 'unmute' | 'skip') {\n default:\n case 'random': {\n var randomEvent = Simulation.rand.array(available[provider])[0] as onEventReceived['listener'];\n\n return this.onEventReceived(provider, randomEvent);\n }\n case 'tip':\n case 'tip-latest': {\n var amount = (options?.amount as number) ?? Simulation.rand.number(100, 4000);\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n\n const event: StreamElements$Tip = {\n listener: 'tip-latest',\n event: {\n amount,\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n _id: Simulation.rand.uuid(),\n sessionTop: false,\n type: 'tip',\n originalEventName: 'tip-latest',\n },\n };\n\n return event;\n }\n case 'kvstore:update': {\n const event: StreamElements$KVStore = {\n listener: 'kvstore:update',\n event: {\n data: {\n key: `customWidget.${(options?.key as string) ?? 'sampleKey'}`,\n value: (options?.value as string) ?? 'sampleValue',\n },\n },\n };\n\n return event;\n }\n case 'bot:counter': {\n const event: StreamElements$BotCounter = {\n listener: 'bot:counter',\n event: {\n counter: (options?.counter as string) ?? 'sampleCounter',\n value: (options?.value as number) ?? Simulation.rand.number(0, 100),\n },\n };\n\n return event;\n }\n case 'mute':\n case 'unmute':\n case 'alertService:toggleSound': {\n var muted = (options?.muted as boolean) ?? !client.details.overlay.muted;\n\n const event: StreamElements$AlertService = {\n listener: 'alertService:toggleSound',\n event: { muted },\n };\n\n return event;\n }\n case 'skip':\n case 'event:skip': {\n const event: StreamElements$EventSkip = {\n listener: 'event:skip',\n event: {},\n };\n\n return event;\n }\n }\n }\n\n case 'youtube': {\n switch (type as Youtube['listener'] | 'random' | 'message' | 'superchat' | 'subscriber' | 'sponsor') {\n default:\n case 'random': {\n var randomEvent = Simulation.rand.array(available[provider])[0] as onEventReceived['listener'];\n\n return this.onEventReceived(provider, randomEvent);\n }\n case 'message': {\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n var message = (options?.message as string) ?? Simulation.rand.array(Simulation.data.messages.filter((e) => e.length))[0];\n\n const badges = await generateBadges((options?.badges as BadgeOptions) ?? [], provider);\n\n var emotes = findEmotesInText(message);\n var renderedText = replaceEmotesWithHTML(message, emotes);\n\n var color = (options?.color as string) ?? Simulation.rand.color('hex');\n var userId = (options?.userId as string) ?? Simulation.rand.number(10000000, 99999999).toString();\n var time = Date.now();\n\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n\n const event: Youtube$Message = {\n listener: 'message',\n event: {\n service: 'youtube',\n data: {\n kind: '',\n etag: '',\n id: '',\n snippet: {\n type: '',\n liveChatId: '',\n authorChannelId: 'local',\n publishedAt: new Date().toISOString(),\n hasDisplayContent: true,\n displayMessage: message,\n textMessageDetails: {\n messageText: message,\n },\n },\n authorDetails: {\n channelId: 'local',\n channelUrl: '',\n displayName: name,\n profileImageUrl: avatar,\n ...badges,\n },\n msgId: Simulation.rand.uuid(),\n userId: Simulation.rand.uuid(),\n nick: name.toLowerCase(),\n badges: [],\n displayName: name,\n isAction: false,\n time: Date.now(),\n tags: [],\n displayColor: Simulation.rand.color('hex'),\n channel: 'local',\n text: message,\n avatar: avatar,\n emotes: [],\n },\n renderedText: message,\n },\n };\n\n return event;\n }\n case 'subscriber':\n case 'subscriber-latest': {\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n\n const event: YouTube$Subscriber = {\n listener: 'subscriber-latest',\n event: {\n avatar,\n displayName: name,\n name: name.toLowerCase(),\n providerId: '',\n _id: Simulation.rand.uuid(),\n sessionTop: false,\n type: 'subscriber',\n originalEventName: 'subscriber-latest',\n },\n };\n\n return event;\n }\n case 'superchat':\n case 'superchat-latest': {\n var amount = (options?.amount as number) ?? Simulation.rand.number(100, 4000);\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n\n const event: YouTube$Superchat = {\n listener: 'superchat-latest',\n event: {\n amount,\n avatar,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n _id: Simulation.rand.uuid(),\n sessionTop: false,\n type: 'superchat',\n originalEventName: 'superchat-latest',\n },\n };\n\n return event;\n }\n case 'sponsor':\n case 'sponsor-latest': {\n var tier = (options?.tier as string) ?? Simulation.rand.array(['1000', '2000', '3000'])[0];\n var amount = (options?.amount as number) ?? Simulation.rand.number(1, 24);\n var avatar = (options?.avatar as string) ?? Simulation.rand.array(Simulation.data.avatars)[0];\n var name = (options?.name as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length))[0];\n var sender = (options?.sender as string) ?? Simulation.rand.array(Simulation.data.names.filter((e) => e.length && e !== name))[0];\n var message = (options?.message as string) ?? Simulation.rand.array(Simulation.data.messages.filter((e) => e.length))[0];\n\n var addons = {\n default: {\n avatar,\n tier,\n playedAsCommunityGift: false,\n },\n gift: {\n sender,\n gifted: true,\n } as Sponsor$gift,\n community: {\n message,\n sender,\n bulkGifted: true,\n } as Sponsor$community,\n spam: {\n sender,\n gifted: true,\n isCommunityGift: true,\n } as Sponsor$spam,\n };\n\n var subTypes = ['default', 'gift', 'community', 'spam'];\n var subType = (options?.subType as string) ?? Simulation.rand.array(subTypes)[0];\n\n subType = subTypes.includes(subType) ? subType : 'default';\n\n const event: Youtube$Sponsor = {\n listener: 'sponsor-latest',\n event: {\n amount,\n name: name.toLowerCase(),\n displayName: name,\n providerId: '',\n\n ...addons.default,\n ...addons[subType as keyof typeof addons],\n\n _id: Simulation.rand.uuid(),\n sessionTop: false,\n type: 'sponsor',\n originalEventName: 'sponsor-latest',\n },\n };\n\n return event;\n }\n }\n }\n }\n },\n },\n };\n\n static fields(settings: FieldSettings): Record<string, StreamElementsField> {\n const defaultOptions: NormalizedFieldSettings = {\n from: 'main',\n endsWith: [],\n ignore: [],\n replace: {},\n subgroup: false,\n template: '• {key}',\n subgroupTemplate: '★ {key}',\n settings: {\n types: [\n [['size', 'width', 'number', 'gap', 'duration'], 'number'],\n [['options', 'dropdown', 'weight'], 'dropdown'],\n [['range', 'radius'], 'slider'],\n [['color', 'background'], 'colorpicker'],\n [['font-family', 'font', 'family'], 'googleFont'],\n ],\n addons: [\n [['slider', 'radius'], { step: 1, min: 0, max: 'inherit' }],\n [['options', 'dropdown'], { options: {} }],\n [\n ['weight'],\n {\n options: {\n '100': 'Thin',\n '200': 'Extra Light',\n '300': 'Light',\n '400': 'Regular',\n '500': 'Medium',\n '600': 'Semi Bold',\n '700': 'Bold',\n '800': 'Extra Bold',\n '900': 'Black',\n },\n },\n ],\n ],\n transforms: [\n [['size', 'width', 'number', 'gap', 'duration'], (value) => parseFloat(String(value))],\n [['font-family', 'font', 'family'], (value) => value],\n [['range', 'radius'], (value) => parseFloat(String(value))],\n [['options', 'dropdown'], (value) => value],\n [['weight'], (value) => value],\n [['color', 'background'], (value) => value],\n ],\n labels: [\n [['font-size'], ' • In pixels'],\n [['font-radius'], ' • In pixels'],\n ],\n },\n };\n\n function normalizeFieldSettings(settings: FieldSettings): NormalizedFieldSettings {\n return {\n ...defaultOptions,\n ...settings,\n endsWith: Array.isArray(settings.endsWith) ? settings.endsWith : defaultOptions.endsWith,\n ignore: Array.isArray(settings.ignore) ? settings.ignore : defaultOptions.ignore,\n replace: { ...defaultOptions.replace, ...(settings.replace ?? {}) },\n settings: {\n types: Array.isArray(settings.settings?.types) ? settings.settings.types : defaultOptions.settings.types,\n addons: Array.isArray(settings.settings?.addons) ? settings.settings.addons : defaultOptions.settings.addons,\n transforms: Array.isArray(settings.settings?.transforms) ? settings.settings.transforms : defaultOptions.settings.transforms,\n labels: Array.isArray(settings.settings?.labels) ? settings.settings.labels : defaultOptions.settings.labels,\n },\n subgroup: settings.subgroup ?? defaultOptions.subgroup,\n template: settings.template ?? defaultOptions.template,\n subgroupTemplate: settings.subgroupTemplate ?? defaultOptions.subgroupTemplate,\n from: settings.from ?? defaultOptions.from,\n };\n }\n\n const options = normalizeFieldSettings(settings);\n\n const extractCssVariables = (): Record<string, string> => {\n return Array.from(document.styleSheets)\n .filter(({ href }) => !href || href.startsWith(window.location.origin))\n .reduce(\n (acc, { cssRules }) => {\n if (!cssRules) return acc;\n Array.from(cssRules).forEach((rule) => {\n if (rule instanceof CSSStyleRule && rule.selectorText === options.from && Array.from(rule.style).some((prop) => prop.startsWith('--'))) {\n Array.from(rule.style)\n .filter((prop) => prop.startsWith('--'))\n .forEach((prop) => {\n acc[prop] = rule.style.getPropertyValue(prop).trim();\n });\n }\n });\n return acc;\n },\n {} as Record<string, string>,\n );\n };\n\n const allVariables = extractCssVariables();\n\n const filteredVariables = Object.entries(allVariables)\n .filter(([name]) => options.endsWith.some((suffix) => name.toLowerCase().endsWith(suffix.toLowerCase()) && !name.includes('-options-')))\n .filter(([name]) => !options.ignore.some((ignoreName) => name.toLowerCase() === ignoreName.toLowerCase()))\n .reduce(\n (acc, [name, value]) => {\n acc[name.replace('--', '')] = String(options.replace?.[name] ?? value);\n return acc;\n },\n {} as Record<string, string | number>,\n );\n\n let usedSubgroups: string[] = [];\n\n const fields = Object.entries(filteredVariables).reduce(\n (fields, [name, value]) => {\n let type = options.settings.types.find(([names]) => names.some((n) => name.toLowerCase().includes(n)))?.[1] || 'text';\n\n let transform = options.settings.transforms.find(([names]) => names.some((n) => name.toLowerCase().includes(n)))?.[1] || ((v: any) => v);\n\n let labelAddon = options.settings.labels.find(([names]) => names.some((n) => name.toLowerCase().includes(n)))?.[1] || '';\n\n let fieldAddons: Record<string, any> = {\n type: 'text',\n label: labelAddon,\n ...(options.settings.addons.find(([names]) => names.some((n) => name.toLowerCase().includes(n)))?.[1] || {}),\n };\n\n (['min', 'max', 'step', 'label', 'type'] as const).forEach((addonKey) => {\n const addonValue = allVariables[`--${name}-${addonKey}`];\n if (addonValue && addonValue.length) {\n fieldAddons[addonKey] = isNaN(parseFloat(addonValue)) ? String(addonValue).replace(/^['\"]|['\"]$/g, '') : String(parseFloat(addonValue));\n }\n });\n\n let subgroupKey = name\n .replace(/-(size|color|weight|width|height|gap|duration|radius|amount)$/g, '')\n .replace(/-([a-z])/g, (_, c) => c.toUpperCase())\n .replace(/[A-Z]/g, ' $&')\n .toLowerCase()\n .trim();\n\n let matchingSubgroupVars = Object.keys(filteredVariables).filter((key) =>\n key.startsWith(subgroupKey.replace(/[A-Z]/g, '-$&').replaceAll(' ', '-').toLowerCase().slice(1)),\n );\n\n if (\n options.subgroup &&\n !fields[`${subgroupKey.replace(/[A-Z]/g, '-$&').replaceAll(' ', '-').toLowerCase().slice(1)}-subgroup`] &&\n matchingSubgroupVars.length > 1 &&\n !usedSubgroups.includes(name)\n ) {\n usedSubgroups.push(...matchingSubgroupVars);\n\n fields[`${subgroupKey.replace(/[A-Z]/g, '-$&').replaceAll(' ', '-').toLowerCase().slice(1)}-subgroup`] = {\n type: 'hidden',\n label: options.subgroupTemplate.replaceAll('{key}', Simulation.string.capitalize(subgroupKey)),\n };\n }\n\n let label = Simulation.string.capitalize(\n name\n .replace(/-([a-z])/g, (_, c) => c.toUpperCase())\n .replace(/[A-Z]/g, ' $&')\n .toLowerCase(),\n );\n\n value = transform(value) ?? value;\n\n const getCustomOptions = () => {\n const values = Object.entries(allVariables)\n .filter(([key]) => key.startsWith(`--${name}-options-`))\n .reduce(\n (acc, [key, value]) => {\n const optionLabel = key.replace(`--${name}-options-`, '');\n if (optionLabel)\n acc[String(value)] = Simulation.string.capitalize(\n optionLabel\n .replace(/-([a-z])/g, (_, c) => c.toUpperCase())\n .replace(/[A-Z]/g, ' $&')\n .toLowerCase(),\n );\n return acc;\n },\n {} as Record<string, string>,\n );\n return Object.keys(values).length ? values : null;\n };\n\n const customOptions = getCustomOptions();\n\n if (customOptions) {\n type = 'dropdown';\n fieldAddons.options = customOptions;\n value = String(value);\n }\n\n Object.entries(fieldAddons).forEach(([key, val]) => {\n if ([false, 'inherit', 'auto', null].includes(val)) fieldAddons[key] = value;\n });\n\n fields[name] = {\n type: (fieldAddons.type as StreamElementsFieldTypes) || type,\n label: options.template.toString().replaceAll('{key}', Simulation.string.capitalize(label) + fieldAddons.label),\n value,\n min: fieldAddons.min,\n max: fieldAddons.max,\n step: fieldAddons.step,\n options: fieldAddons.options,\n };\n\n return fields;\n },\n {} as Record<string, StreamElementsField>,\n );\n\n const errors = Object.entries(fields).reduce(\n (acc, [name, field]) => {\n const hasInvalidLabel = field?.label?.includes('undefined');\n const isInvalidValue = !['hidden', 'button'].includes(field.type) && field.value === undefined;\n if (hasInvalidLabel || isInvalidValue) acc[name] = field;\n return acc;\n },\n {} as Record<string, StreamElementsField>,\n );\n\n if (Object.keys(errors).length) {\n Tixyel.logger.error('Simulation.fields: Detected errors in generated fields:', errors);\n\n throw new Error('Error while processing fields');\n }\n\n return fields;\n }\n\n static async start() {\n const localFiles = {\n fields: ['fields.json', 'cf.json', 'field.json', 'customfields.json'].find((file) => {\n try {\n new URL('./' + file, window.location.href);\n return true;\n } catch (error) {\n return false;\n }\n }),\n data: ['data.json', 'fielddata.json', 'fd.json', 'DATA.json'].find((file) => {\n try {\n new URL('./' + file, window.location.href);\n return true;\n } catch (error) {\n return false;\n }\n }),\n };\n\n const data: Record<string, string | number | boolean> = await fetch('./' + (localFiles.data ?? 'data.json'), {\n cache: 'no-store',\n })\n .then((res) => res.json())\n .catch(() => ({}));\n\n await fetch('./' + (localFiles.fields ?? 'fields.json'), {\n cache: 'no-store',\n })\n .then((res) => res.json())\n .then(async (customfields: Record<string, StreamElementsField>) => {\n const fields = Object.entries(customfields)\n .filter(([_, { value }]) => value != undefined)\n .reduce(\n (acc, [key, { value }]) => {\n if (data && data[key] !== undefined) value = data[key];\n\n acc[key] = value;\n\n return acc;\n },\n {\n ...data,\n } as Record<string, StreamElementsFieldValue>,\n );\n\n const load = await Simulation.generate.event.onWidgetLoad(fields, await Simulation.generate.session.get());\n\n window.dispatchEvent(new CustomEvent('onWidgetLoad', { detail: load }));\n });\n }\n\n static emulate = {\n twitch: {\n message(data: Record<string, string | number | boolean> = {}) {\n Simulation.generate.event.onEventReceived('twitch', 'message', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n follower(data: Record<string, string | number | boolean> = {}) {\n Simulation.generate.event.onEventReceived('twitch', 'follower-latest', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n raid(data: Record<string, string | number | boolean> = {}) {\n Simulation.generate.event.onEventReceived('twitch', 'raid-latest', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n cheer(data: Record<string, string | number | boolean> = {}) {\n Simulation.generate.event.onEventReceived('twitch', 'cheer-latest', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n subscriber(data: Record<string, string | number | boolean> & { subType?: 'default' | 'gift' | 'community' | 'spam' } = {}) {\n Simulation.generate.event.onEventReceived('twitch', 'subscriber-latest', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n },\n streamelements: {\n tip(data: Record<string, string | number | boolean> = {}) {\n Simulation.generate.event.onEventReceived('streamelements', 'tip-latest', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n },\n youtube: {\n message(data: Record<string, string | number | boolean> = {}) {\n Simulation.generate.event.onEventReceived('youtube', 'message', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n subscriber(data: Record<string, string | number | boolean> = {}) {\n Simulation.generate.event.onEventReceived('youtube', 'subscriber-latest', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n superchat(data: Record<string, string | number | boolean> = {}) {\n Simulation.generate.event.onEventReceived('youtube', 'superchat-latest', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n sponsor(data: Record<string, string | number | boolean> & { subType?: 'default' | 'gift' | 'community' | 'spam' } = {}) {\n Simulation.generate.event.onEventReceived('youtube', 'sponsor-latest', data).then((event) => {\n if (event) {\n Simulation.emulate.send('onEventReceived', event);\n }\n });\n },\n },\n kick: {},\n facebook: {},\n\n send<T extends 'onEventReceived' | 'onSessionUpdate' | 'onWidgetLoad'>(\n listener: T,\n event: T extends 'onEventReceived' ? onEventReceived : T extends 'onSessionUpdate' ? onSessionUpdate : onWidgetLoad,\n ): void {\n window.dispatchEvent(new CustomEvent(listener, { detail: event }));\n },\n };\n}\n","type LoggerThemeName = 'error' | 'success' | 'alert' | 'warn' | 'status' | 'received' | 'simple' | 'info';\n\ninterface LoggerTheme {\n name: LoggerThemeName;\n color?: string;\n background?: string;\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n fontSize?: number;\n template?: {\n before?: string;\n after?: string;\n };\n}\n\ntype LoggerLogFunction = (...args: any[]) => void;\n\ntype LoggerMethods = Record<LoggerThemeName, LoggerLogFunction>;\n\nexport class Logger implements LoggerMethods {\n private readonly themes: LoggerTheme[] = [\n {\n name: 'error',\n color: '#721c24',\n background: '#f8d7da',\n bold: true,\n italic: false,\n fontSize: 18,\n template: { before: ' ✖ ', after: ' ' },\n },\n {\n name: 'success',\n color: '#155724',\n background: '#d4edda',\n bold: true,\n italic: false,\n fontSize: 18,\n template: { before: ' ✔ ', after: ' ' },\n },\n {\n name: 'alert',\n color: '#856404',\n background: '#fff3cd',\n bold: true,\n italic: false,\n fontSize: 20,\n template: { before: ' ⚠ ', after: ' ' },\n },\n {\n name: 'warn',\n color: '#856404',\n background: '#fff3cd',\n bold: true,\n italic: false,\n fontSize: 20,\n template: { before: ' ⚠ ', after: ' ' },\n },\n {\n name: 'status',\n color: '#0c5460',\n background: '#d1ecf1',\n bold: true,\n italic: false,\n fontSize: 12,\n template: { before: ' · ', after: '' },\n },\n {\n name: 'received',\n color: '#E6BBFF',\n background: 'transparent',\n bold: false,\n italic: false,\n fontSize: 14,\n template: { before: ' ⬇ ', after: '' },\n },\n {\n name: 'simple',\n color: '#f5c6cb',\n background: 'transparent',\n bold: false,\n italic: false,\n fontSize: 14,\n template: { before: '', after: '' },\n },\n {\n name: 'info',\n color: '#f6c6cb',\n background: 'transparent',\n bold: false,\n italic: false,\n fontSize: 14,\n template: { before: ' ℹ ', after: '' },\n },\n ];\n\n error: LoggerLogFunction = () => {};\n success: LoggerLogFunction = () => {};\n alert: LoggerLogFunction = () => {};\n warn: LoggerLogFunction = () => {};\n status: LoggerLogFunction = () => {};\n received: LoggerLogFunction = () => {};\n simple: LoggerLogFunction = () => {};\n info: LoggerLogFunction = () => {};\n\n constructor() {\n this.themes.forEach((theme) => {\n const styles: string[] = [];\n\n if (theme.background && theme.background !== 'transparent') styles.push(`background-color: ${theme.background}`);\n if (theme.color) styles.push(`color: ${theme.color}`);\n if (theme.bold) styles.push('font-weight: bold');\n if (theme.italic) styles.push('font-style: italic');\n if (theme.underline) styles.push('text-decoration: underline');\n if (theme.fontSize) styles.push(`font-size: ${theme.fontSize}px`);\n\n const signal = '%c';\n\n const logFn: LoggerLogFunction = (...args: any[]) => {\n const textContent = Array.from(args).filter((arg) => typeof arg === 'string' || typeof arg === 'number');\n const objectContent = Array.from(args).filter((arg) => typeof arg !== 'string' && typeof arg !== 'number');\n const css = textContent.length > 0 ? styles.join('; ') : null;\n\n const log: any[] = [\n textContent.length > 0 ? signal + (theme.template?.before ?? '') + textContent.join(' ') + (theme.template?.after ?? '') : null,\n css,\n ...objectContent,\n ].filter(Boolean);\n\n return console.log(...log);\n };\n\n this[theme.name] = logFn;\n });\n }\n}\n","import { Client } from '../client/index.js';\nimport { Tixyel } from '../index.js';\n\ninterface ButtonOptions {\n field: string | ((field: string, value: string | boolean | number) => boolean);\n template?: string;\n run: (field: string, value: string | boolean | number) => void;\n}\n\nexport class Button {\n field: ButtonOptions['field'] = 'button';\n\n template: string = 'button';\n\n run!: ButtonOptions['run'];\n\n constructor(options: ButtonOptions) {\n if (!(window.client instanceof Client)) return;\n\n this.field = options.field ?? this.field;\n this.template = options.template ?? this.template;\n\n this.run = options.run;\n\n // Register the button in the client actions\n window.client.actions.buttons.push(this);\n\n window.client.emit('action', this, 'created');\n }\n\n parse(field: string, value: string | boolean | number): Button {\n var f = field.replace(typeof this.field === 'string' ? this.field : (this.template.replace(/\\{[^}]*\\}/g, '') ?? ''), '').trim();\n\n try {\n this.run.apply(window.client, [f.length ? f : (field ?? field), value]);\n } catch (error) {\n throw new Error(`Error running button \"${this.field}\": ${error instanceof Error ? error.message : error}`);\n }\n\n return this;\n }\n\n static execute(field: string, value: string | boolean | number): boolean {\n try {\n if (!(window.client instanceof Client)) return false;\n\n if (window.client.actions.buttons.length) {\n const button = window.client.actions.buttons.find((b) =>\n typeof b.field === 'string' ? b.field === field : typeof b.field === 'function' ? b.field(field, value) : false,\n );\n\n if (button && button instanceof Button) {\n try {\n button.parse(field, value);\n window.client.emit('action', button, 'executed');\n\n Tixyel.logger.received(`Button executed: ${field} with value: ${value}`);\n } catch (error) {\n Tixyel.logger.error(`Error executing button \"${field}\": ${error instanceof Error ? error.message : error}`);\n }\n\n return true;\n }\n }\n } catch (error) {\n return false;\n } finally {\n return false;\n }\n }\n}\n","import { Client } from '../client/index.js';\nimport { Tixyel } from '../index.js';\nimport { Twitch$Message } from '../types/streamelements/events/twitch/message.js';\nimport { Youtube$Message } from '../types/streamelements/events/youtube/message.js';\n\ninterface CommandOptions {\n prefix?: string;\n name: string;\n description?: string;\n arguments?: boolean;\n run: (this: Client, args: string[], event: CommandEvent) => void;\n test?: string;\n aliases?: string[];\n permissions?: string[];\n admins?: string[];\n}\n\ntype CommandEvent = { provider: 'twitch'; data: Twitch$Message } | { provider: 'youtube'; data: Youtube$Message } | { provider: 'kick'; data: any };\n\nexport class Command {\n prefix: string = '!';\n\n name!: string;\n description!: string;\n\n arguments: boolean = false;\n\n test: string = `${this.prefix}${this.name} arg1 arg2`;\n\n aliases: string[] = [];\n permissions?: string[] | boolean = undefined;\n admins: string[] = [];\n\n constructor(options: CommandOptions) {\n if (!(window.client instanceof Client)) return;\n\n this.prefix = options.prefix ?? this.prefix;\n this.name = options.name;\n this.description = options.description ?? this.description;\n this.arguments = options.arguments ?? this.arguments;\n\n this.run = options.run;\n\n this.test = options.test ?? this.test;\n this.aliases = options.aliases ?? this.aliases;\n this.permissions = options.permissions ?? this.permissions;\n this.admins = options.admins ?? this.admins;\n\n // Register the command in the client actions\n window.client.actions.commands.push(this);\n\n window.client.emit('action', this, 'created');\n }\n\n run(this: Client, args: string[], event: CommandEvent): void {}\n\n verify(nickname: string, roles: string[], args: string[]): boolean {\n if (this.arguments === true && (!args || !args.length)) {\n return false;\n }\n\n if (this.admins.some((a) => nickname.toLocaleLowerCase() === a.toLocaleLowerCase())) {\n return true;\n }\n\n if (this.permissions === true || typeof this.permissions === 'undefined' || (Array.isArray(this.permissions) && !this.permissions.length)) {\n return false;\n }\n\n if (Array.isArray(this.permissions) && this.permissions.some((p) => roles.map((r) => r.toLowerCase()).includes(p.toLowerCase()))) {\n return true;\n }\n\n return false;\n }\n\n parse(text: string, event: CommandEvent): boolean {\n if (!(window.client instanceof Client)) return false;\n\n const args = text\n .replace(this.prefix, '')\n .split(' ')\n .slice(1)\n .map((a) => a.trim());\n\n var nickname: string = '';\n var roles: string[] = [];\n\n const rAliases = { bits: 'cheer', premium: 'prime' };\n\n switch (event.provider) {\n case 'twitch': {\n const data = event.data;\n\n nickname = data.event.data.nick || data.event.data.displayName;\n\n if (data.event.data.tags?.badges) {\n const tags = data.event.data.tags.badges.toString().replace(/\\/\\d+/g, '').split(',');\n\n roles = tags.map((t) => (t in rAliases ? rAliases[t as keyof typeof rAliases] : t));\n }\n\n break;\n }\n case 'youtube': {\n const data = event.data;\n\n const rMap = {\n isVerified: 'verified',\n isChatOwner: 'owner',\n isChatSponsor: 'sponsor',\n isChatModerator: 'moderator',\n };\n\n nickname = data.event.data.nick || data.event.data.displayName;\n\n roles = Object.entries(data.event.data.authorDetails)\n .filter(([k, v]) => k.startsWith('is') && v)\n .map(([k]) => rMap[k as keyof typeof rMap])\n .filter(Boolean);\n\n break;\n }\n case 'kick': {\n return false;\n\n break;\n }\n }\n\n const verify = this.verify(nickname, roles, args);\n\n if (verify === true) {\n this.run.apply(window.client, [args, event]);\n }\n\n return verify;\n }\n\n static execute(received: CommandEvent): boolean {\n if (!(window.client instanceof Client)) return false;\n\n const data = received.data;\n\n try {\n if (window.client.actions.commands.length && window.client.actions.commands.some((c) => data.event.data.text.startsWith(c.prefix))) {\n const command = window.client.actions.commands.find((c) => data.event.data.text.replace(c.prefix, '').split(' ')[0] === c.name);\n\n if (command && command instanceof Command) {\n command.parse(data.event.data.text, received);\n\n window.client.emit('action', command, 'executed');\n\n Tixyel.logger.received(`Command executed: ${data.event.data.text} by ${data.event.data.nick || data.event.data.displayName}`, data);\n\n return true;\n }\n }\n } catch (error) {\n return false;\n } finally {\n return false;\n }\n }\n}\n","import { Client } from '../client/index.js';\nimport { Tixyel } from '../index.js';\nimport { EventProvider } from './EventProvider.js';\n\ntype QueueEvents<T> = {\n load: [];\n cancel: [];\n update: [queue: QueueItem<T>[], priorityQueue: QueueItem<T>[], history: QueueItem<T>[], timeouts: Array<ReturnType<typeof setTimeout>>];\n process: [item: QueueItem<T>, queue: useQueue<T>];\n};\n\ntype QueueProps = {\n isoDate: string;\n isLoop: boolean;\n isPriority: boolean;\n isImmediate: boolean;\n};\n\ntype QueueItem<T> = { value: T } & QueueProps;\n\ntype QueueProcessor<T> = (item: T, queue: useQueue<T>) => Promise<any>;\n\ntype QueueDuration = number | boolean | undefined;\n\ninterface QueueOptions<T> {\n /**\n * Duration between processing each item in milliseconds. Set to `0` or `false` for immediate processing.\n */\n duration: QueueDuration;\n /**\n * Function to process each item in the queue.\n */\n processor: QueueProcessor<T>;\n}\n\nexport class useQueue<T> extends EventProvider<QueueEvents<T>> {\n queue: QueueItem<T>[] = [];\n priorityQueue: QueueItem<T>[] = [];\n history: QueueItem<T>[] = [];\n\n private timeouts: Array<ReturnType<typeof setTimeout>> = [];\n\n public running: boolean = false;\n\n public duration: QueueDuration = undefined;\n\n private loaded: boolean = false;\n\n public processor!: QueueProcessor<T>;\n\n constructor(options: QueueOptions<T>) {\n if (!(window.client instanceof Client)) return;\n\n super();\n\n this.duration = options.duration;\n this.processor = options.processor;\n\n window.client.on('load', () => {\n this.emit('load');\n\n this.loaded = true;\n });\n }\n\n public enqueue(value: T, options: Partial<QueueProps> = {}): this {\n const item: QueueItem<T> = {\n isoDate: new Date().toISOString(),\n isLoop: options?.isLoop ?? false,\n isPriority: options?.isPriority ?? false,\n isImmediate: options?.isImmediate ?? false,\n value,\n };\n\n const hasItems = this.hasItems();\n\n if (item.isPriority && item.isImmediate) {\n this.cancel();\n this.priorityQueue.unshift(item);\n } else {\n const targetQueue = item.isPriority ? this.priorityQueue : this.queue;\n\n targetQueue.push(item);\n }\n\n // Always process immediately if it's not running\n if (this.running === false && hasItems === false) {\n this.run();\n }\n\n this.emit('update', this.queue, this.priorityQueue, this.history, this.timeouts);\n\n return this;\n }\n\n private async run() {\n if (!this.hasItems()) {\n this.running = false;\n return;\n }\n\n this.running = true;\n\n await this.next();\n\n if (typeof this.duration === 'number' && this.duration > 0) {\n this.timeouts.push(setTimeout(() => this.run(), this.duration));\n } else if (this.duration === 0 || (this.duration !== -1 && this.duration !== false)) {\n this.run();\n }\n }\n\n private async next() {\n const nextItem = this.priorityQueue.length > 0 ? this.priorityQueue.shift() : this.queue.shift();\n\n if (!nextItem) {\n this.running = false;\n\n return;\n }\n\n try {\n await this.processor.apply(this, [nextItem.value, this]);\n\n this.emit('process', nextItem, this);\n } catch (error) {\n Tixyel.logger.error(`Error during item processing: ${error instanceof Error ? error.message : String(error)}`);\n }\n\n this.history.push(nextItem);\n\n const targetQueue = nextItem.isPriority ? this.priorityQueue : this.queue;\n\n if (nextItem.isLoop) targetQueue.push(nextItem);\n }\n\n public resume() {\n if (this.running) {\n this.cancel();\n }\n\n if (this.hasItems()) this.run();\n\n return this;\n }\n\n public update(save: Partial<useQueue<T>>): this {\n this.queue = save.queue ?? this.queue;\n this.priorityQueue = save.priorityQueue ?? this.priorityQueue;\n this.history = save.history ?? this.history;\n\n if (this.hasItems() && this.running === false) {\n window.client?.on('load', () => this.run());\n }\n\n return this;\n }\n\n public cancel() {\n if (this.running) {\n this.timeouts.forEach((timeout) => clearTimeout(timeout));\n this.timeouts = [];\n this.running = false;\n\n this.emit('cancel');\n }\n }\n\n public hasItems(): boolean {\n return this.queue.length > 0 || this.priorityQueue.length > 0;\n }\n\n public override on<K extends keyof QueueEvents<T>>(eventName: K, callback: (this: useQueue<T>, ...args: QueueEvents<T>[K]) => void): this {\n if (eventName === 'load' && this.loaded) {\n callback.apply(this);\n\n return this;\n }\n\n super.on(eventName, callback);\n\n return this;\n }\n}\n","import { Button } from '../actions/button.js';\nimport { Command } from '../actions/command.js';\nimport { Simulation } from '../simulation/index.js';\nimport { ClientEvents, Provider } from '../types/client.js';\nimport { _storages } from '../utils/useStorage.js';\nimport { Client, ClientStorageOptions } from './index.js';\n\nwindow.addEventListener('load', () => {\n if (window.client instanceof Client) {\n Simulation.start();\n }\n});\n\nwindow.addEventListener('onWidgetLoad', async (data) => {\n const { detail } = data;\n\n if (window.client instanceof Client) {\n const client = window.client;\n\n client.fields = detail.fieldData;\n client.session = detail.session.data;\n\n client.details = {\n ...client.details,\n user: detail.channel,\n currency: detail.currency,\n overlay: detail.overlay,\n };\n\n if (detail.channel.id && !detail.emulated) {\n await fetch(`https://api.streamelements.com/kappa/v2/channels/${detail.channel.id}/`)\n .then((res) => res.json())\n .then((profile) => {\n if (profile.provider) {\n client.details.provider = profile.provider;\n\n return profile.provider;\n } else {\n client.details.provider = 'local';\n }\n })\n .catch(() => {\n client.details.provider = 'local';\n });\n } else {\n client.details.provider = 'local';\n }\n\n client.emit('load', detail);\n\n client.loaded = true;\n\n client.storage.on('load', (data) => {\n if (data) {\n const clearExpired = <T extends Record<string, ClientStorageOptions<string>>>(data: T) => {\n const now = Date.now();\n const cleanedData: any = {};\n\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n const entry = data[key];\n\n if (entry.expire && entry.expire > now) {\n cleanedData[key] = entry;\n }\n }\n }\n\n return cleanedData as T;\n };\n\n const users = clearExpired(data['user'] || {});\n const avatars = clearExpired(data['avatar'] || {});\n const pronouns = clearExpired(data['pronoun'] || {});\n const emotes = clearExpired(data['emote'] || {});\n\n client.storage.update({\n user: users,\n avatar: avatars,\n pronoun: pronouns,\n emote: emotes,\n });\n }\n\n if (detail.channel.providerId.length) {\n client.storage.add(`avatar.${detail.channel.providerId.toLowerCase()}`, {\n value: detail.channel.avatar,\n timestamp: Date.now(),\n expire: Date.now() + client.cache.avatar * 60 * 60 * 1000,\n });\n }\n });\n }\n});\n\nwindow.addEventListener('onSessionUpdate', (data) => {\n const { detail } = data;\n\n if (window.client instanceof Client) {\n const client = window.client;\n\n client.session = detail.session;\n\n client.emit('session', detail.session);\n }\n});\n\nwindow.addEventListener('onEventReceived', ({ detail }) => {\n if (window.client instanceof Client) {\n var provider: Provider =\n // @ts-ignore\n detail.event?.provider || detail.event?.service || detail.event?.data?.provider || window.client.details.provider;\n\n const actAsStreamElements = ['kvstore:update', 'bot:counter', 'alertService:toggleSound', 'event:skip', 'tip-latest', 'event:test'];\n\n if (actAsStreamElements.some((l) => l === detail.listener)) provider = 'streamelements';\n\n const received = { provider: provider, data: detail } as ClientEvents;\n\n switch (received.provider) {\n case 'streamelements': {\n const data = received.data;\n\n switch (data.listener) {\n case 'tip-latest': {\n const event = data.event;\n break;\n }\n case 'event:skip': {\n const event = data.event;\n break;\n }\n case 'event:test': {\n switch (data.event.listener) {\n case 'widget-button': {\n const event = data.event;\n\n Button.execute(event.field, event.value);\n\n break;\n }\n case 'subscriber-latest': {\n const event = data.event;\n break;\n }\n\n // ... alot more\n }\n\n break;\n }\n case 'kvstore:update': {\n const event = data.event;\n\n if (_storages.length) {\n var storage = _storages.find((s) => s.id === event.data.key.replace('customWidget.', ''));\n\n if (storage) {\n storage.update(event.data.value);\n }\n }\n\n break;\n }\n case 'bot:counter': {\n const event = data.event;\n break;\n }\n case 'alertService:toggleSound': {\n const event = data.event;\n\n client.details.overlay.muted = Boolean(event.muted);\n\n break;\n }\n }\n\n break;\n }\n case 'twitch': {\n const data = received.data;\n\n switch (data.listener) {\n case 'delete-message': {\n const event = data.event;\n break;\n }\n case 'delete-messages': {\n const event = data.event;\n break;\n }\n case 'message': {\n const event = data.event;\n break;\n }\n case 'follower-latest': {\n const event = data.event;\n break;\n }\n case 'cheer-latest': {\n const event = data.event;\n break;\n }\n case 'subscriber-latest': {\n if (!data.event.gifted && !data.event.bulkGifted && !data.event.isCommunityGift) {\n // normal\n const event = data.event;\n } else if (data.event.gifted && !data.event.bulkGifted && !data.event.isCommunityGift) {\n // gift\n const event = data.event;\n } else if (data.event.gifted && !data.event.bulkGifted && data.event.isCommunityGift) {\n // community gift spam\n const event = data.event;\n } else if (!data.event.gifted && data.event.bulkGifted && !data.event.isCommunityGift) {\n // community gift\n const event = data.event;\n }\n\n break;\n }\n case 'raid-latest': {\n const event = data.event;\n break;\n }\n }\n\n break;\n }\n case 'youtube': {\n const data = received.data;\n\n switch (data.listener) {\n case 'message': {\n const event = data.event;\n\n Command.execute({ provider: 'youtube', data: data });\n\n break;\n }\n case 'subscriber-latest': {\n const event = data.event;\n\n break;\n }\n case 'sponsor-latest': {\n const event = data.event;\n\n if (!data.event.gifted && !data.event.bulkGifted && !data.event.isCommunityGift) {\n // normal\n const event = data.event;\n } else if (data.event.gifted && !data.event.bulkGifted && !data.event.isCommunityGift) {\n // gift\n const event = data.event;\n } else if (data.event.gifted && !data.event.bulkGifted && data.event.isCommunityGift) {\n // community gift spam\n const event = data.event;\n } else if (!data.event.gifted && data.event.bulkGifted && !data.event.isCommunityGift) {\n // community gift\n const event = data.event;\n }\n\n break;\n }\n case 'superchat-latest': {\n const event = data.event;\n\n break;\n }\n }\n\n break;\n }\n case 'kick': {\n const data = received.data;\n\n break;\n }\n case 'facebook': {\n const data = received.data;\n\n break;\n }\n }\n\n window.client.emit('event', received);\n }\n});\n","import { SE_API } from '../types/streamelements/index.js';\n\nconst LOCAL_SE_API: SE_API & { store: { list: Record<string, any> } } = {\n getOverlayStatus: () => {\n return {\n isEditorMode: false,\n muted: false,\n };\n },\n resumeQueue: () => {},\n responses: {} as Record<string, any>,\n sendMessage(message: string, data: object) {},\n counters: {\n get(key: string): number | null {\n return null;\n },\n },\n sanitize(message: string): string {\n return message;\n },\n cheerFilter(message: string): string {\n return message;\n },\n setField(key: string, value: string | number | boolean | undefined, reload: boolean) {},\n\n store: {\n set: function (name: string, obj: any) {\n this.list[name] = obj;\n\n localStorage.setItem('SE_API-STORE', JSON.stringify(LOCAL_SE_API.store.list));\n },\n get: async function (name: string) {\n if (this.list[name]) return this.list[name];\n else return null;\n },\n list: {} as Record<string, any>,\n },\n};\n\nexport async function initializeLocalSEAPI() {\n let lastStore = localStorage.getItem('SE_API-STORE') ?? '';\n\n let result = lastStore ? JSON.parse(lastStore) : {};\n\n LOCAL_SE_API.store.list = result;\n\n return LOCAL_SE_API;\n}\n","import { Client } from './client/index.js';\nimport { Simulation } from './simulation/index.js';\nimport { onEventReceivedEvent } from './types/streamelements/events/onEventReceived.js';\nimport { onSessionUpdateEvent } from './types/streamelements/events/onSessionUpdate.js';\nimport { onWidgetLoadEvent } from './types/streamelements/events/onWidgetLoad.js';\nimport { Logger } from './utils/Logger.js';\nimport { Button } from './actions/button.js';\nimport { Command } from './actions/command.js';\nimport { findEmotesInText, replaceEmotesWithHTML } from './utils/Message.js';\nimport { EventProvider } from './utils/EventProvider.js';\nimport { useStorage } from './utils/useStorage.js';\nimport { useQueue } from './utils/useQueue.js';\nimport type { SE_API as SE_API_TYPE } from './types/streamelements/index.js';\nimport './client/listener.js';\nimport { initializeLocalSEAPI } from './streamelements/api.js';\n\nexport * from './types/index.js';\n\nexport const USE_SE_API: Promise<SE_API_TYPE> = typeof SE_API !== 'undefined' ? Promise.resolve(SE_API) : Promise.resolve(initializeLocalSEAPI());\n\nexport const Tixyel = {\n Client,\n Simulation,\n logger: new Logger(),\n utils: {\n findEmotesInText,\n replaceEmotesWithHTML,\n },\n modules: {\n Button,\n Command,\n EventProvider,\n useStorage,\n useQueue,\n },\n USE_SE_API,\n} as const;\n\ntype _Tixyel_ = typeof Tixyel;\n\ndeclare global {\n interface Window {\n Tixyel: _Tixyel_;\n client: Client;\n }\n\n interface WindowEventMap {\n onWidgetLoad: onWidgetLoadEvent;\n onSessionUpdate: onSessionUpdateEvent;\n onEventReceived: onEventReceivedEvent;\n }\n\n const Tixyel: _Tixyel_;\n var client: Client;\n\n const SE_API: SE_API_TYPE;\n}\n\nif (typeof window !== 'undefined') {\n window.Tixyel = Tixyel;\n}\n"],"names":["EventProvider","eventName","args","listener","callback","listeners","fn","wrapper","_storages","useStorage","options","USE_SE_API","se","save","data","path","value","obj","keys","current","i","Client","Alejo$Pronouns","findEmotesInText","text","emotes","Simulation","result","emote","name","searchIndex","start","index","before","after","b","replaceEmotesWithHTML","imgUrl","generateBadges","badges","provider","e","max","_","badge","details","acc","key","avatars","messages","names","tts","items","tiers","_Simulation","settings","defaultOptions","normalizeFieldSettings","allVariables","href","cssRules","rule","prop","filteredVariables","suffix","ignoreName","usedSubgroups","fields","type","n","transform","v","fieldAddons","addonKey","addonValue","subgroupKey","c","matchingSubgroupVars","label","customOptions","values","optionLabel","val","errors","field","hasInvalidLabel","isInvalidValue","Tixyel","localFiles","file","res","customfields","load","opacity","color","hex","ohex","decimal","percentage","str","s","alpha","r","g","a","h","l","min","float","rand","threshold","length","chars","arr","rangeDays","past","string","pattern","promises","match","groups","promise","replacements","template","mergeSpanStyles","flatten","k","username","amount","REGEX","HTML_MODIFIERS","param","MODIFIERS","ALIASES","applyModifier","canonical","aliases","alias","use","replaceAll","fullMatch","modifier","newValue","parseModifiers","len","parseText","stopChar","out","parseModifier","paramStart","outerStyle","innerHTML","innerStyle","content","element","returnOnly","customParent","base","parent","parentRect","elementWidth","elementHeight","scaleX","scaleY","finalScale","minScaleX","minScaleY","minScale","htmlString","startIndex","doc","charIndex","processNode","node","char","span","clone","child","processed","childNode","body","prefix","itemPath","types","available","generate","generateRecentData","config","generateObjectData","processedKey","processTypedConfig","session","subKey","subValue","currency","currencies","randomProvider","randomEvent","message","renderedText","userId","time","avatar","tier","sender","addons","subTypes","subType","muted","event","Logger","theme","styles","signal","logFn","textContent","arg","objectContent","css","log","Button","f","error","button","Command","nickname","roles","p","rAliases","t","rMap","verify","received","command","useQueue","item","hasItems","nextItem","targetQueue","timeout","detail","client","profile","clearExpired","now","cleanedData","entry","users","pronouns","storage","LOCAL_SE_API","reload","initializeLocalSEAPI","lastStore"],"mappings":"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A,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAA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"}