@@ -214,10 +214,15 @@ func is_friend_event(_ ev: NostrEvent, our_pubkey: String, contacts: Contacts) -
|
|||||||
return true
|
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
|
// 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
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ struct KeyEvent {
|
|||||||
let relay_url: String
|
let relay_url: String
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ReferencedId: Identifiable {
|
struct ReferencedId: Identifiable, Hashable {
|
||||||
let ref_id: String
|
let ref_id: String
|
||||||
let relay_id: String?
|
let relay_id: String?
|
||||||
let key: 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? {
|
func make_first_contact_event(keypair: Keypair) -> NostrEvent? {
|
||||||
guard let privkey = keypair.privkey else {
|
guard let privkey = keypair.privkey else {
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
Reference in New Issue
Block a user