From 842452f69020e7ef820ba525e636a8c78002d17d Mon Sep 17 00:00:00 2001 From: Luxferre Date: Mon, 23 Sep 2024 21:46:45 +0300 Subject: [PATCH] Implemented channel point rewards --- src/twitch-ws.go | 53 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/twitch-ws.go diff --git a/src/twitch-ws.go b/src/twitch-ws.go new file mode 100644 index 0000000..3c59a97 --- /dev/null +++ b/src/twitch-ws.go @@ -0,0 +1,53 @@ +/* + StreamGoose Twitch backend — WebSocket PubSub API part + + Created by Luxferre in 2024, released into public domain +*/ + +package main + +import ( + "fmt" + + "github.com/plugnburn/go-twitch-pubsub" +) + +/* process a single PubSub message */ +func tw_process_pubsub_msg(msg *twitchpubsub.PointsEvent) { + userinput := msg.UserInput + rewname := msg.Reward.Title + rewcost := msg.Reward.Cost + rewprompt := msg.Reward.Desc + + /* format the reward text */ + reward_text := fmt.Sprintf("%s redeemed %s for %d points", msg.User.DisplayName, rewname, rewcost) + if rewprompt != "" { + reward_text += fmt.Sprintf(" (with %s = %s)", rewprompt, userinput) + } + reward_text += "!" + + /* create output message */ + out_message := ChatMessage { + Type: "tw^system^reward", + NativeId: msg.Id, + AuthorId: msg.User.Id, + Timestamp: msg.RedeemedAt.UTC().Format("2006-01-02T15:04:05Z"), + Username: msg.User.DisplayName, + Text: reward_text, + Icon: "", + } + + /* finally, send it to the message broker via the message_transport channel */ + message_transport <- out_message + +} + +/* main loop to read PubSub messages */ +func tw_ws_pubsub_readloop() { + client := twitchpubsub.NewClient(twitchpubsub.DefaultHost) + client.Listen("community-points-channel-v1." + TW_BROADCASTER_ID, TW_OAUTH_TOKEN) + client.OnPointsEvent(func (channelId string, data *twitchpubsub.PointsEvent) { + tw_process_pubsub_msg(data) + }) + client.Start() +}