package kemonoapi import ( "log/slog" "net/http" "time" "github.com/go-resty/resty/v2" "golang.org/x/time/rate" ) type Downloader interface { Download(<-chan FileWithIndex, Creator, Post) <-chan error Get(url string) (resp *http.Response, err error) WriteContent(Creator, Post, string) error } type Client struct { client *resty.Client ratelimit *rate.Limiter log *slog.Logger } func NewClient(site string) *Client { k := &Client{ ratelimit: rate.NewLimiter(rate.Every(time.Second), 3), client: resty.New(). SetBaseURL(site + "/api/v1"). SetRetryCount(3). SetRetryWaitTime(5 * time.Second). AddRetryCondition(func(r *resty.Response, err error) bool { return r != nil && r.StatusCode() == http.StatusTooManyRequests }), } if k.log == nil { k.log = slog.Default() } return k }