NIP-25 ====== Reactions --------- `draft` `optional` `author:jb55` A reaction is a `kind 7` note that is used to react to other notes. The generic reaction, represented by the `content` set to a `+` string, SHOULD be interpreted as a "like" or "upvote". A reaction with `content` set to `-` SHOULD be interpreted 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 tallies. The `content` MAY be an emoji, or [NIP-30](30.md) custom emoji in this case it MAY be interpreted as a "like" or "dislike", 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 ```swift 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 }