mirror of
https://github.com/nostr-protocol/nips.git
synced 2024-11-09 22:09:06 -05:00
85 lines
3.3 KiB
Markdown
85 lines
3.3 KiB
Markdown
NIP-172
|
|
=======
|
|
|
|
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.
|
|
|
|
# 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 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).
|
|
|
|
```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 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.
|
|
|
|
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>"],
|
|
}
|
|
``` |