kaiyan-index: get 7tv emote sets
This commit is contained in:
parent
e88d4b6cc0
commit
2849b42745
@ -5,8 +5,11 @@ import (
|
|||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
"strconv"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/twmb/franz-go/pkg/kgo"
|
"github.com/twmb/franz-go/pkg/kgo"
|
||||||
@ -20,9 +23,15 @@ import (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var (
|
var (
|
||||||
dburi string
|
dburi string
|
||||||
|
streams []string
|
||||||
)
|
)
|
||||||
flag.StringVar(&dburi, "db", "", "SQLite database URI")
|
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()
|
flag.Parse()
|
||||||
if flag.NArg() == 0 {
|
if flag.NArg() == 0 {
|
||||||
fail("provide broker addresses as args")
|
fail("provide broker addresses as args")
|
||||||
@ -30,6 +39,9 @@ func main() {
|
|||||||
if dburi == "" {
|
if dburi == "" {
|
||||||
fail("-db is mandatory")
|
fail("-db is mandatory")
|
||||||
}
|
}
|
||||||
|
if len(streams) == 0 {
|
||||||
|
fail("no broadcasters specified")
|
||||||
|
}
|
||||||
|
|
||||||
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
|
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
|
||||||
go func() {
|
go func() {
|
||||||
@ -37,6 +49,40 @@ func main() {
|
|||||||
stop()
|
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{
|
opts := sqlitex.PoolOptions{
|
||||||
Flags: sqlite.OpenCreate | sqlite.OpenReadWrite | sqlite.OpenURI,
|
Flags: sqlite.OpenCreate | sqlite.OpenReadWrite | sqlite.OpenURI,
|
||||||
PrepareConn: func(conn *sqlite.Conn) error {
|
PrepareConn: func(conn *sqlite.Conn) error {
|
||||||
@ -86,7 +132,7 @@ func main() {
|
|||||||
var ems []emote.Emote
|
var ems []emote.Emote
|
||||||
// TODO(branden): emote lists
|
// TODO(branden): emote lists
|
||||||
for ctx.Err() == nil {
|
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 {
|
if err != nil {
|
||||||
fail("%v", err)
|
fail("%v", err)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user