From 030dfdb956bb6f46984909d2e10e36f7dd2f9bdb Mon Sep 17 00:00:00 2001 From: Luxferre Date: Sun, 15 Sep 2024 14:58:30 +0300 Subject: [PATCH] basic Kick support --- README.md | 2 +- src/kick.go | 4 ++-- src/server.go | 3 +++ webroot/script.js | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3996c4c..def9d3f 100644 --- a/README.md +++ b/README.md @@ -285,7 +285,7 @@ Work in progress. Needs additional testing. Basic messages work as expected. ### Kick (internal) -Work in progress. Relies on an API that hasn't been officially released yet. Needs additional testing. Basic messages work as expected. +Work in progress. Relies on an API that hasn't been officially released yet and an external library to bypass CloudFlare checks. Needs additional testing. Basic messages work as expected. ## FAQ diff --git a/src/kick.go b/src/kick.go index 3876390..7b02c71 100644 --- a/src/kick.go +++ b/src/kick.go @@ -79,7 +79,7 @@ func kk_handle_emotes(text string) string { re := regexp.MustCompile(regexp.QuoteMeta("[emote:") + "[^:]+:[^" + mbracket + "]+" + mbracket) text = re.ReplaceAllStringFunc(text, func(emotestr string) string { parts := strings.Split(emotestr, ":") - return "#KKEMOTE-" + parts[1] + "#" + return " #KKEMOTE-" + parts[1] + "# " }) return text } @@ -126,7 +126,7 @@ func kk_process_message(rawmsg map[string]interface{}) { if _, ok := metadata["badges"]; ok && len(metadata["badges"].([]interface{})) > 0 { for _, badge := range metadata["badges"].([]interface{}) { if badge.(map[string]interface{})["active"].(bool) { - out_message.Type += "-" + badge.(map[string]interface{})["text"].(string) + out_message.Type += "-" + strings.ToLower(badge.(map[string]interface{})["text"].(string)) } } } diff --git a/src/server.go b/src/server.go index eb0932a..49e6cfa 100644 --- a/src/server.go +++ b/src/server.go @@ -10,6 +10,7 @@ import ( "fmt" "log" "strings" + "slices" "encoding/json" "net/http" "io/ioutil" @@ -98,6 +99,8 @@ func sseHandler(w http.ResponseWriter, r *http.Request) { /* close the channel after exiting the function */ defer func() { close(transport) + idx := slices.IndexFunc(sse_transports, func(c chan string) bool { return c == transport }) + sse_transports[idx] = nil transport = nil }() diff --git a/webroot/script.js b/webroot/script.js index 0f0456b..1e9f907 100644 --- a/webroot/script.js +++ b/webroot/script.js @@ -59,7 +59,7 @@ function gooseAppendMessage(id, type, timestamp, username, text, icon) { } document.getElementById("msglist").innerHTML += html /* autoscroll to the end */ - window.scrollTo(0, document.body.scrollHeight) + window.setTimeout(function(){window.scrollTo(0, document.body.scrollHeight)}, 100) } /* entry point, set up an event source */