summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/chat.js45
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