package eventsub import ( "encoding/json" "fmt" "github.com/gorilla/websocket" ) type WelcomeMessage struct { Metadata struct { MessageType string `json:"message_type"` MessageID string `json:"message_id"` } `json:"metadata"` Payload struct { Session struct { ID string `json:"id"` Status string `json:"status"` } `json:"session"` } `json:"payload"` } func Connect() (*websocket.Conn, error) { conn, _, err := websocket.DefaultDialer.Dial("wss://eventsub.wss.twitch.tv/ws", nil) return conn, err } func HandleMessages(conn *websocket.Conn) { for { _, message, err := conn.ReadMessage() if err != nil { fmt.Printf("Read error: %v", err) return } var msg WelcomeMessage if err := json.Unmarshal(message, &msg); err != nil { fmt.Printf("JSON error: %v", err) continue } switch msg.Metadata.MessageType { case "session_welcome": sessionID := msg.Payload.Session.ID fmt.Printf("Session ID: %s", sessionID) // Use this session ID to create subscriptions case "notification": // Handle actual events here } } }