go-nostr/nip45/hll_event.go

43 lines
877 B
Go

package nip45
import (
"iter"
"strconv"
"github.com/nbd-wtf/go-nostr"
)
func HyperLogLogEventPubkeyOffsetsAndReferencesForEvent(evt *nostr.Event) iter.Seq2[string, int] {
return func(yield func(string, int) bool) {
switch evt.Kind {
case 3:
//
// follower counts
for _, tag := range evt.Tags {
if len(tag) >= 2 && tag[0] == "p" && nostr.IsValid32ByteHex(tag[1]) {
// 32th nibble of each "p" tag
p, _ := strconv.ParseInt(tag[1][32:33], 16, 64)
if !yield(tag[1], int(p+8)) {
return
}
}
}
case 7:
//
// reaction counts:
// (only the last "e" tag counts)
lastE := evt.Tags.FindLast("e")
if lastE != nil {
v := lastE[1]
if nostr.IsValid32ByteHex(v) {
// 32th nibble of "e" tag
p, _ := strconv.ParseInt(v[32:33], 16, 64)
if !yield(v, int(p+8)) {
return
}
}
}
}
}
}