2 Commits

Author SHA1 Message Date
dab30b4938 fix 2025-04-05 12:18:58 +11:00
4be44c4eb2 add limiter 2025-04-05 11:53:00 +11:00
74 changed files with 185 additions and 72 deletions

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -4,7 +4,7 @@ import (
"fmt"
"strings"
pb "github/bestnite/go-igdb/proto"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -4,7 +4,7 @@ import (
"fmt"
"strings"
pb "github/bestnite/go-igdb/proto"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -4,7 +4,7 @@ import (
"fmt"
"strings"
pb "github/bestnite/go-igdb/proto"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -5,7 +5,7 @@ import (
"fmt"
"strings"
pb "github/bestnite/go-igdb/proto"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -4,7 +4,7 @@ import (
"fmt"
"strings"
pb "github/bestnite/go-igdb/proto"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,10 +2,11 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strconv"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -4,7 +4,7 @@ import (
"fmt"
"strings"
pb "github/bestnite/go-igdb/proto"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -4,7 +4,7 @@ import (
"fmt"
"strings"
pb "github/bestnite/go-igdb/proto"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -4,7 +4,7 @@ import (
"fmt"
"strings"
pb "github/bestnite/go-igdb/proto"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

2
go.mod
View File

@@ -1,4 +1,4 @@
module github/bestnite/go-igdb
module github.com/bestnite/go-igdb
go 1.24.1

View File

@@ -11,11 +11,13 @@ type igdb struct {
clientID string
token *twitchToken
flaresolverr *flaresolverr.Flaresolverr
limiter *rateLimiter
}
func New(clientID, clientSecret string) *igdb {
return &igdb{
clientID: clientID,
limiter: newRateLimiter(4),
token: NewTwitchToken(clientID, clientSecret),
flaresolverr: nil,
}
@@ -24,12 +26,15 @@ func New(clientID, clientSecret string) *igdb {
func NewWithFlaresolverr(clientID, clientSecret string, f *flaresolverr.Flaresolverr) *igdb {
return &igdb{
clientID: clientID,
limiter: newRateLimiter(4),
token: NewTwitchToken(clientID, clientSecret),
flaresolverr: f,
}
}
func (g *igdb) Request(URL string, dataBody any) (*resty.Response, error) {
g.limiter.wait()
t, err := g.token.getToken()
if err != nil {
return nil, fmt.Errorf("failed to get twitch token: %w", err)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -4,7 +4,7 @@ import (
"fmt"
"strings"
pb "github/bestnite/go-igdb/proto"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

48
rate_limiter.go Normal file
View File

@@ -0,0 +1,48 @@
package igdb
import (
"sync"
"time"
)
type rateLimiter struct {
mu sync.Mutex
rate int
interval time.Duration
tokens int
lastRefill time.Time
}
func newRateLimiter(rate int) *rateLimiter {
return &rateLimiter{
rate: rate,
interval: time.Second,
tokens: rate,
lastRefill: time.Now(),
}
}
func (r *rateLimiter) wait() {
r.mu.Lock()
defer r.mu.Unlock()
now := time.Now()
elapsed := now.Sub(r.lastRefill)
if elapsed >= r.interval {
r.tokens = r.rate
r.lastRefill = now
}
if r.tokens <= 0 {
waitTime := r.interval - elapsed
r.mu.Unlock()
time.Sleep(waitTime)
r.mu.Lock()
r.tokens = r.rate - 1
r.lastRefill = time.Now()
return
}
r.tokens--
}

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -9,7 +9,7 @@ import (
"strings"
"time"
pb "github/bestnite/go-igdb/proto"
pb "github.com/bestnite/go-igdb/proto"
"github.com/PuerkitoBio/goquery"
"github.com/bestnite/go-flaresolverr"

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"net/url"
"github/bestnite/go-igdb/endpoint"
"github.com/bestnite/go-igdb/endpoint"
)
func (g *igdb) ActiveWebhook(endpoint endpoint.Endpoint, secret, callbackUrl string) error {

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)

View File

@@ -2,9 +2,10 @@ package igdb
import (
"fmt"
pb "github/bestnite/go-igdb/proto"
"strings"
pb "github.com/bestnite/go-igdb/proto"
"google.golang.org/protobuf/proto"
)