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
// it also doesn't attempt to store the event or trigger any reactions or callbacks
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 {
ok = true
if !skipBroadcast {
n := srl.notifyListeners(env.Event)
n := srl.notifyListeners(env.Event, false)
// the number of notified listeners matters in ephemeral events
if env.Event.Kind.IsEphemeral() {

View File

@@ -133,12 +133,12 @@ func (rl *Relay) removeClientAndListeners(ws *WebSocket) {
}
// 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
listenersloop:
for _, listener := range rl.listeners {
if listener.filter.Matches(event) {
if nil != rl.PreventBroadcast {
if !skipPrevent && nil != rl.PreventBroadcast {
if rl.PreventBroadcast(listener.ws, listener.filter, event) {
continue listenersloop
}