A feed generator that allows Bluesky bookmarks via DMs
at main 1.2 kB view raw
1package main 2 3import ( 4 "context" 5 6 "fmt" 7 "log/slog" 8 "time" 9 10 "github.com/bluesky-social/jetstream/pkg/client" 11 "github.com/bluesky-social/jetstream/pkg/client/schedulers/sequential" 12) 13 14type consumer struct { 15 cfg *client.ClientConfig 16 handler *handler 17 logger *slog.Logger 18} 19 20func NewConsumer(jsAddr string, logger *slog.Logger, handler *handler) *consumer { 21 cfg := client.DefaultClientConfig() 22 if jsAddr != "" { 23 cfg.WebsocketURL = jsAddr 24 } 25 cfg.WantedCollections = []string{ 26 "app.bsky.feed.post", 27 } 28 cfg.WantedDids = []string{} 29 30 return &consumer{ 31 cfg: cfg, 32 logger: logger, 33 handler: handler, 34 } 35} 36 37func (c *consumer) Consume(ctx context.Context) error { 38 scheduler := sequential.NewScheduler("jetstream_localdev", c.logger, c.handler.HandleEvent) 39 defer scheduler.Shutdown() 40 41 client, err := client.NewClient(c.cfg, c.logger, scheduler) 42 if err != nil { 43 return fmt.Errorf("failed to create client: %w", err) 44 } 45 46 cursor := time.Now().Add(1 * -time.Minute).UnixMicro() 47 48 if err := client.ConnectAndRead(ctx, &cursor); err != nil { 49 return fmt.Errorf("connect and read: %w", err) 50 } 51 52 slog.Info("stopping consume") 53 return nil 54}