package notes import ( "fmt" ) type AppBskyActorProfileRecord struct { DisplayName string `json:"displayName"` Avatar *struct { Ref struct { Link string `json:"$link"` } `json:"ref"` } `json:"avatar,omitempty"` Banner *struct { Ref struct { Link string `json:"$link"` } `json:"ref"` } `json:"banner,omitempty"` Pronouns string `json:"pronouns"` Labels *struct { Type string `json:"$type"` Values []struct { Val string `json:"val"` } `json:"values"` } `json:"labels,omitempty"` } func AuthorFromAppBskyActorProfileRecord(record AppBskyActorProfileRecord, did, handle, pds string) (*Author, error) { var avatarURL, bannerURL string if record.Avatar != nil { avatarURL = fmt.Sprintf("%s/xrpc/com.atproto.sync.getBlob?did=%s&cid=%s", pds, did, record.Avatar.Ref.Link) } if record.Banner != nil { bannerURL = fmt.Sprintf("%s/xrpc/com.atproto.sync.getBlob?did=%s&cid=%s", pds, did, record.Banner.Ref.Link) } // check for !no-unauthenticated label noUnauth := false if record.Labels != nil && record.Labels.Type == "com.atproto.label.defs#selfLabels" { for _, label := range record.Labels.Values { if label.Val == "!no-unauthenticated" { noUnauth = true } } } author := &Author{ PDS: pds, Handle: handle, DisplayName: record.DisplayName, AvatarURL: avatarURL, BannerURL: bannerURL, Pronouns: record.Pronouns, NoUnauth: noUnauth, } return author, nil }