Add twitch chat integration

This commit is contained in:
2026-01-13 17:55:08 +01:00
parent 9abb5e88dc
commit 4f1eb2fc82
6 changed files with 240 additions and 1 deletions

View File

@@ -9,6 +9,7 @@ const errorKeys = new Set();
const allowedImportUrls = new Set();
const nativeImportScripts = typeof self.importScripts === "function" ? self.importScripts.bind(self) : null;
const sharedDependencyUrls = ["/js/vendor/three.min.js", "/js/vendor/GLTFLoader.js", "/js/vendor/OBJLoader.js"];
let chatMessages = [];
function normalizeUrl(url) {
try {
@@ -137,6 +138,7 @@ function updateScriptContexts() {
script.context.channelName = channelName;
script.context.width = script.canvas?.width ?? 0;
script.context.height = script.canvas?.height ?? 0;
script.context.chatMessages = chatMessages;
});
}
@@ -180,7 +182,7 @@ function stopTickLoopIfIdle() {
function createScriptHandlers(source, context, state, sourceLabel = "") {
const contextPrelude =
"const { canvas, ctx, channelName, width, height, now, deltaMs, elapsedMs, assets } = context;";
"const { canvas, ctx, channelName, width, height, now, deltaMs, elapsedMs, assets, chatMessages } = context;";
const sourceUrl = sourceLabel ? `\n//# sourceURL=${sourceLabel}` : "";
const factory = new Function(
"context",
@@ -239,6 +241,7 @@ self.addEventListener("message", (event) => {
deltaMs: 0,
elapsedMs: 0,
assets: Array.isArray(payload.attachments) ? payload.attachments : [],
chatMessages,
};
let handlers = {};
try {
@@ -291,4 +294,9 @@ self.addEventListener("message", (event) => {
script.context.assets = Array.isArray(payload.attachments) ? payload.attachments : [];
refreshAllowedFetchUrls();
}
if (type === "chatMessages") {
chatMessages = Array.isArray(payload?.messages) ? payload.messages : [];
updateScriptContexts();
}
});