this repo has no description

add bsky-modactions

Changed files
+107 -7
cmd
bsky-modactions
+80
cmd/bsky-modactions/main.go
··· 1 + package main 2 + 3 + import ( 4 + "bytes" 5 + "context" 6 + "log/slog" 7 + "net/http" 8 + "os" 9 + "os/signal" 10 + 11 + comatproto "github.com/bluesky-social/indigo/api/atproto" 12 + "github.com/fxamacker/cbor/v2" 13 + "github.com/gorilla/websocket" 14 + "github.com/urfave/cli/v2" 15 + ) 16 + 17 + const BskyModAuthority = `wss://mod.bsky.app/xrpc/com.atproto.label.subscribeLabels` 18 + 19 + func main() { 20 + app := cli.App{ 21 + Name: "bsky-modactions", 22 + } 23 + 24 + app.Action = func(cctx *cli.Context) error { 25 + ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) 26 + defer stop() 27 + 28 + // TODO track seq 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)"}, 32 + }) 33 + if err != nil { 34 + return err 35 + } 36 + 37 + go func() { 38 + for { 39 + select { 40 + case <-ctx.Done(): 41 + return 42 + default: 43 + } 44 + 45 + _, p, err := wsconn.ReadMessage() 46 + if err != nil { 47 + slog.Error("error reading message from websocket", "err", err) 48 + continue 49 + } 50 + 51 + var info comatproto.LabelSubscribeLabels_Info 52 + rest, err := cbor.UnmarshalFirst(p, &info) 53 + if err != nil { 54 + slog.Error("error unmarshalling info", "err", err) 55 + continue 56 + } 57 + 58 + var labels comatproto.LabelSubscribeLabels_Labels 59 + err = labels.UnmarshalCBOR(bytes.NewReader(rest)) 60 + if err != nil { 61 + slog.Error("error unmarshalling label", "err", err) 62 + continue 63 + } 64 + for _, label := range labels.Labels { 65 + slog.Info("parsed label", "neg", label.Neg, "uri", label.Uri, "val", label.Val) 66 + } 67 + } 68 + }() 69 + 70 + <-ctx.Done() 71 + stop() 72 + slog.Info("shutting down") 73 + 74 + return nil 75 + } 76 + 77 + if err := app.Run(os.Args); err != nil { 78 + slog.Error("error running app", "err", err) 79 + } 80 + }
+11 -3
go.mod
··· 1 1 module github.com/edavis/bsky-tools 2 2 3 - go 1.23.0 3 + go 1.24 4 + 5 + toolchain go1.24.7 4 6 5 7 require ( 6 - github.com/bluesky-social/indigo v0.0.0-20240905024844-a4f38639767f 8 + github.com/bluesky-social/indigo v0.0.0-20250909204019-c5eaa30f683f 7 9 github.com/bluesky-social/jetstream v0.0.0-20241020000921-dcd43344c716 10 + github.com/fxamacker/cbor/v2 v2.9.0 8 11 github.com/gorilla/websocket v1.5.1 9 12 github.com/mattn/go-sqlite3 v1.14.22 10 13 github.com/pemistahl/lingua-go v1.4.0 11 14 github.com/redis/go-redis/v9 v9.3.0 15 + github.com/urfave/cli/v2 v2.26.0 12 16 ) 13 17 14 18 require ( 15 19 github.com/carlmjohnson/versioninfo v0.22.5 // indirect 16 20 github.com/cespare/xxhash/v2 v2.3.0 // indirect 21 + github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect 17 22 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect 18 23 github.com/felixge/httpsnoop v1.0.4 // indirect 19 24 github.com/go-logr/logr v1.4.1 // indirect ··· 48 53 github.com/multiformats/go-varint v0.0.7 // indirect 49 54 github.com/opentracing/opentracing-go v1.2.0 // indirect 50 55 github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f // indirect 56 + github.com/russross/blackfriday/v2 v2.1.0 // indirect 51 57 github.com/shopspring/decimal v1.3.1 // indirect 52 58 github.com/spaolacci/murmur3 v1.1.0 // indirect 53 - github.com/whyrusleeping/cbor-gen v0.1.3-0.20240904181319-8dc02b38228c // indirect 59 + github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e // indirect 60 + github.com/x448/float16 v0.8.4 // indirect 61 + github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e // indirect 54 62 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 // indirect 55 63 go.opentelemetry.io/otel v1.21.0 // indirect 56 64 go.opentelemetry.io/otel/metric v1.21.0 // indirect
+16 -4
go.sum
··· 1 1 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 2 2 github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= 3 - github.com/bluesky-social/indigo v0.0.0-20240905024844-a4f38639767f h1:Q9cfCAlYWIWPsSDhg5w6qcutQ7YaJtfTjiRLP/mw+pc= 4 - github.com/bluesky-social/indigo v0.0.0-20240905024844-a4f38639767f/go.mod h1:Zx9nSWgd/FxMenkJW07VKnzspxpHBdPrPmS+Fspl2I0= 3 + github.com/bluesky-social/indigo v0.0.0-20250909204019-c5eaa30f683f h1:FugOoTzh0nCMTWGqNGsjttFWVPcwxaaGD3p/nE9V8qY= 4 + github.com/bluesky-social/indigo v0.0.0-20250909204019-c5eaa30f683f/go.mod h1:n6QE1NDPFoi7PRbMUZmc2y7FibCqiVU4ePpsvhHUBR8= 5 5 github.com/bluesky-social/jetstream v0.0.0-20241020000921-dcd43344c716 h1:I8+VaZKaNIGCPGXE2/VXzJGlPFEZgiFLjnge+OWFl5w= 6 6 github.com/bluesky-social/jetstream v0.0.0-20241020000921-dcd43344c716/go.mod h1:/dE2dmFell/m4zxgIbH3fkiqZ1obzr/ETj4RpgomgMs= 7 7 github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= ··· 13 13 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= 14 14 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 15 15 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= 16 + github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= 17 + github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= 16 18 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 17 19 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 18 20 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= ··· 20 22 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= 21 23 github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= 22 24 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= 25 + github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= 26 + github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= 23 27 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= 24 28 github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= 25 29 github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= ··· 124 128 github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= 125 129 github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= 126 130 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 131 + github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= 132 + github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 127 133 github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= 128 134 github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= 129 135 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= ··· 141 147 github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= 142 148 github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 143 149 github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= 150 + github.com/urfave/cli/v2 v2.26.0 h1:3f3AMg3HpThFNT4I++TKOejZO8yU55t3JnnSr4S4QEI= 151 + github.com/urfave/cli/v2 v2.26.0/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= 144 152 github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0 h1:GDDkbFiaK8jsSDJfjId/PEGEShv6ugrt4kYsC5UIDaQ= 145 153 github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= 146 - github.com/whyrusleeping/cbor-gen v0.1.3-0.20240904181319-8dc02b38228c h1:UsxJNcLPfyLyVaA4iusIrsLAqJn/xh36Qgb8emqtXzk= 147 - github.com/whyrusleeping/cbor-gen v0.1.3-0.20240904181319-8dc02b38228c/go.mod h1:pM99HXyEbSQHcosHc0iW7YFmwnscr+t9Te4ibko05so= 154 + github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e h1:28X54ciEwwUxyHn9yrZfl5ojgF4CBNLWX7LR0rvBkf4= 155 + github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e/go.mod h1:pM99HXyEbSQHcosHc0iW7YFmwnscr+t9Te4ibko05so= 156 + github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= 157 + github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= 158 + github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e h1:+SOyEddqYF09QP7vr7CgJ1eti3pY9Fn3LHO1M1r/0sI= 159 + github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= 148 160 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 149 161 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 150 162 github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=