mirror of
https://github.com/nbd-wtf/go-nostr.git
synced 2025-03-17 21:32:56 +01:00
go-nostr
A set of useful things for Nostr Protocol implementations.
Subscribing to a set of relays
pool := relaypool.New()
pool.Add("wss://relay.nostr.com/", &relaypool.Policy{
SimplePolicy: relaypool.SimplePolicy{Read: true, Write: true},
})
pool.Add("wss://nostrrelay.example.com/", &relaypool.Policy{
SimplePolicy: relaypool.SimplePolicy{Read: true, Write: true},
})
for notice := range pool.Notices {
log.Printf("%s has sent a notice: '%s'\n", notice.Relay, notice.Message)
}
Listening for events
kind1 := event.KindTextNote
sub := pool.Sub(filter.EventFilters{
{
Authors: []string{"0ded86bf80c76847320b16f22b7451c08169434837a51ad5fe3b178af6c35f5d"},
Kind: &kind1, // or 1
},
})
go func() {
for event := range sub.UniqueEvents {
log.Print(event)
}
}()
time.Sleep(5 * time.Second)
sub.Unsub()
Publishing an event
secretKey := "3f06a81e0a0c2ad34ee9df2a30d87a810da9e3c3881f780755ace5e5e64d30a7"
pool.SecretKey = &secretKey
event, statuses, _ := pool.PublishEvent(&event.Event{
CreatedAt: uint32(time.Now().Unix()),
Kind: 1, // or event.KindTextNote
Tags: make(event.Tags, 0),
Content: "hello",
})
log.Print(event.PubKey)
log.Print(event.ID)
log.Print(event.Sig)
for status := range statuses {
switch status.Status {
case relaypool.PublishStatusSent:
fmt.Printf("Sent event %s to '%s'.\n", event.ID, status.Relay)
case relaypool.PublishStatusFailed:
fmt.Printf("Failed to send event %s to '%s'.\n", event.ID, status.Relay)
case relaypool.PublishStatusSucceeded:
fmt.Printf("Event seen %s on '%s'.\n", event.ID, status.Relay)
}
}
Languages
C
83.7%
Go
15.5%
Assembly
0.7%
Just
0.1%