diff --git a/README.md b/README.md index f16e44c..d670297 100644 --- a/README.md +++ b/README.md @@ -11,12 +11,80 @@ A set of useful things for [Nostr Protocol](https://github.com/nostr-protocol/no ``` go sk, _ := nostr.GenerateKey() +pk, _ := nostr.GetPublicKey(sk) +nsec, _ = nip19.EncodePrivateKey(sk) +npub, _ = nip19.EncodePublicKey(pk) fmt.Println("sk:", sk) fmt.Println("pk:", nostr.GetPublicKey(sk)) +fmt.Println(nsec) +fmt.Println(npub) ``` -### Subscriptions +### Subscribing to a single relay + +``` go +relay, err := nostr.RelayConnect(context.Background(), "wss://nostr.zebedee.cloud") +if err != nil { + panic(err) +} + +npub := "npub1422a7ws4yul24p0pf7cacn7cghqkutdnm35z075vy68ggqpqjcyswn8ekc" + +var filters nostr.Filters +if _, v, err := nip19.Decode(npub); err == nil { + pub := v.(string) + filters = []nostr.Filter{{ + Kinds: []int{1}, + Authors: []string{pub}, + Limit: 1, + }} +} else { + panic(err) +} + +sub := relay.Subscribe(context.Background(), filters) + +go func() { + <-sub.EndOfStoredEvents + // handle end of stored events (EOSE, see NIP-15) +}() + +for ev := range sub.Events { + // handle returned event. + // channel will stay open until sub.Unsub() is called +} +``` + +### Publishing to a single relay + +``` go +sk := nostr.GeneratePrivateKey() +pub, _ := nostr.GetPublicKey(sk) + +ev := nostr.Event{ + PubKey: pub, + CreatedAt: time.Now(), + Kind: 1, + Tags: nil, + Content: "Hello World!", +} + +// calling Sign sets the event ID field and the event Sig field +ev.Sign(sk) + +// publish the event to two relays +for _, url := range []string{"wss://nostr.zebedee.cloud", "wss://nostr-pub.wellorder.net"} { + relay, e := nostr.RelayConnect(context.Background(), url) + if e != nil { + fmt.Println(e) + continue + } + fmt.Println("published to ", url, relay.Publish(context.Background(), ev)) +} +``` + +### Example script ``` go run example/example.go diff --git a/example/example.go b/example/example.go index aa416a1..1a48f21 100644 --- a/example/example.go +++ b/example/example.go @@ -37,7 +37,7 @@ func main() { if _, v, err := nip19.Decode(npub); err == nil { t := make(map[string][]string) // making a "p" tag for the above public key. - // this filters for messages tagged with the user "npub1sg6plz..." (mainly replies to this user). + // this filters for messages tagged with the user, mainly replies. t["p"] = []string{v.(string)} filters = []nostr.Filter{{ Kinds: []int{1},