nips/25.md
William Casarin 89bb08ba86 nip25: include dislikes/downvotes
Signed-off-by: William Casarin <jb55@jb55.com>
2022-07-30 10:09:33 -07:00

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
}