mirror of
https://github.com/aljazceru/khatru.git
synced 2026-01-13 10:24:20 +01:00
implement nip-16 on closed and basic relays.
This commit is contained in:
@@ -15,7 +15,7 @@ import (
|
||||
|
||||
func (b *BasicRelay) QueryEvents(filter *nostr.Filter) (events []nostr.Event, err error) {
|
||||
var conditions []string
|
||||
var params []interface{}
|
||||
var params []any
|
||||
|
||||
if filter == nil {
|
||||
err = errors.New("filter cannot be null")
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/fiatjaf/go-nostr"
|
||||
)
|
||||
@@ -16,22 +17,18 @@ func (b *BasicRelay) SaveEvent(evt *nostr.Event) error {
|
||||
}
|
||||
|
||||
// react to different kinds of events
|
||||
switch evt.Kind {
|
||||
case nostr.KindSetMetadata:
|
||||
// delete past set_metadata events from this user
|
||||
b.DB.Exec(`DELETE FROM event WHERE pubkey = $1 AND kind = 0`, evt.PubKey)
|
||||
case nostr.KindRecommendServer:
|
||||
if evt.Kind == nostr.KindSetMetadata || evt.Kind == nostr.KindContactList || (10000 <= evt.Kind && evt.Kind < 20000) {
|
||||
// delete past events from this user
|
||||
b.DB.Exec(`DELETE FROM event WHERE pubkey = $1 AND kind = $2`, evt.PubKey, evt.Kind)
|
||||
} else if evt.Kind == nostr.KindRecommendServer {
|
||||
// delete past recommend_server events equal to this one
|
||||
b.DB.Exec(`DELETE FROM event WHERE pubkey = $1 AND kind = 2 AND content = $2`,
|
||||
evt.PubKey, evt.Content)
|
||||
case nostr.KindContactList:
|
||||
// delete past contact lists from this same pubkey
|
||||
b.DB.Exec(`DELETE FROM event WHERE pubkey = $1 AND kind = 3`, evt.PubKey)
|
||||
default:
|
||||
// delete all but the 10 most recent ones
|
||||
b.DB.Exec(`DELETE FROM event WHERE pubkey = $1 AND kind = $2 AND content = $3`,
|
||||
evt.PubKey, evt.Kind, evt.Content)
|
||||
} else {
|
||||
// delete all but the 100 most recent ones
|
||||
b.DB.Exec(`DELETE FROM event WHERE pubkey = $1 AND kind = $2 AND created_at < (
|
||||
SELECT created_at FROM event WHERE pubkey = $1
|
||||
ORDER BY created_at DESC OFFSET 10 LIMIT 1
|
||||
ORDER BY created_at DESC OFFSET 100 LIMIT 1
|
||||
)`,
|
||||
evt.PubKey, evt.Kind)
|
||||
}
|
||||
@@ -51,5 +48,11 @@ func (b *BasicRelay) SaveEvent(evt *nostr.Event) error {
|
||||
return fmt.Errorf("failed to save event %s: %w", evt.ID, err)
|
||||
}
|
||||
|
||||
// delete ephemeral events after a minute
|
||||
go func() {
|
||||
time.Sleep(75 * time.Second)
|
||||
b.DB.Exec("DELETE FROM event WHERE id = $1", evt.ID)
|
||||
}()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user