Skip to content

Latest commit

 

History

History
94 lines (71 loc) · 4.81 KB

25.md

File metadata and controls

94 lines (71 loc) · 4.81 KB

NIP-25

リアクション

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つのみ指定可能である。