Implemented channel point rewards
This commit is contained in:
@@ -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()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user