NIP-22 ====== Reactions v2 ------------ `draft` `optional` This NIP should be used in place of [NIP-25](25.md). A reaction is a way to like/upvote or dislike/downvote an event or any entity external to nostr, such as an URL. A like is a `kind:31143` event. A dislike is a `kind:31144` one. The `d` tag is the address of the event being reacted to, if applicable, or the event's id or any other identifier from [NIP-73](73.md)'s `s` tag possible values. The `.content` field is one of: emoji, custom emoji (e.g.: ":emoji_shortcode_example:") or empty string. If a custom emoji, it must include a [NIP-30](30.md) `emoji` tag. One `p` tag must be included when reacting to an event, with the reacted to event's pubkey. It should include a relay url hint. Example: `["p", "", ""]`. One `k` tag must be added with the reacted to event's kind or any of the [NIP-73](73.md)'s `k` tag possible values for external entities. Example event: ```jsonc { "kind": 31144, // dislike/downvote "content": "🤣️", "tags": [ ["d", "isan:0000-0006-3347-0000-o-0000-0000-2"], // reacting to a movie ["k", "isan"] ] // other fields... } ``` ## A Client Implementation Suggestion A client should show two buttons, a like/upvote and a dislike/downvote. It may show just one if it only cares for e.g. bad reactions. Both buttons upon clicking should show an emoji picker. Both buttons' emoji picker may share the same emoji set, because the exact same emoji may be used as a positive or negative reaction depending on the associated context or culture. ### Neutral Reactions If a client wants to offer neutral reactions, it should send both a `kind:31143` event and a `kind:31144` one with the same `d` tag.