package sdk import ( "context" "net/url" "strings" "github.com/nbd-wtf/go-nostr" ) type FollowList = GenericList[Follow] type Follow struct { Pubkey string Relay string Petname string } func (f Follow) Value() string { return f.Pubkey } func (sys *System) FetchFollowList(ctx context.Context, pubkey string) FollowList { fl, _ := fetchGenericList[Follow](sys, ctx, pubkey, 3, parseFollow, sys.FollowListCache, false) return fl } func parseFollow(tag nostr.Tag) (fw Follow, ok bool) { if len(tag) < 2 { return fw, false } if tag[0] != "p" { return fw, false } fw.Pubkey = tag[1] if !nostr.IsValidPublicKey(fw.Pubkey) { return fw, false } if len(tag) > 2 { if _, err := url.Parse(tag[2]); err == nil { fw.Relay = nostr.NormalizeURL(tag[2]) } if len(tag) > 3 { fw.Petname = strings.TrimSpace(tag[3]) } return fw, true } return fw, false }