khatru: ForceBroadcastEvent()

This commit is contained in:
fiatjaf
2025-10-31 13:05:19 -03:00
parent 13c44a4644
commit 32bbff615a
3 changed files with 9 additions and 4 deletions

View File

@@ -7,5 +7,10 @@ import (
// BroadcastEvent emits an event to all listeners whose filters' match, skipping all filters and actions // BroadcastEvent emits an event to all listeners whose filters' match, skipping all filters and actions
// it also doesn't attempt to store the event or trigger any reactions or callbacks // it also doesn't attempt to store the event or trigger any reactions or callbacks
func (rl *Relay) BroadcastEvent(evt nostr.Event) int { func (rl *Relay) BroadcastEvent(evt nostr.Event) int {
return rl.notifyListeners(evt) return rl.notifyListeners(evt, false)
}
// ForceBroadcastEvent is like BroadcastEvent, but it skips the PreventBroadcast hook.
func (rl *Relay) ForceBroadcastEvent(evt nostr.Event) int {
return rl.notifyListeners(evt, true)
} }

View File

@@ -223,7 +223,7 @@ func (rl *Relay) HandleWebsocket(w http.ResponseWriter, r *http.Request) {
if writeErr == nil { if writeErr == nil {
ok = true ok = true
if !skipBroadcast { if !skipBroadcast {
n := srl.notifyListeners(env.Event) n := srl.notifyListeners(env.Event, false)
// the number of notified listeners matters in ephemeral events // the number of notified listeners matters in ephemeral events
if env.Event.Kind.IsEphemeral() { if env.Event.Kind.IsEphemeral() {

View File

@@ -133,12 +133,12 @@ func (rl *Relay) removeClientAndListeners(ws *WebSocket) {
} }
// returns how many listeners were notified // returns how many listeners were notified
func (rl *Relay) notifyListeners(event nostr.Event) int { func (rl *Relay) notifyListeners(event nostr.Event, skipPrevent bool) int {
count := 0 count := 0
listenersloop: listenersloop:
for _, listener := range rl.listeners { for _, listener := range rl.listeners {
if listener.filter.Matches(event) { if listener.filter.Matches(event) {
if nil != rl.PreventBroadcast { if !skipPrevent && nil != rl.PreventBroadcast {
if rl.PreventBroadcast(listener.ws, listener.filter, event) { if rl.PreventBroadcast(listener.ws, listener.filter, event) {
continue listenersloop continue listenersloop
} }