diff --git a/discord/ServerStatus.go b/discord/ServerStatus.go index 71607d0..17e61a4 100644 --- a/discord/ServerStatus.go +++ b/discord/ServerStatus.go @@ -121,7 +121,7 @@ func RefreshServerStatus(s *discordgo.Session) { embedFields = append(embedFields, &discordgo.MessageEmbedField{ Name: "Players", - Value: strconv.Itoa(len(resp.Players)) + "/" + maxPlayers, + Value: strconv.Itoa(resp.Players) + "/" + maxPlayers, Inline: true, }) if !server.HideMap { diff --git a/gamequery/gamequery.go b/gamequery/gamequery.go index d7a1c26..12aa04b 100644 --- a/gamequery/gamequery.go +++ b/gamequery/gamequery.go @@ -9,16 +9,16 @@ import ( ) type Query struct { - Name string `json:"name,omitempty"` - Map string `json:"map,omitempty"` - Password bool `json:"password,omitempty"` - Desc string `json:"desc,omitempty"` - MaxPlayers int `json:"maxplayers,omitempty"` - Players []GameDigPlayers `json:"players,omitempty"` - Bots []GameDigPlayers `json:"bots,omitempty"` - Connect string `json:"connect,omitempty"` - Ping int `json:"ping,omitempty"` - Error string `json:"error,omitempty"` + Name string `json:"name,omitempty"` + Map string `json:"map,omitempty"` + Password bool `json:"password,omitempty"` + Desc string `json:"desc,omitempty"` + MaxPlayers int `json:"maxplayers,omitempty"` + Players int `json:"players,omitempty"` + Bots int `json:"bots,omitempty"` + Connect string `json:"connect,omitempty"` + Ping int `json:"ping,omitempty"` + Error string `json:"error,omitempty"` } type GameDigPlayers struct { @@ -34,15 +34,62 @@ func ServerQuery(query *config.Server) (Query, error) { if err != nil { return Query{}, err } - var response Query - er2 := json.Unmarshal(out, &response) + var rawJsonData map[string]interface{} + er2 := json.Unmarshal(out, &rawJsonData) if er2 != nil { return Query{}, er2 } - if response.Error == "Failed all 1 attempts" { + if rawJsonData["error"] == "Failed all 1 attempts" { return Query{}, ErrServerNotFound } + var response Query + + if rawJsonData["name"] != nil { + response.Name = rawJsonData["name"].(string) + } + + if rawJsonData["map"] != nil { + response.Map = rawJsonData["map"].(string) + } + + if rawJsonData["password"] == true { + response.Password = true + } else { + response.Password = false + } + + if rawJsonData["desc"] != nil { + response.Desc = rawJsonData["desc"].(string) + } + + if rawJsonData["maxplayers"] != nil { + response.MaxPlayers = int(rawJsonData["maxplayers"].(float64)) + } + + switch rawJsonData["players"].(type) { + case []interface{}: + response.Players = len(rawJsonData["players"].([]interface{})) + case int: + response.Players = int(rawJsonData["players"].(float64)) + } + + if rawJsonData["bots"] != nil { + response.Bots = len(rawJsonData["bots"].([]interface{})) + } + + if rawJsonData["connect"] != nil { + response.Connect = rawJsonData["connect"].(string) + } + + if rawJsonData["ping"] != nil { + response.Ping = int(rawJsonData["ping"].(float64)) + } + + if rawJsonData["error"] != nil { + response.Error = rawJsonData["error"].(string) + } + return response, nil } diff --git a/make.sh b/make.sh index e2a9d3a..a912414 100755 --- a/make.sh +++ b/make.sh @@ -3,12 +3,20 @@ OSES=("windows" "darwin" "linux") ARCHES=("386" "amd64" "arm64") +rm -rf build/ +mkdir -p build + for os in ${OSES[@]} do for arch in ${ARCHES[@]} do echo "Building for $os/$arch..." - GOOS=$os GOARCH=$arch go build -o GoGSM-$os-$arch . + if [ "$os" == "windows" ] + then + GOOS=$os GOARCH=$arch go build -o build/GoGSM-$os-$arch.exe . + else + GOOS=$os GOARCH=$arch go build -o build/GoGSM-$os-$arch . + fi echo "Done!" echo done