this repo has no description
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}