kaiyan-index: get 7tv emote sets
This commit is contained in:
parent
e88d4b6cc0
commit
2849b42745
@ -5,8 +5,11 @@ import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
"strconv"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/twmb/franz-go/pkg/kgo"
|
||||
@ -21,8 +24,14 @@ import (
|
||||
func main() {
|
||||
var (
|
||||
dburi string
|
||||
streams []string
|
||||
)
|
||||
flag.StringVar(&dburi, "db", "", "SQLite database URI")
|
||||
flag.Func("b", "Twitch broadcaster user ID", func(s string) error {
|
||||
streams = append(streams, s)
|
||||
_, err := strconv.Atoi(s)
|
||||
return err
|
||||
})
|
||||
flag.Parse()
|
||||
if flag.NArg() == 0 {
|
||||
fail("provide broker addresses as args")
|
||||
@ -30,6 +39,9 @@ func main() {
|
||||
if dburi == "" {
|
||||
fail("-db is mandatory")
|
||||
}
|
||||
if len(streams) == 0 {
|
||||
fail("no broadcasters specified")
|
||||
}
|
||||
|
||||
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
|
||||
go func() {
|
||||
@ -37,6 +49,40 @@ func main() {
|
||||
stop()
|
||||
}()
|
||||
|
||||
parsers := make(map[string]emote.Parser)
|
||||
{
|
||||
var mu sync.Mutex
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(len(streams))
|
||||
for _, b := range streams {
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
req, err := http.NewRequestWithContext(ctx, "GET", "https://7tv.io/v3/users/twitch/"+b, nil)
|
||||
if err != nil {
|
||||
fail("%v", err)
|
||||
}
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
fail("%v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
if resp.StatusCode != 200 {
|
||||
slog.ErrorContext(ctx, "7tv", slog.String("broadcaster", b), slog.String("status", resp.Status))
|
||||
return
|
||||
}
|
||||
em, err := emote.SevenTVv3(resp.Body)
|
||||
if err != nil {
|
||||
slog.ErrorContext(ctx, "7tv", slog.String("broadcaster", b), slog.Any("err", err))
|
||||
return
|
||||
}
|
||||
mu.Lock()
|
||||
parsers[b] = emote.NewParser(em...)
|
||||
mu.Unlock()
|
||||
}()
|
||||
}
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
opts := sqlitex.PoolOptions{
|
||||
Flags: sqlite.OpenCreate | sqlite.OpenReadWrite | sqlite.OpenURI,
|
||||
PrepareConn: func(conn *sqlite.Conn) error {
|
||||
@ -86,7 +132,7 @@ func main() {
|
||||
var ems []emote.Emote
|
||||
// TODO(branden): emote lists
|
||||
for ctx.Err() == nil {
|
||||
msgs, ems, err = batch(ctx, nil, q, st, msgs[:0], ems[:0])
|
||||
msgs, ems, err = batch(ctx, parsers, q, st, msgs[:0], ems[:0])
|
||||
if err != nil {
|
||||
fail("%v", err)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user