Skip to content
This repository was archived by the owner on Jan 24, 2026. It is now read-only.

Commit e160e05

Browse files
committed
implement match with search
1 parent 04b6cbc commit e160e05

2 files changed

Lines changed: 28 additions & 3 deletions

File tree

filter.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,17 @@ func (ef Filter) MatchesIgnoringTimestampConstraints(event *Event) bool {
9393
}
9494

9595
if ef.Search != "" && event.Content != "" {
96-
for _, word := range strings.Split(ef.Search, " ") {
97-
if strings.Contains(event.Content, word) {
98-
return true
96+
found := true
97+
content := strings.ToLower(strings.TrimSpace(event.Content))
98+
for _, word := range strings.Fields(strings.ToLower(strings.ToLower(ef.Search))) {
99+
if !strings.Contains(content, word) {
100+
found = false
101+
break
99102
}
100103
}
104+
if !found {
105+
return false
106+
}
101107
}
102108

103109
return true

filter_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,22 @@ func TestTheoreticalLimit(t *testing.T) {
151151
require.Equal(t, 24, GetTheoreticalLimit(Filter{Authors: []string{"a", "b", "c", "d", "e", "f"}, Kinds: []int{30023, 30024}, Tags: TagMap{"d": []string{"aaa", "bbb"}}}))
152152
require.Equal(t, -1, GetTheoreticalLimit(Filter{Authors: []string{"a", "b", "c", "d", "e", "f"}, Kinds: []int{30023, 30024}}))
153153
}
154+
155+
func TestFilterMatchSearch(t *testing.T) {
156+
var filter Filter
157+
var event Event
158+
159+
json.Unmarshal([]byte(`{"id":"5a127c9c931f392f6afc7fdb74e8be01c34035314735a6b97d2cf360d13cfb94","pubkey":"1d80e5588de010d137a67c42b03717595f5f510e73e42cfc48f31bae91844d59","created_at":1677033299,"kind":1,"tags":[["t","japan"]],"content":"If you like my art,I'd appreciate a coin or two!!\nZap is welcome!! Thanks.\n\n\n#japan #bitcoin #art #bananaart\nhttps://void.cat/d/CgM1bzDgHUCtiNNwfX9ajY.webp","sig":"828497508487ca1e374f6b4f2bba7487bc09fccd5cc0d1baa82846a944f8c5766918abf5878a580f1e6615de91f5b57a32e34c42ee2747c983aaf47dbf2a0255"}`), &event)
160+
161+
json.Unmarshal([]byte(`{"kinds":[1],"authors":["a8171781fd9e90ede3ea44ddca5d3abf828fe8eedeb0f3abb0dd3e563562e1fc","1d80e5588de010d137a67c42b03717595f5f510e73e42cfc48f31bae91844d59","ed4ca520e9929dfe9efdadf4011b53d30afd0678a09aa026927e60e7a45d9244"],"since":1677033299,"search":"nostr"}`), &filter)
162+
assert.False(t, filter.Matches(&event), "should not match")
163+
164+
json.Unmarshal([]byte(`{"kinds":[1],"authors":["a8171781fd9e90ede3ea44ddca5d3abf828fe8eedeb0f3abb0dd3e563562e1fc","1d80e5588de010d137a67c42b03717595f5f510e73e42cfc48f31bae91844d59","ed4ca520e9929dfe9efdadf4011b53d30afd0678a09aa026927e60e7a45d9244"],"since":1677033299,"search":"YOU"}`), &filter)
165+
assert.True(t, filter.Matches(&event), "match with uppercase search failed")
166+
167+
json.Unmarshal([]byte(`{"kinds":[1],"authors":["a8171781fd9e90ede3ea44ddca5d3abf828fe8eedeb0f3abb0dd3e563562e1fc","1d80e5588de010d137a67c42b03717595f5f510e73e42cfc48f31bae91844d59","ed4ca520e9929dfe9efdadf4011b53d30afd0678a09aa026927e60e7a45d9244"],"since":1677033299,"search":"you"}`), &filter)
168+
assert.True(t, filter.Matches(&event), "match with lowercase search failed")
169+
170+
json.Unmarshal([]byte(`{"kinds":[1],"authors":["a8171781fd9e90ede3ea44ddca5d3abf828fe8eedeb0f3abb0dd3e563562e1fc","1d80e5588de010d137a67c42b03717595f5f510e73e42cfc48f31bae91844d59","ed4ca520e9929dfe9efdadf4011b53d30afd0678a09aa026927e60e7a45d9244"],"since":1677033299,"search":"Zap you"}`), &filter)
171+
assert.True(t, filter.Matches(&event), "match with lowercase search failed")
172+
}

0 commit comments

Comments
 (0)