mirror of
https://github.com/statbate/special-pancake.git
synced 2026-08-11 03:12:42 +00:00
119 lines
3.9 KiB
Go
119 lines
3.9 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/url"
|
|
"time"
|
|
|
|
"github.com/gorilla/websocket"
|
|
)
|
|
|
|
func statRoom(room, room_uid, authToken string) {
|
|
u, err := url.Parse("wss://realtime.pa.highwebmedia.com/?access_token=" + authToken + "&format=json&heartbeats=true&v=1.2&agent=ably-js%2F1.2.13%20browser&remainPresentFor=0")
|
|
if err != nil {
|
|
fmt.Println(err.Error())
|
|
return
|
|
}
|
|
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
|
|
if err != nil {
|
|
fmt.Println(err.Error())
|
|
return
|
|
}
|
|
timeout := time.Now().Unix() + 60*60
|
|
init := false
|
|
|
|
initMessages := []string{
|
|
`{"action":16, "connectionKey":{"accessToken":"` + authToken + `"}}`,
|
|
`{"action":10,"flags":327680,"channel":"room:tip_alert:` + room_uid + `","params":{}}`,
|
|
//`{"action":10,"flags":327680,"channel":"room:purchase:` + room_uid + `","params":{}}`,
|
|
//`{"action":10,"flags":327680,"channel":"room:fanclub:` + room_uid + `","params":{}}`,
|
|
//`{"action":10,"flags":327680,"channel":"room:message:` + room_uid + `","params":{}}`,
|
|
//`{"action":10,"flags":327680,"channel":"global:push_service","params":{}}`,
|
|
//`{"action":10,"flags":327680,"channel":"room_anon:presence:` + room_uid + `:0","params":{}}`,
|
|
//`{"action":10,"flags":327680,"channel":"room:quality_update:` + room_uid + `","params":{}}`,
|
|
//`{"action":10,"flags":327680,"channel":"room:notice:` + room_uid + `","params":{}}`,
|
|
`{"action":10,"flags":327680,"channel":"room:enter_leave:` + room_uid + `","params":{}}`,
|
|
//`{"action":10,"flags":327680,"channel":"room:password_protected:` + room_uid + `:13","params":{}}`,
|
|
//`{"action":10,"flags":327680,"channel":"room:mod_promoted:` + room_uid + `","params":{}}`,
|
|
//`{"action":10,"flags":327680,"channel":"room:mod_revoked:` + room_uid + `","params":{}}`,
|
|
//`{"action":10,"flags":327680,"channel":"room:status:` + room_uid + `:13","params":{}}`,
|
|
//`{"action":10,"flags":327680,"channel":"room:title_change:` + room_uid + `","params":{}}`,
|
|
//`{"action":10,"flags":327680,"channel":"room:silence:` + room_uid + `","params":{}}`,
|
|
`{"action":10,"flags":327680,"channel":"room:kick:` + room_uid + `","params":{}}`,
|
|
`{"action":10,"flags":327680,"channel":"room:update:` + room_uid + `","params":{}}`,
|
|
//`{"action":10,"flags":327680,"channel":"room:settings:` + room_uid + `","params":{}}`,
|
|
}
|
|
|
|
for {
|
|
|
|
_, message, err := c.ReadMessage()
|
|
if err != nil {
|
|
fmt.Println(err.Error())
|
|
break
|
|
}
|
|
|
|
if time.Now().Unix() > timeout {
|
|
fmt.Println("Timeout room:", room)
|
|
break
|
|
}
|
|
|
|
fmt.Println(string(message))
|
|
|
|
input := struct {
|
|
Action int `json:"action"`
|
|
Key string `json:"connectionkey"`
|
|
Error json.RawMessage `json:"error"`
|
|
Channel string `json:"channel"`
|
|
Messages json.RawMessage `json:"messages"`
|
|
}{}
|
|
|
|
if err := json.Unmarshal(message, &input); err != nil {
|
|
fmt.Println(err.Error())
|
|
break
|
|
}
|
|
|
|
if !init {
|
|
c.WriteMessage(websocket.TextMessage, []byte(`{"action":17, "auth":{"accessToken":"`+authToken+`"}}`))
|
|
c.WriteMessage(websocket.TextMessage, []byte(`{"action":16, "connectionKey":"`+input.Key+`","connectionSerial": -1}`))
|
|
for _, im := range initMessages {
|
|
c.WriteMessage(websocket.TextMessage, []byte(im))
|
|
}
|
|
init = true
|
|
}
|
|
|
|
if input.Action == 15 {
|
|
|
|
timeout = time.Now().Unix() + 60*60
|
|
|
|
if input.Channel == "room:tip_alert:"+room_uid {
|
|
|
|
tips := []struct {
|
|
Data string `json:"data"`
|
|
}{}
|
|
|
|
if err := json.Unmarshal([]byte(input.Messages), &tips); err != nil {
|
|
fmt.Println(err.Error())
|
|
continue
|
|
}
|
|
|
|
donate := struct {
|
|
Name string `json:"to_username"`
|
|
From string `json:"from_username"`
|
|
Amount int64 `json:"amount"`
|
|
}{}
|
|
|
|
for _, tip := range tips {
|
|
if err := json.Unmarshal([]byte(tip.Data), &donate); err != nil {
|
|
fmt.Println(err.Error())
|
|
continue
|
|
}
|
|
if len(donate.From) > 3 {
|
|
fmt.Println(donate.From, "send ", donate.Amount, "tokens")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
c.Close()
|
|
}
|