this repo has no description
at main 2.5 kB view raw
1package main 2 3import ( 4 "context" 5 "fmt" 6 "time" 7 8 "github.com/bluesky-social/indigo/api/bsky" 9 "github.com/bluesky-social/indigo/atproto/syntax" 10 "github.com/bluesky-social/jetstream/pkg/models" 11) 12 13func (dsmt *DontShowMeThis) handlePost(ctx context.Context, event *models.Event, post *bsky.FeedPost) error { 14 if event == nil || event.Commit == nil { 15 return nil 16 } 17 18 var parentUri string 19 20 if post.Reply != nil && post.Reply.Parent != nil { 21 parentUri = post.Reply.Parent.Uri 22 } else if post.Embed != nil && post.Embed.EmbedRecord != nil && post.Embed.EmbedRecord.Record != nil { 23 parentUri = post.Embed.EmbedRecord.Record.Uri 24 } else if post.Embed != nil && post.Embed.EmbedRecordWithMedia != nil && post.Embed.EmbedRecordWithMedia.Record != nil && post.Embed.EmbedRecordWithMedia.Record.Record != nil { 25 parentUri = post.Embed.EmbedRecordWithMedia.Record.Record.Uri 26 } 27 28 if parentUri == "" { 29 return nil 30 } 31 32 atUri, err := syntax.ParseATURI(parentUri) 33 if err != nil { 34 return fmt.Errorf("failed to parse parent aturi: %w", err) 35 } 36 37 opDid := atUri.Authority().String() 38 _, ok := dsmt.watchedOps[opDid] 39 if !ok { 40 return nil 41 } 42 43 uri := fmt.Sprintf("at://%s/%s/%s", event.Did, event.Commit.Collection, event.Commit.RKey) 44 45 logger := dsmt.logger.With("opDid", opDid, "replyDid", event.Did, "uri", uri) 46 47 logger.Info("ingested reply to watched op") 48 49 if post.Text == "" { 50 logger.Info("post contained no text, skipping") 51 return nil 52 } 53 54 parent, err := dsmt.getPost(ctx, parentUri) 55 if err != nil { 56 return fmt.Errorf("failed to get parent post: %w", err) 57 } 58 59 ctx, cancel := context.WithTimeout(ctx, 30*time.Second) 60 defer cancel() 61 62 results, err := dsmt.lmstudioc.GetIsBadFaith(ctx, parent.Text, post.Text) 63 if err != nil { 64 return fmt.Errorf("failed to check bad faith: %w", err) 65 } 66 67 if results.BadFaith { 68 if err := dsmt.emitLabel(ctx, uri, LabelBadFaith); err != nil { 69 return fmt.Errorf("failed to label post: %w", err) 70 } 71 logger.Info("determined that reply was bad faith and emitted label") 72 } 73 74 if results.OffTopic { 75 if err := dsmt.emitLabel(ctx, uri, LabelOffTopic); err != nil { 76 return fmt.Errorf("failed to label post: %w", err) 77 } 78 logger.Info("determined that reply was off topic and emitted label") 79 } 80 81 if results.Funny { 82 if err := dsmt.emitLabel(ctx, uri, LabelFunny); err != nil { 83 return fmt.Errorf("failed to label post: %w", err) 84 } 85 logger.Info("determined that reply was funny and emitted label") 86 } 87 88 return nil 89}