74 lines
1.4 KiB
Go
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)
|
|
}
|