hudly/hypixel/key.go
2024-10-22 18:49:14 -06:00

74 lines
1.4 KiB
Go

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)
}