draft
optional
リアクションとはkind 7
のイベントであり、他のイベントに対しての反応を表現するために使用される。
content
が+
の文字列のものが汎用的なリアクションとして定められており、
これは「いいね」または「賛成」(それぞれ原文ではlike, upvote)として解釈されるべきである (SHOULD) 。
content
が-
であるリアクションは「低評価」または「反対」(それぞれ原文ではdislike, downvote)として解釈されるべきである (SHOULD) 。
また、これらは「いいね」としてカウントされるべきではなく (SHOULD NOT) 、
低評価・反対として投稿に表示してよい (MAY) 。
クライアントはこれらを表示する際、redditのように高評価数-低評価数として1つの数値に集計して表示するか、
あるいはそのまま分けて表示してよい (MAY) 。
content
には、絵文字及びカスタム絵文字(NIP-30)を利用してもよく (MAY) 、この場合「高評価」あるいは「低評価」として解釈してもよい (MAY) 。
また、クライアントは絵文字によるリアクションを投稿に表示してもよい (MAY) 。
もしcontent
が空文字列だった場合は、クライアントはそれを"+"として解釈すべきである。
リアクションイベントには、リアクション対象としているイベントに含まれるe
及びp
タグを含めるべきである (SHOULD) 。ターゲットが置換可能なイベントの場合、任意でa
タグを含めることができる。これにより、各ユーザはメンションされている投稿へのリアクションがあった際、通知を受け取ることが可能になる。また、クライアントはこのようにして付与されたe
タグを使用することで、1つの投稿あるいはスレッド全体に関連するリアクションを取得できる。a
タグを使用すると、クライアントは置換可能なイベントの全てのバージョンに対するリアクションを取得できる。
タグのリストの中で最後に現れるe
タグでは、リアクション対象となるノートのid
を指定しなければならない (MUST) 。
タグのリストの中で最後に現れるp
タグでは、リアクション対象となるイベントのpubkey
を指定しなければならない (MUST) 。
a
タグでは、リアクション対象となる置換可能なものの座標 (kind:pubkey:d-tag
) を含めなければならない (MUST) 。
リアクションイベントには、リアクションされたイベントの文字列化されたkind番号を値とする
k
タグを含めてもよい (MAY) 。
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])
tags.append(["k", liked.kind])
let ev = NostrEvent(content: "+", pubkey: pubkey, kind: 7, tags: tags)
ev.calculate_id()
ev.sign(privkey: privkey)
return ev
}
リアクションのターゲットがWebサイトの場合、リアクションはkind 17
イベントでなければならず (MUST) 、WebサイトのURLを含むr
タグを含めなければならない (MUST) 。
{
"kind": 17,
"content": "⭐",
"tags": [
["r", "https://example.com/"]
],
// other fields...
}
同じWebサイトへのリアクションがクエリから省略されないように、URLは正規化される必要がある。 ページのセクションにリアクションを付けるために、フラグメントをURLに追加してもよい (MAY)。 フラグメントを含むURLは、元と同じURLとはみなされないことに注意すべきである。
クライアントは、リアクション内容としてNIP-30のカスタム絵文字における:shortcode:
を使用してもよい。
ショートコードがリアクションに含まれる場合、クライアントはemojiタグを参照し、
その内容を絵文字として描画すべきである。
{
"kind": 7,
"content": ":soapbox:",
"tags": [
["emoji", "soapbox", "https://gleasonator.com/emoji/Gleasonator/soapbox.png"]
],
// other fields...
}
content
に含めて良い:shortcode:
は1つのみで、emojiタグについても同様に1つのみ指定可能である。