···
···
comatproto "github.com/bluesky-social/indigo/api/atproto"
"github.com/fxamacker/cbor/v2"
"github.com/gorilla/websocket"
15
+
"github.com/redis/go-redis/v9"
"github.com/urfave/cli/v2"
17
-
const BskyModAuthority = `wss://mod.bsky.app/xrpc/com.atproto.label.subscribeLabels`
20
+
BskyModDid = `did:plc:ar7c4by46qjdydhdevvrndac` // @moderation.bsky.app
21
+
BskyModLabelEndpoint = `wss://mod.bsky.app/xrpc/com.atproto.label.subscribeLabels`
23
+
ActionsConfig = `bskymodactions:config`
24
+
ActionsLabels = `bskymodactions:labels`
···
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
29
-
slog.Info("connecting to websocket", "url", BskyModAuthority)
30
-
wsconn, _, err := websocket.DefaultDialer.DialContext(ctx, BskyModAuthority, http.Header{
31
-
"User-Agent": []string{"bsky-modactions/0.1 (@edavis.dev)"},
36
+
rdb := redis.NewClient(&redis.Options{
37
+
Addr: "localhost:6379",
42
+
url := BskyModLabelEndpoint
43
+
seq, err := rdb.HGet(ctx, ActionsConfig, "seq").Result()
44
+
if err == nil && seq != "" { // err check reversed
45
+
url += fmt.Sprintf("?cursor=%s", seq)
47
+
slog.Info("connecting to websocket", "url", url)
49
+
wsconn, _, err := websocket.DefaultDialer.DialContext(ctx, url, http.Header{
50
+
"User-Agent": []string{"bsky-modactions/0.1 (@bskycharts.edavis.dev)"},
···
for _, label := range labels.Labels {
84
+
if label.Src != BskyModDid {
slog.Info("parsed label", "neg", label.Neg, "uri", label.Uri, "val", label.Val)
90
+
if label.Neg != nil {
93
+
key := fmt.Sprintf("%s:%t", label.Val, neg)
95
+
if err := rdb.HIncrBy(ctx, ActionsLabels, key, 1).Err(); err != nil {
96
+
slog.Error("error incrementing key", "key", key)
100
+
if err := rdb.HSet(ctx, ActionsConfig, "seq", labels.Seq).Err(); err != nil {
101
+
slog.Error("error updating seq", "err", err)