mirror of
https://github.com/nostr-protocol/nips.git
synced 2024-12-22 08:25:53 -05:00
Simple moderated communities flow.
This commit is contained in:
parent
33fcb7c9bc
commit
1912dacd33
85
172.md
Normal file
85
172.md
Normal file
|
@ -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": "<Unix timestamp in seconds>",
|
||||
"kind": "34550",
|
||||
"tags": [
|
||||
["d", "<community_name>"],
|
||||
["description", "<community_description>"],
|
||||
|
||||
// moderators
|
||||
["p", "<32-bytes hex of a pubkey>", "<optional recommended relay URL>", "moderator"]
|
||||
["p", "<32-bytes hex of a pubkey>", "<optional recommended relay URL>", "moderator"]
|
||||
["p", "<32-bytes hex of a pubkey>", "<optional recommended relay URL>", "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": "<Unix timestamp in seconds>",
|
||||
"kind": "1",
|
||||
"tags": [
|
||||
["a", "34550:<community event author pubkey>:<d-identifier of the community>", "<optional relay url>"],
|
||||
],
|
||||
"content": "<my 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": "<Unix timestamp in seconds>",
|
||||
"kind": "34551",
|
||||
"tags": [
|
||||
["a", "34550:<community event author pubkey>:<d-identifier of the community>", "<optional relay url>"],
|
||||
["e", "<Post Request ID>", "<optional relay url>"],
|
||||
["p", "<Post Request Author ID>", "<optional relay url>"],
|
||||
],
|
||||
"content": "{ <New Post Request JSON> }"
|
||||
}
|
||||
```
|
||||
|
||||
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": ["<author>", "moderator1", "moderator2", "moderator3", ...],
|
||||
"kinds": 34551,
|
||||
"#a": ["34550:<community event author pubkey>:<d-identifier of the community>"],
|
||||
}
|
||||
```
|
Loading…
Reference in New Issue
Block a user