@@ -214,10 +214,15 @@ func is_friend_event(_ ev: NostrEvent, our_pubkey: String, contacts: Contacts) -
|
||||
return true
|
||||
}
|
||||
|
||||
let pks = ev.referenced_pubkeys
|
||||
let pks = get_referenced_id_set(tags: ev.tags, key: "p")
|
||||
|
||||
// reply to self
|
||||
if pks.count == 0 {
|
||||
return true
|
||||
}
|
||||
|
||||
// allow reply-to-self-or-friend case
|
||||
if pks.count == 1 && contacts.is_friend(pks[0].ref_id) {
|
||||
if pks.count == 1 && contacts.is_friend(pks.first!.ref_id) {
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ struct KeyEvent {
|
||||
let relay_url: String
|
||||
}
|
||||
|
||||
struct ReferencedId: Identifiable {
|
||||
struct ReferencedId: Identifiable, Hashable {
|
||||
let ref_id: String
|
||||
let relay_id: String?
|
||||
let key: String
|
||||
@@ -364,6 +364,18 @@ func get_referenced_ids(tags: [[String]], key: String) -> [ReferencedId] {
|
||||
}
|
||||
}
|
||||
|
||||
func get_referenced_id_set(tags: [[String]], key: String) -> Set<ReferencedId> {
|
||||
return tags.reduce(into: Set()) { (acc, tag) in
|
||||
if tag.count >= 2 && tag[0] == key {
|
||||
var relay_id: String? = nil
|
||||
if tag.count >= 3 {
|
||||
relay_id = tag[2]
|
||||
}
|
||||
acc.insert(ReferencedId(ref_id: tag[1], relay_id: relay_id, key: key))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func make_first_contact_event(keypair: Keypair) -> NostrEvent? {
|
||||
guard let privkey = keypair.privkey else {
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user