diff options
| author | ilotterytea <iltsu@alright.party> | 2025-10-24 20:01:36 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2025-10-24 20:01:36 +0500 |
| commit | e77d6b63cbfc5a13a83d7a1badc56c7bf624895d (patch) | |
| tree | a01cde3aa3a343bffb81209a790f3e294e2cdcb9 /scripts/chat.js | |
| parent | 8ca124c660700202fff322bf991de9a13cfad144 (diff) | |
feat: connect to twitch chat
Diffstat (limited to 'scripts/chat.js')
| -rw-r--r-- | scripts/chat.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/scripts/chat.js b/scripts/chat.js new file mode 100644 index 0000000..d26a4ba --- /dev/null +++ b/scripts/chat.js @@ -0,0 +1,45 @@ +function addMessage(author, message) { + const messages = document.getElementById("messages"); + if (!messages) { + return; + } + + const elem = document.createElement("p"); + elem.classList.add("message"); + + elem.innerHTML = `<span class="author">${author}:</span> ${message}`; + + messages.append(elem); + + window.scrollTo(0, document.body.scrollHeight); +} + +function connectToChat(host, nick, password, room) { + const socket = new WebSocket(host); + + socket.addEventListener("open", () => { + socket.send(`NICK ${nick}`); + socket.send(`PASS ${password}`); + socket.send("CAP REQ :twitch.tv/tags"); + socket.send(`JOIN #${room}`); + addMessage("Chat", "Connected!"); + }); + + socket.addEventListener("message", (e) => { + const lines = e.data.split("\r\n"); + + for (const line of lines) { + const l = line.trim(); + if (l.length == 0) { + continue; + } + addMessage("Message", l); + } + }); + + socket.addEventListener("close", (e) => { + addMessage("Chat", `Disconnected: ${e.reason}`); + addMessage("Chat", "Reconnecting in 5 seconds..."); + setTimeout(() => connectToChat(host, nick, password, room), 5000); + }); +}
\ No newline at end of file |
