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