54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
/*
|
|||
|
|
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()
|
||
|
|
}
|