package hypixel import ( "encoding/json" "io" "log" "net/http" "strconv" "time" ) var raw_key = "" type APIKey struct { TotalUses int UsesLeft int ResetDelay time.Duration } func NewAPIKey(key string) *APIKey { raw_key = key k := &APIKey{TotalUses: 0, UsesLeft: 0, ResetDelay: 0} _, err := k.TestKey() if err != nil { return k } return k } func (api *APIKey) TestKey() (bool, error) { url := BASE_URL + PLAYER_ENDPOINT_URL + "uuid=" + "d245a6e2-349d-405a-b801-48f06d39c9a9" // tqrm req, err := http.NewRequest("GET", url, nil) if err != nil { return false, err } req.Header.Add("API-Key", raw_key) res, err := http.DefaultClient.Do(req) if err != nil { return false, err } usesLeft, err := strconv.Atoi(res.Header.Get("ratelimit-remaining")) resetStr := res.Header.Get("ratelimit-reset") resetInt, err := strconv.ParseInt(resetStr, 10, 64) if err != nil { log.Fatalf("Error parsing ratelimit-reset: %v", err) } resetTime := time.Unix(resetInt, 0) api.UsesLeft = usesLeft api.ResetDelay = resetTime.Sub(time.Now()) api.TotalUses++ body, err := io.ReadAll(res.Body) if err != nil { return false, err } defer res.Body.Close() var playerResponse PlayerResponse err = json.Unmarshal(body, &playerResponse) if err != nil { return false, err } if playerResponse.Success { return true, nil } return false, NewSomeError(url, playerResponse.Cause) }