From 81359b1cdc422f99f47446afa28df07a08d075e8 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 12 Jun 2023 18:35:23 -0400 Subject: [PATCH 01/19] Simple moderated communities flow. --- 172.md | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 172.md diff --git a/172.md b/172.md new file mode 100644 index 0000000000..0cc81078d3 --- /dev/null +++ b/172.md @@ -0,0 +1,85 @@ +NIP-172 +======= + +Moderated Communities (Reddit Style) +------------------------------------ + +`draft` `optional` `author:vitorpamplona` + +The goal of this NIP is to create moderator-approved public communities arount a topic. It defines the replaceable event `34550` to define the community and the current list of moderators/administrators. Users that want to post into to the community, simply tag any Nostr event with an `a` tag. Moderators the issue an approval event `34551` that links the community with the new post. + +# Community definition + +Kind 34550 should include any field that helps define the community and the set of moderators. + +```js +{ + "id": "<32-bytes lowercase hex-encoded SHA-256 of the the serialized event data>", + "pubkey": "<32-bytes lowercase hex-encoded public key of the event creator>", + "created_at": "", + "kind": "34550", + "tags": [ + ["d", ""], + ["description", ""], + + // moderators + ["p", "<32-bytes hex of a pubkey>", "", "moderator"] + ["p", "<32-bytes hex of a pubkey>", "", "moderator"] + ["p", "<32-bytes hex of a pubkey>", "", "moderator"] + ] +} +``` + +# New Post Request + +Any Nostr event can be a post request. Clients should simply add the community's `a` tag to be presented for the moderator's approval. + +```js +{ + "id": "<32-bytes lowercase hex-encoded SHA-256 of the the serialized event data>", + "pubkey": "<32-bytes lowercase hex-encoded public key of the event creator>", + "created_at": "", + "kind": "1", + "tags": [ + ["a", "34550::", ""], + ], + "content": "" +} +``` + +Community management clients can filter all mentions to the kind-34550 event and request moderators to approve each submission. The same moderator can remove his/her approval of the post at anytime. + +# Post Approval by moderators + +The post approval includes a stringified `new post request` event inside the content's of the approval (NIP-18-style). + +```js +{ + "id": "<32-bytes lowercase hex-encoded SHA-256 of the the serialized event data>", + "pubkey": "<32-bytes lowercase hex-encoded public key of the event creator>", + "created_at": "", + "kind": "34551", + "tags": [ + ["a", "34550::", ""], + ["e", "", ""], + ["p", "", ""], + ], + "content": "{ }" +} +``` + +It's recommended that multiple moderators approve posts to avoid unapproving them when a given moderator is removed from the owner's list. In case the full list of moderators must be rotated, the new moderator set must sign post approvals for the past post or the community will restart. + +# Displaying + +Community clients can display posts that have been approved by at least 1 moderator or by the community owner. + +The following filter displays the approved posts. + +```js +{ + "authors": ["", "moderator1", "moderator2", "moderator3", ...], + "kinds": 34551, + "#a": ["34550::"], +} +``` \ No newline at end of file From a933e03803a47a156fb04e6057d9fa67a1c24595 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 12 Jun 2023 18:38:20 -0400 Subject: [PATCH 02/19] Typos --- 172.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/172.md b/172.md index 0cc81078d3..542258ac6d 100644 --- a/172.md +++ b/172.md @@ -6,11 +6,11 @@ Moderated Communities (Reddit Style) `draft` `optional` `author:vitorpamplona` -The goal of this NIP is to create moderator-approved public communities arount a topic. It defines the replaceable event `34550` to define the community and the current list of moderators/administrators. Users that want to post into to the community, simply tag any Nostr event with an `a` tag. Moderators the issue an approval event `34551` that links the community with the new post. +The goal of this NIP is to create moderator-approved public communities around a topic. It defines the replaceable event `34550` to define the community and the current list of moderators/administrators. Users that want to post into the community, simply tag any Nostr event with an `a` tag. Moderators issue an approval event `34551` that links the community with the new post. # Community definition -Kind 34550 should include any field that helps define the community and the set of moderators. +Kind 34550 should include any field that helps define the community and the set of moderators. ```js { @@ -32,7 +32,7 @@ Kind 34550 should include any field that helps define the community and the set # New Post Request -Any Nostr event can be a post request. Clients should simply add the community's `a` tag to be presented for the moderator's approval. +Any Nostr event can be a post request. Clients should simply add the community's `a` tag to be presented for the moderator's approval. ```js { @@ -47,11 +47,11 @@ Any Nostr event can be a post request. Clients should simply add the community's } ``` -Community management clients can filter all mentions to the kind-34550 event and request moderators to approve each submission. The same moderator can remove his/her approval of the post at anytime. +Community management clients can filter all mentions of the kind-34550 event and request moderators to approve each submission. The same moderator can remove his/her approval of the post at any time. # Post Approval by moderators -The post approval includes a stringified `new post request` event inside the content's of the approval (NIP-18-style). +The post-approval event includes a stringified `new post request` event inside the content of the approval (NIP-18-style). ```js { @@ -68,13 +68,13 @@ The post approval includes a stringified `new post request` event inside the con } ``` -It's recommended that multiple moderators approve posts to avoid unapproving them when a given moderator is removed from the owner's list. In case the full list of moderators must be rotated, the new moderator set must sign post approvals for the past post or the community will restart. +It's recommended that multiple moderators approve posts to avoid unapproving them when a given moderator is removed from the owner's list. In case the full list of moderators must be rotated, the new moderator set must sign post-approvals for posts in the past or the community will restart. # Displaying -Community clients can display posts that have been approved by at least 1 moderator or by the community owner. +Community clients can display posts that have been approved by at least 1 moderator or by the community owner. -The following filter displays the approved posts. +The following filter displays the approved posts. ```js { From 22c1af86227ea09c15fbcc6d34bf14711847e4e4 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 12 Jun 2023 18:40:19 -0400 Subject: [PATCH 03/19] Fixing indentation --- 172.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/172.md b/172.md index 542258ac6d..9aa59e21b7 100644 --- a/172.md +++ b/172.md @@ -20,12 +20,12 @@ Kind 34550 should include any field that helps define the community and the set "kind": "34550", "tags": [ ["d", ""], - ["description", ""], + ["description", ""], // moderators ["p", "<32-bytes hex of a pubkey>", "", "moderator"] - ["p", "<32-bytes hex of a pubkey>", "", "moderator"] - ["p", "<32-bytes hex of a pubkey>", "", "moderator"] + ["p", "<32-bytes hex of a pubkey>", "", "moderator"] + ["p", "<32-bytes hex of a pubkey>", "", "moderator"] ] } ``` @@ -61,8 +61,8 @@ The post-approval event includes a stringified `new post request` event inside t "kind": "34551", "tags": [ ["a", "34550::", ""], - ["e", "", ""], - ["p", "", ""], + ["e", "", ""], + ["p", "", ""], ], "content": "{ }" } From 409fc875da3673cab8f6a47a23483bdeb249da60 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Tue, 13 Jun 2023 10:34:34 -0400 Subject: [PATCH 04/19] Adds preferred relay information to tags. --- 172.md | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/172.md b/172.md index 9aa59e21b7..1ca8b17d29 100644 --- a/172.md +++ b/172.md @@ -21,11 +21,19 @@ Kind 34550 should include any field that helps define the community and the set "tags": [ ["d", ""], ["description", ""], + ["image", "", "WidthxHeight"] + + //.. other tags relevant to defining the community // moderators - ["p", "<32-bytes hex of a pubkey>", "", "moderator"] - ["p", "<32-bytes hex of a pubkey>", "", "moderator"] - ["p", "<32-bytes hex of a pubkey>", "", "moderator"] + ["p", "<32-bytes hex of a pubkey>", "", "moderator"], + ["p", "<32-bytes hex of a pubkey>", "", "moderator"], + ["p", "<32-bytes hex of a pubkey>", "", "moderator"], + + // relays used by the community + ["relay", "", "author"], + ["relay", ""], + ["relay", ""] ] } ``` @@ -51,7 +59,7 @@ Community management clients can filter all mentions of the kind-34550 event and # Post Approval by moderators -The post-approval event includes a stringified `new post request` event inside the content of the approval (NIP-18-style). +The post-approval event includes a stringified `new post request` event inside the `.content` of the approval (NIP-18-style). ```js { From 99b2796c644d07a4e26eee7f281b787929acf07a Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Tue, 13 Jun 2023 15:52:41 -0400 Subject: [PATCH 05/19] Update 172.md Adds kind to the post approval. Co-authored-by: arthurfranca --- 172.md | 1 + 1 file changed, 1 insertion(+) diff --git a/172.md b/172.md index 1ca8b17d29..4689165efd 100644 --- a/172.md +++ b/172.md @@ -71,6 +71,7 @@ The post-approval event includes a stringified `new post request` event inside t ["a", "34550::", ""], ["e", "", ""], ["p", "", ""], + ["k", ""], ], "content": "{ }" } From 1982df7943f84604bc829202dd3d4f6531ef59cf Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 15 Jun 2023 09:38:30 -0400 Subject: [PATCH 06/19] Removes quotes from kind Co-authored-by: arthurfranca --- 172.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/172.md b/172.md index 4689165efd..330fd1a8e3 100644 --- a/172.md +++ b/172.md @@ -17,7 +17,7 @@ Kind 34550 should include any field that helps define the community and the set "id": "<32-bytes lowercase hex-encoded SHA-256 of the the serialized event data>", "pubkey": "<32-bytes lowercase hex-encoded public key of the event creator>", "created_at": "", - "kind": "34550", + "kind": 34550, "tags": [ ["d", ""], ["description", ""], From 9b221094019667b5f6a12d4ce00612d81c4a3d54 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 15 Jun 2023 09:38:48 -0400 Subject: [PATCH 07/19] Fix typos in community image Co-authored-by: arthurfranca --- 172.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/172.md b/172.md index 330fd1a8e3..92cd52ca55 100644 --- a/172.md +++ b/172.md @@ -21,9 +21,9 @@ Kind 34550 should include any field that helps define the community and the set "tags": [ ["d", ""], ["description", ""], - ["image", "", "WidthxHeight"] + ["image", "", "WidthxHeight"], - //.. other tags relevant to defining the community + //.. other tags relevant to defining the community // moderators ["p", "<32-bytes hex of a pubkey>", "", "moderator"], From 7e0f2fd6c2843ece308bfd2393aaa75d7c2f3673 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 15 Jun 2023 09:38:56 -0400 Subject: [PATCH 08/19] Fix formatting Co-authored-by: arthurfranca --- 172.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/172.md b/172.md index 92cd52ca55..6a89a538eb 100644 --- a/172.md +++ b/172.md @@ -30,7 +30,7 @@ Kind 34550 should include any field that helps define the community and the set ["p", "<32-bytes hex of a pubkey>", "", "moderator"], ["p", "<32-bytes hex of a pubkey>", "", "moderator"], - // relays used by the community + // relays used by the community ["relay", "", "author"], ["relay", ""], ["relay", ""] From 0392e2181d378697cf765a6200e205ee253f51e7 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 15 Jun 2023 09:39:32 -0400 Subject: [PATCH 09/19] Fixes double-quoted kind number Co-authored-by: arthurfranca --- 172.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/172.md b/172.md index 6a89a538eb..9f5fab50d1 100644 --- a/172.md +++ b/172.md @@ -47,7 +47,7 @@ Any Nostr event can be a post request. Clients should simply add the community's "id": "<32-bytes lowercase hex-encoded SHA-256 of the the serialized event data>", "pubkey": "<32-bytes lowercase hex-encoded public key of the event creator>", "created_at": "", - "kind": "1", + "kind": 1, "tags": [ ["a", "34550::", ""], ], From e4273cc9a722c5fdf58fa782977293f34866927c Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 15 Jun 2023 09:46:24 -0400 Subject: [PATCH 10/19] Moves post approval to a regular (non-replaceable event) --- 172.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/172.md b/172.md index 9f5fab50d1..4a9f5a9977 100644 --- a/172.md +++ b/172.md @@ -6,7 +6,7 @@ Moderated Communities (Reddit Style) `draft` `optional` `author:vitorpamplona` -The goal of this NIP is to create moderator-approved public communities around a topic. It defines the replaceable event `34550` to define the community and the current list of moderators/administrators. Users that want to post into the community, simply tag any Nostr event with an `a` tag. Moderators issue an approval event `34551` that links the community with the new post. +The goal of this NIP is to create moderator-approved public communities around a topic. It defines the replaceable event `34550` to define the community and the current list of moderators/administrators. Users that want to post into the community, simply tag any Nostr event with an `a` tag. Moderators issue an approval event `4550` that links the community with the new post. # Community definition @@ -66,7 +66,7 @@ The post-approval event includes a stringified `new post request` event inside t "id": "<32-bytes lowercase hex-encoded SHA-256 of the the serialized event data>", "pubkey": "<32-bytes lowercase hex-encoded public key of the event creator>", "created_at": "", - "kind": "34551", + "kind": "4550", "tags": [ ["a", "34550::", ""], ["e", "", ""], @@ -77,7 +77,7 @@ The post-approval event includes a stringified `new post request` event inside t } ``` -It's recommended that multiple moderators approve posts to avoid unapproving them when a given moderator is removed from the owner's list. In case the full list of moderators must be rotated, the new moderator set must sign post-approvals for posts in the past or the community will restart. +It's recommended that multiple moderators approve posts to avoid unapproving them when a given moderator is removed from the owner's list. In case the full list of moderators must be rotated, the new moderator set must sign new approvals for posts in the past or the community will restart. The owner can also periodically copies of each moderator's approval events. # Displaying @@ -88,7 +88,7 @@ The following filter displays the approved posts. ```js { "authors": ["", "moderator1", "moderator2", "moderator3", ...], - "kinds": 34551, + "kinds": ["4550"], "#a": ["34550::"], } ``` \ No newline at end of file From f97be253a28bb5a62346c4ff896d73605086e273 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 15 Jun 2023 09:50:06 -0400 Subject: [PATCH 11/19] Adds arthurfranca as author --- 172.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/172.md b/172.md index 4a9f5a9977..ec6a60bd95 100644 --- a/172.md +++ b/172.md @@ -4,7 +4,7 @@ NIP-172 Moderated Communities (Reddit Style) ------------------------------------ -`draft` `optional` `author:vitorpamplona` +`draft` `optional` `author:vitorpamplona` `author:arthurfranca` The goal of this NIP is to create moderator-approved public communities around a topic. It defines the replaceable event `34550` to define the community and the current list of moderators/administrators. Users that want to post into the community, simply tag any Nostr event with an `a` tag. Moderators issue an approval event `4550` that links the community with the new post. From 3ef96def6fdc307a641e735dbaa03b831c5b9b93 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 15 Jun 2023 09:53:55 -0400 Subject: [PATCH 12/19] Fixes typos & clarifies the text. --- 172.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/172.md b/172.md index ec6a60bd95..df78081fe7 100644 --- a/172.md +++ b/172.md @@ -77,7 +77,7 @@ The post-approval event includes a stringified `new post request` event inside t } ``` -It's recommended that multiple moderators approve posts to avoid unapproving them when a given moderator is removed from the owner's list. In case the full list of moderators must be rotated, the new moderator set must sign new approvals for posts in the past or the community will restart. The owner can also periodically copies of each moderator's approval events. +It's recommended that multiple moderators approve posts to avoid deleting them from the community when a moderator is removed from the owner's list. In case the full list of moderators must be rotated, the new moderator set must sign new approvals for posts in the past or the community will restart. The owner can also periodically copy and re-sign of each moderator's approval events to make sure posts don't dissapear with moderators. # Displaying @@ -88,7 +88,7 @@ The following filter displays the approved posts. ```js { "authors": ["", "moderator1", "moderator2", "moderator3", ...], - "kinds": ["4550"], + "kinds": [4550], "#a": ["34550::"], } ``` \ No newline at end of file From b3b9d85993fba24b3f524a50129162fce2f9c954 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 15 Jun 2023 10:03:07 -0400 Subject: [PATCH 13/19] Adds references to other NIPs with more information and standardizes citations to event kinds --- 172.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/172.md b/172.md index df78081fe7..0c48ea3846 100644 --- a/172.md +++ b/172.md @@ -6,11 +6,11 @@ Moderated Communities (Reddit Style) `draft` `optional` `author:vitorpamplona` `author:arthurfranca` -The goal of this NIP is to create moderator-approved public communities around a topic. It defines the replaceable event `34550` to define the community and the current list of moderators/administrators. Users that want to post into the community, simply tag any Nostr event with an `a` tag. Moderators issue an approval event `4550` that links the community with the new post. +The goal of this NIP is to create moderator-approved public communities around a topic. It defines the replaceable event `kind:34550` to define the community and the current list of moderators/administrators. Users that want to post into the community, simply tag any Nostr event with the community's `a` tag (See [NIP-33](33.md)). Moderators issue an approval event `kind:4550` that links the community with the new post. # Community definition -Kind 34550 should include any field that helps define the community and the set of moderators. +`Kind:34550` should include any field that helps define the community and the set of moderators. ```js { @@ -19,16 +19,16 @@ Kind 34550 should include any field that helps define the community and the set "created_at": "", "kind": 34550, "tags": [ - ["d", ""], - ["description", ""], - ["image", "", "WidthxHeight"], + ["d", ""], + ["description", ""], + ["image", "", "x"], //.. other tags relevant to defining the community // moderators - ["p", "<32-bytes hex of a pubkey>", "", "moderator"], - ["p", "<32-bytes hex of a pubkey>", "", "moderator"], - ["p", "<32-bytes hex of a pubkey>", "", "moderator"], + ["p", "<32-bytes hex of a pubkey1>", "", "moderator"], + ["p", "<32-bytes hex of a pubkey2>", "", "moderator"], + ["p", "<32-bytes hex of a pubkey3>", "", "moderator"], // relays used by the community ["relay", "", "author"], @@ -49,17 +49,17 @@ Any Nostr event can be a post request. Clients should simply add the community's "created_at": "", "kind": 1, "tags": [ - ["a", "34550::", ""], + ["a", "34550::", ""], ], - "content": "" + "content": "" } ``` -Community management clients can filter all mentions of the kind-34550 event and request moderators to approve each submission. The same moderator can remove his/her approval of the post at any time. +Community management clients can filter all mentions of the `kind:34550` event and request moderators to approve each submission. The same moderator can remove his/her approval of the post at any time. # Post Approval by moderators -The post-approval event includes a stringified `new post request` event inside the `.content` of the approval (NIP-18-style). +The post-approval event includes a stringified `new post request` event inside the `.content` of the approval ([NIP-18-style](18.md)). ```js { @@ -68,12 +68,12 @@ The post-approval event includes a stringified `new post request` event inside t "created_at": "", "kind": "4550", "tags": [ - ["a", "34550::", ""], - ["e", "", ""], - ["p", "", ""], + ["a", "34550::", ""], + ["e", "", ""], + ["p", "", ""], ["k", ""], ], - "content": "{ }" + "content": "" } ``` @@ -87,8 +87,8 @@ The following filter displays the approved posts. ```js { - "authors": ["", "moderator1", "moderator2", "moderator3", ...], + "authors": ["", "", "", "", ...], "kinds": [4550], - "#a": ["34550::"], + "#a": ["34550::"], } ``` \ No newline at end of file From 5e3a7fe33dc4edfc6ad3a70d198f8a7ea1f742d4 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 15 Jun 2023 10:05:35 -0400 Subject: [PATCH 14/19] Addressing how to unapprove a post. --- 172.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/172.md b/172.md index 0c48ea3846..87ae424bb4 100644 --- a/172.md +++ b/172.md @@ -55,7 +55,7 @@ Any Nostr event can be a post request. Clients should simply add the community's } ``` -Community management clients can filter all mentions of the `kind:34550` event and request moderators to approve each submission. The same moderator can remove his/her approval of the post at any time. +Community management clients can filter all mentions to a given `kind:34550` event and request moderators to approve each submission. The same moderator can delete his/her approval of the post at any time using event deletions (See [NIP-09](09.md)). # Post Approval by moderators From f7708e4ec747c829a1457e449f5eca9c5df71476 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 15 Jun 2023 10:13:09 -0400 Subject: [PATCH 15/19] Rewriting to use specification verbs SHOULD, MAY, etc --- 172.md | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/172.md b/172.md index 87ae424bb4..123eaefbff 100644 --- a/172.md +++ b/172.md @@ -8,9 +8,9 @@ Moderated Communities (Reddit Style) The goal of this NIP is to create moderator-approved public communities around a topic. It defines the replaceable event `kind:34550` to define the community and the current list of moderators/administrators. Users that want to post into the community, simply tag any Nostr event with the community's `a` tag (See [NIP-33](33.md)). Moderators issue an approval event `kind:4550` that links the community with the new post. -# Community definition +# Community Definition -`Kind:34550` should include any field that helps define the community and the set of moderators. +`Kind:34550` SHOULD include any field that helps define the community and the set of moderators. ```js { @@ -19,9 +19,9 @@ The goal of this NIP is to create moderator-approved public communities around a "created_at": "", "kind": 34550, "tags": [ - ["d", ""], - ["description", ""], - ["image", "", "x"], + ["d", ""], + ["description", ""], + ["image", "", "x"], //.. other tags relevant to defining the community @@ -40,7 +40,7 @@ The goal of this NIP is to create moderator-approved public communities around a # New Post Request -Any Nostr event can be a post request. Clients should simply add the community's `a` tag to be presented for the moderator's approval. +Any Nostr event can be a post request. Clients MUST add the community's `a` tag to the new post event in order to be presented for the moderator's approval. ```js { @@ -55,11 +55,11 @@ Any Nostr event can be a post request. Clients should simply add the community's } ``` -Community management clients can filter all mentions to a given `kind:34550` event and request moderators to approve each submission. The same moderator can delete his/her approval of the post at any time using event deletions (See [NIP-09](09.md)). +Community management clients MAY filter all mentions to a given `kind:34550` event and request moderators to approve each submission. Moderators MAY delete his/her approval of a post at any time using event deletions (See [NIP-09](09.md)). # Post Approval by moderators -The post-approval event includes a stringified `new post request` event inside the `.content` of the approval ([NIP-18-style](18.md)). +The post-approval event SHOULD include a stringified `new post request` event inside the `.content` of the approval ([NIP-18-style](18.md)). ```js { @@ -81,14 +81,16 @@ It's recommended that multiple moderators approve posts to avoid deleting them f # Displaying -Community clients can display posts that have been approved by at least 1 moderator or by the community owner. +Community clients SHOULD display posts that have been approved by at least 1 moderator or by the community owner. The following filter displays the approved posts. ```js { - "authors": ["", "", "", "", ...], + "authors": ["", "", "", "", ...], "kinds": [4550], "#a": ["34550::"], } -``` \ No newline at end of file +``` + +Clients MAY hide approvals by blocked moderators at the user's request. \ No newline at end of file From e5c0603f923a5b5df355ab792687b30725e802ba Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 15 Jun 2023 10:20:11 -0400 Subject: [PATCH 16/19] Better describes the use of `a`, `e` and `p` tags in the post approval event. --- 172.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/172.md b/172.md index 123eaefbff..84a88c9213 100644 --- a/172.md +++ b/172.md @@ -59,7 +59,7 @@ Community management clients MAY filter all mentions to a given `kind:34550` eve # Post Approval by moderators -The post-approval event SHOULD include a stringified `new post request` event inside the `.content` of the approval ([NIP-18-style](18.md)). +The post-approval event MUST include `a` tags of the communities the moderator is posting into (one or more), the `e` tag of the post and `p` tag of the author of the post (for approval notificaitons). The event SHOULD also include the stringified `post request` event inside the `.content` ([NIP-18-style](18.md)) and a `k` tag with the original post's event kind to allow filtering of approved posts by kind. ```js { From 2eceac9cf9916dd7cf3619b1f7b24a7b489b7610 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 15 Jun 2023 10:24:48 -0400 Subject: [PATCH 17/19] Allows replaceable events to be part of communities as well. --- 172.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/172.md b/172.md index 84a88c9213..d2b7a5339c 100644 --- a/172.md +++ b/172.md @@ -79,6 +79,10 @@ The post-approval event MUST include `a` tags of the communities the moderator i It's recommended that multiple moderators approve posts to avoid deleting them from the community when a moderator is removed from the owner's list. In case the full list of moderators must be rotated, the new moderator set must sign new approvals for posts in the past or the community will restart. The owner can also periodically copy and re-sign of each moderator's approval events to make sure posts don't dissapear with moderators. +Replaceable events can be submitted for approval in two ways: (i) by their `e` tag if moderators want to approve each individual change to the repleceable event or (ii) by the `a` tag if the moderator trusts the original post author to not modify the event beyond community rules. + +Clients SHOULD evaluate any non-`34550:*` `a` tag as posts to be included in all `34550:*` `a` tags. + # Displaying Community clients SHOULD display posts that have been approved by at least 1 moderator or by the community owner. From c83cf00e4f82fde8230d1805d8aad01f5fc6120c Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 19 Jun 2023 15:07:40 -0400 Subject: [PATCH 18/19] Adds relay markers --- 172.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/172.md b/172.md index d2b7a5339c..28c36120cf 100644 --- a/172.md +++ b/172.md @@ -10,7 +10,7 @@ The goal of this NIP is to create moderator-approved public communities around a # Community Definition -`Kind:34550` SHOULD include any field that helps define the community and the set of moderators. +`Kind:34550` SHOULD include any field that helps define the community and the set of moderators. `relay` tags MAY be used to describe the preferred relay to download requests and approvals. ```js { @@ -30,9 +30,10 @@ The goal of this NIP is to create moderator-approved public communities around a ["p", "<32-bytes hex of a pubkey2>", "", "moderator"], ["p", "<32-bytes hex of a pubkey3>", "", "moderator"], - // relays used by the community + // relays used by the community (w/optional marker) ["relay", "", "author"], - ["relay", ""], + ["relay", "", "requests"], + ["relay", "", "approvals"], ["relay", ""] ] } From 3c4963bb3af56c8e6153c62ee1d0f663c50a05bf Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Fri, 7 Jul 2023 14:16:20 -0400 Subject: [PATCH 19/19] added a third option to approve replaceable events. --- 172.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/172.md b/172.md index 28c36120cf..35350398ef 100644 --- a/172.md +++ b/172.md @@ -80,7 +80,7 @@ The post-approval event MUST include `a` tags of the communities the moderator i It's recommended that multiple moderators approve posts to avoid deleting them from the community when a moderator is removed from the owner's list. In case the full list of moderators must be rotated, the new moderator set must sign new approvals for posts in the past or the community will restart. The owner can also periodically copy and re-sign of each moderator's approval events to make sure posts don't dissapear with moderators. -Replaceable events can be submitted for approval in two ways: (i) by their `e` tag if moderators want to approve each individual change to the repleceable event or (ii) by the `a` tag if the moderator trusts the original post author to not modify the event beyond community rules. +Post Approvals of replaceable events can be created in three ways: (i) by tagging the replaceable event as an `e` tag if moderators want to approve each individual change to the repleceable event; (ii) by tagging the replaceable event as an `a` tag if the moderator authorizes the replaceable event author to make changes without additional approvals and (iii) by tagging the replaceable event with both its `e` and `a` tag which empowers clients to display the original and updated versions of the event, with appropriate remarks in the UI. Since relays are instructed to delete old versions of a replaceable event, the `.content` of an `e`-approval MUST have the specific version of the event or Clients might not be able to find that version of the content anywhere. Clients SHOULD evaluate any non-`34550:*` `a` tag as posts to be included in all `34550:*` `a` tags.