package main import ( "encoding/base64" "encoding/json" "fmt" "github.com/gorilla/websocket" "net/url" "reflect" "time" ) func getWS(room, key string) string { u := url.URL{Scheme: "wss", Host: "node2-ord.livemediahost.com:3000"} c, _, err := websocket.DefaultDialer.Dial(u.String(), nil) if err != nil { fmt.Println(err.Error()) return "" } defer c.Close() if err = c.WriteMessage(websocket.TextMessage, []byte(`["v3.authorize",{"token":"`+key+`"}]`)); err != nil { fmt.Println(err.Error()) return "" } for { c.SetReadDeadline(time.Now().Add(30 * time.Minute)) _, message, err := c.ReadMessage() if err != nil { fmt.Println(err.Error()) return "" } //fmt.Println(string(message)) var input []interface{} if err := json.Unmarshal(message, &input); err != nil { fmt.Println(err) } if reflect.TypeOf(input[0]).String() != "float64" { continue } if int(input[0].(float64)) == 2 { if err = c.WriteMessage(websocket.TextMessage, []byte(`[5,{"room": "`+room+`"}]`)); err != nil { fmt.Println(err.Error()) return "" } fmt.Println("send message!") continue } if int(input[0].(float64)) == 6 { return input[1].(map[string]interface{})["url"].(string) } } return "" } func statRoom(room, key string) { fmt.Println("Start", room, "key", key) if len(key) < 50 { fmt.Println(key, room) return } xkey, err := base64.StdEncoding.DecodeString(key) if err != nil { fmt.Println(err, room) return } xurl := getWS(room, string(xkey)) wsUrl, _ := url.Parse(xurl) u := url.URL{Scheme: "wss", Host: wsUrl.Host} c, _, err := websocket.DefaultDialer.Dial(u.String(), nil) if err != nil { fmt.Println(err.Error()) return } defer c.Close() if err = c.WriteMessage(websocket.TextMessage, []byte(`["v3.authorize",{"token":"`+string(xkey)+`"}]`)); err != nil { fmt.Println(err.Error()) return } for { c.SetReadDeadline(time.Now().Add(30 * time.Minute)) _, message, err := c.ReadMessage() if err != nil { fmt.Println(err.Error()) return } //fmt.Println(string(message)) var input []interface{} if err := json.Unmarshal(message, &input); err != nil { fmt.Println(err) } if reflect.TypeOf(input[0]).String() == "float64" { if int(input[0].(float64)) == 27 && input[1].(map[string]interface{})["subject_username"] != nil && input[1].(map[string]interface{})["value"] != nil { //[27,{"recent_tips":88,"value":1,"subject_username":"max4you","is_tip":true,"is_stealth":false},1,["max4you tipped 1 tokens"]] fmt.Println(input[1].(map[string]interface{})["subject_username"].(string), "send", int64(input[1].(map[string]interface{})["value"].(float64)), "to", room) } } } }