From 1b380dea9a94b72e37439ab0c206c97b10988779 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Thu, 12 Feb 2026 14:25:53 -0300 Subject: [PATCH] count: support the same flags as req. fixes https://github.com/fiatjaf/nak/issues/103 --- count.go | 104 ++++--------------------------------------------------- 1 file changed, 7 insertions(+), 97 deletions(-) diff --git a/count.go b/count.go index e0d2080..2fa4407 100644 --- a/count.go +++ b/count.go @@ -17,55 +17,8 @@ var count = &cli.Command{ Usage: "generates encoded COUNT messages and optionally use them to talk to relays", Description: `outputs a nip45 request (the flags are mostly the same as 'nak req').`, DisableSliceFlagSeparator: true, - Flags: []cli.Flag{ - &PubKeySliceFlag{ - Name: "author", - Aliases: []string{"a"}, - Usage: "only accept events from these authors", - Category: CATEGORY_FILTER_ATTRIBUTES, - }, - &cli.IntSliceFlag{ - Name: "kind", - Aliases: []string{"k"}, - Usage: "only accept events with these kind numbers", - Category: CATEGORY_FILTER_ATTRIBUTES, - }, - &cli.StringSliceFlag{ - Name: "tag", - Aliases: []string{"t"}, - Usage: "takes a tag like -t e=, only accept events with these tags", - Category: CATEGORY_FILTER_ATTRIBUTES, - }, - &cli.StringSliceFlag{ - Name: "e", - Usage: "shortcut for --tag e=", - Category: CATEGORY_FILTER_ATTRIBUTES, - }, - &cli.StringSliceFlag{ - Name: "p", - Usage: "shortcut for --tag p=", - Category: CATEGORY_FILTER_ATTRIBUTES, - }, - &NaturalTimeFlag{ - Name: "since", - Aliases: []string{"s"}, - Usage: "only accept events newer than this (unix timestamp)", - Category: CATEGORY_FILTER_ATTRIBUTES, - }, - &NaturalTimeFlag{ - Name: "until", - Aliases: []string{"u"}, - Usage: "only accept events older than this (unix timestamp)", - Category: CATEGORY_FILTER_ATTRIBUTES, - }, - &cli.IntFlag{ - Name: "limit", - Aliases: []string{"l"}, - Usage: "only accept up to this number of events", - Category: CATEGORY_FILTER_ATTRIBUTES, - }, - }, - ArgsUsage: "[relay...]", + Flags: reqFilterFlags, + ArgsUsage: "[relay...]", Action: func(ctx context.Context, c *cli.Command) error { biggerUrlSize := 0 relayUrls := c.Args().Slice() @@ -86,51 +39,8 @@ var count = &cli.Command{ filter := nostr.Filter{} - if authors := getPubKeySlice(c, "author"); len(authors) > 0 { - filter.Authors = authors - } - if kinds64 := c.IntSlice("kind"); len(kinds64) > 0 { - kinds := make([]nostr.Kind, len(kinds64)) - for i, v := range kinds64 { - kinds[i] = nostr.Kind(v) - } - filter.Kinds = kinds - } - - tags := make([][]string, 0, 5) - for _, tagFlag := range c.StringSlice("tag") { - spl := strings.SplitN(tagFlag, "=", 2) - if len(spl) == 2 { - tags = append(tags, []string{spl[0], decodeTagValue(spl[1])}) - } else { - return fmt.Errorf("invalid --tag '%s'", tagFlag) - } - } - for _, etag := range c.StringSlice("e") { - tags = append(tags, []string{"e", decodeTagValue(etag)}) - } - for _, ptag := range c.StringSlice("p") { - tags = append(tags, []string{"p", decodeTagValue(ptag)}) - } - if len(tags) > 0 { - filter.Tags = make(nostr.TagMap) - for _, tag := range tags { - if _, ok := filter.Tags[tag[0]]; !ok { - filter.Tags[tag[0]] = make([]string, 0, 3) - } - filter.Tags[tag[0]] = append(filter.Tags[tag[0]], tag[1]) - } - } - - if c.IsSet("since") { - filter.Since = getNaturalDate(c, "since") - } - if c.IsSet("until") { - filter.Until = getNaturalDate(c, "until") - } - - if limit := c.Int("limit"); limit != 0 { - filter.Limit = int(limit) + if err := applyFlagsToFilter(c, &filter); err != nil { + return err } successes := 0 @@ -147,14 +57,14 @@ var count = &cli.Command{ fmt.Fprintf(os.Stderr, "%s%s: ", strings.Repeat(" ", biggerUrlSize-len(relayUrl)), relayUrl) if err != nil { - fmt.Fprintf(os.Stderr, "❌ %s\n", err) + fmt.Fprintf(os.Stderr, "error: %s\n", err) continue } var hasHLLStr string if hll != nil && len(hllRegisters) == 256 { hll.MergeRegisters(hllRegisters) - hasHLLStr = " 📋" + hasHLLStr = " (hll)" } fmt.Fprintf(os.Stderr, "%d%s\n", count, hasHLLStr) @@ -163,7 +73,7 @@ var count = &cli.Command{ if successes == 0 { return fmt.Errorf("all relays have failed") } else if hll != nil { - fmt.Fprintf(os.Stderr, "📋 HyperLogLog sum: %d\n", hll.Count()) + fmt.Fprintf(os.Stderr, "HyperLogLog sum: %d\n", hll.Count()) } } else { // no relays given, will just print the filter