add support for links as posts
This commit is contained in:
parent
2bb3946237
commit
bfa829d8c7
4 changed files with 240 additions and 33 deletions
73
main.go
73
main.go
|
@ -3,6 +3,8 @@ package main
|
|||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"fmt"
|
||||
"image/jpeg"
|
||||
"io"
|
||||
|
@ -11,6 +13,7 @@ import (
|
|||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
@ -19,6 +22,7 @@ import (
|
|||
tgbotapi "github.com/OvyFlash/telegram-bot-api"
|
||||
|
||||
// apibsky "github.com/bluesky-social/indigo/api/bsky"
|
||||
|
||||
"github.com/bluesky-social/jetstream/pkg/client"
|
||||
"github.com/bluesky-social/jetstream/pkg/client/schedulers/sequential"
|
||||
"github.com/bluesky-social/jetstream/pkg/models"
|
||||
|
@ -39,7 +43,13 @@ type handler struct {
|
|||
bsky *bsky.BSky
|
||||
}
|
||||
|
||||
var (
|
||||
post = flag.String("post", "", "URL to a BlueSky post")
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
var handle = os.Getenv("BSKY_HANDLE")
|
||||
var password = os.Getenv("BSKY_PASSWORD")
|
||||
bskyClient := bsky.NewBSky()
|
||||
|
@ -48,30 +58,11 @@ func main() {
|
|||
log.Fatal(err, ". please set BSKY_HANDLE and BSKY_PASSWORD env variables")
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
|
||||
Level: slog.LevelDebug.Level(),
|
||||
})))
|
||||
|
||||
logger := slog.Default()
|
||||
config := client.DefaultClientConfig()
|
||||
config.WebsocketURL = serverAddr
|
||||
config.WantedCollections = []string{"app.bsky.feed.post"}
|
||||
config.WantedDids = []string{bskyClient.Bluesky.Cfg.DID}
|
||||
config.Compress = true
|
||||
|
||||
h := &handler{
|
||||
seenSeqs: make(map[int64]struct{}),
|
||||
bsky: bskyClient,
|
||||
}
|
||||
|
||||
scheduler := sequential.NewScheduler("jetstream_localdev", logger, h.HandleEvent)
|
||||
|
||||
c, err := client.NewClient(config, logger, scheduler)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to create client: %v", err)
|
||||
}
|
||||
|
||||
endpoint := "https://api.telegram.org/bot%s/%s"
|
||||
if os.Getenv("TG_API_ENDPOINT") != "" {
|
||||
endpoint = os.Getenv("TG_API_ENDPOINT")
|
||||
|
@ -86,6 +77,50 @@ func main() {
|
|||
log.Fatal("TG_CHANNEL_ID is not set")
|
||||
}
|
||||
|
||||
if *post != "" {
|
||||
r := regexp.MustCompile(`^https:\/\/.*?\/profile\/(.*?)\/post\/(.*?)$`)
|
||||
s := r.FindStringSubmatch(*post)
|
||||
handle := s[1]
|
||||
if s[1][0:4] != "did:" {
|
||||
handle, _ = bskyClient.ResolveHandle(s[1])
|
||||
}
|
||||
|
||||
postJSON := bskyClient.Bluesky.FetchPost(handle, s[2])
|
||||
p, _ := json.Marshal(postJSON.Record)
|
||||
h.ProcessPost(&models.Event{
|
||||
Did: postJSON.Author.Did,
|
||||
TimeUS: postJSON.Record.CreatedAt.Unix(),
|
||||
Kind: "",
|
||||
Commit: &models.Commit{
|
||||
CID: postJSON.Cid,
|
||||
Operation: "create",
|
||||
RKey: strings.Split(postJSON.URI, "/")[4],
|
||||
Collection: "app.bsky.feed.post",
|
||||
Record: p,
|
||||
},
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
|
||||
Level: slog.LevelDebug.Level(),
|
||||
})))
|
||||
|
||||
logger := slog.Default()
|
||||
config := client.DefaultClientConfig()
|
||||
config.WebsocketURL = serverAddr
|
||||
config.WantedCollections = []string{"app.bsky.feed.post"}
|
||||
config.WantedDids = []string{bskyClient.Bluesky.Cfg.DID}
|
||||
config.Compress = true
|
||||
|
||||
scheduler := sequential.NewScheduler("jetstream_localdev", logger, h.HandleEvent)
|
||||
|
||||
c, err := client.NewClient(config, logger, scheduler)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to create client: %v", err)
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// file, err := os.Open("posts.json")
|
||||
// if err != nil {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue