github.com/wtfutil/wtf@v0.43.0/modules/steam/client.go (about) 1 package steam 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "io" 7 "net/http" 8 ) 9 10 type Steam struct { 11 client *http.Client 12 baseUrl string 13 } 14 15 type ClientOpts struct { 16 key string 17 baseUrl string 18 } 19 20 func NewClient(opts *ClientOpts) *Steam { 21 baseUrl := opts.baseUrl 22 23 if opts.baseUrl == "" { 24 baseUrl = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=" 25 } 26 27 baseUrl += opts.key + "&steamids=" 28 29 return &Steam{ 30 client: &http.Client{}, 31 baseUrl: baseUrl, 32 } 33 } 34 35 type Player struct { 36 Personaname string `json:"personaname"` 37 ProfileUrl string `json:"profileurl"` 38 Personastate int `json:"personastate"` 39 Gameextrainfo string `json:"gameextrainfo"` 40 } 41 42 type SteamResponse struct { 43 Response struct { 44 Players []Player `json:"players"` 45 } `json:"response"` 46 } 47 48 func (s *Steam) Status(steamID string) (*Player, error) { 49 resp, err := s.fetch(steamID) 50 if err != nil { 51 return nil, err 52 } 53 54 var response SteamResponse 55 56 if err := json.Unmarshal(resp, &response); err != nil { 57 return nil, err 58 } 59 60 return &response.Response.Players[0], nil 61 } 62 63 func (s *Steam) fetch(id string) ([]byte, error) { 64 resp, err := http.Get(s.baseUrl + id) 65 66 if err != nil || resp.StatusCode != 200 { 67 return nil, fmt.Errorf("error fetching %s steam status: %v, status: %d", id, err, resp.StatusCode) 68 } 69 70 defer resp.Body.Close() 71 return io.ReadAll(resp.Body) 72 }