diff --git a/nip45/hll_event.go b/nip45/hll_event.go index ad76565..51ef45c 100644 --- a/nip45/hll_event.go +++ b/nip45/hll_event.go @@ -37,6 +37,20 @@ func HyperLogLogEventPubkeyOffsetsAndReferencesForEvent(evt *nostr.Event) iter.S } } } + case 1111: + // + // comment counts: + e := evt.Tags.Find("E") + if e != nil { + v := e[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 + } + } + } } } } diff --git a/nip45/hll_filter.go b/nip45/hll_filter.go index c075b38..857e5b7 100644 --- a/nip45/hll_filter.go +++ b/nip45/hll_filter.go @@ -19,18 +19,20 @@ func HyperLogLogEventPubkeyOffsetForFilter(filter nostr.Filter) int { // only serve the cases explicitly defined by the NIP: if pTags, ok := filter.Tags["p"]; ok { - // - // follower counts: - if filter.Kinds[0] == 3 && len(pTags) == 1 { - // 32th nibble of "p" tag - p, err := strconv.ParseInt(pTags[0][32:33], 16, 64) - if err != nil { - return -1 + if len(pTags) == 1 && nostr.IsValid32ByteHex(pTags[0]) { + // + // follower counts: + if filter.Kinds[0] == 3 { + // 32th nibble of "p" tag + p, err := strconv.ParseInt(pTags[0][32:33], 16, 64) + if err != nil { + return -1 + } + return int(p + 8) } - return int(p + 8) } } else if eTags, ok := filter.Tags["e"]; ok { - if len(eTags) == 1 { + if len(eTags) == 1 && nostr.IsValid32ByteHex(eTags[0]) { // // reaction counts: if filter.Kinds[0] == 7 { @@ -42,6 +44,19 @@ func HyperLogLogEventPubkeyOffsetForFilter(filter nostr.Filter) int { return int(p + 8) } } + } else if eTags, ok := filter.Tags["E"]; ok { + if len(eTags) == 1 && nostr.IsValid32ByteHex(eTags[0]) { + // + // reaction counts: + if filter.Kinds[0] == 1111 { + // 32th nibble of "E" tag + p, err := strconv.ParseInt(eTags[0][32:33], 16, 64) + if err != nil { + return -1 + } + return int(p + 8) + } + } } // everything else is false at least for now