Signed-off-by: William Casarin <jb55@jb55.com>
1.6 KiB
NIP-25
Reactions
draft
optional
author:jb55
A reaction is a kind 7
note that is used to react to kind 1
text notes.
The generic reaction, represented by an empty string, SHOULD be interpreted as a "like".
A reaction with content
set to -
SHOULD be interepreted as a "dislike" or
"downvote". It SHOULD NOT be counted as a "like", and MAY be displayed as a
downvote or dislike on a post. A client MAY also choose to tally likes against
dislikes in a reddit-like system of upvotes and downvotes, or display them as
separate tallys.
The content
MAY be an emoji, in this case it MAY be interpreted as a "like",
or the client MAY display this emoji reaction on the post.
Tags
The reaction event SHOULD include e
and p
tags from the note the user is
reacting to. This allows users to be notified of reactions to posts they were
mentioned in. Including the e
tags enables clients to pull all the reactions
associated with individual posts or all the posts in a thread.
The last e
tag MUST be the id
of the note that is being reacted to.
The last p
tag MUST be the pubkey
of the event being reacted to.
Example code
func make_like_event(pubkey: String, privkey: String, liked: NostrEvent) -> NostrEvent {
var tags: [[String]] = liked.tags.filter {
tag in tag.count >= 2 && (tag[0] == "e" || tag[0] == "p")
}
tags.append(["e", liked.id])
tags.append(["p", liked.pubkey])
let ev = NostrEvent(content: "", pubkey: pubkey, kind: 7, tags: tags)
ev.calculate_id()
ev.sign(privkey: privkey)
return ev
}