-
Notifications
You must be signed in to change notification settings - Fork 721
NIP-72: Moderated communities #602
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 4 commits
81359b1
a933e03
22c1af8
409fc87
99b2796
1982df7
9b22109
7e0f2fd
0392e21
e4273cc
f97be25
3ef96de
b3b9d85
5e3a7fe
f7708e4
e5c0603
2eceac9
c83cf00
3c4963b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,93 @@ | ||||||||
| 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>"], | ||||||||
| ["image", "<communityimagen>", "WidthxHeight"] | ||||||||
|
|
||||||||
| //.. other tags relevant to defining the community | ||||||||
vitorpamplona marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||||
|
|
||||||||
| // 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"], | ||||||||
|
|
||||||||
| // relays used by the community | ||||||||
vitorpamplona marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||||
| ["relay", "<relay hosting author kind 0>", "author"], | ||||||||
| ["relay", "<relay where to post requests to and fetch approvals from>"], | ||||||||
| ["relay", "<relay where to post requests to and fetch approvals from>"] | ||||||||
vitorpamplona marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here, Can we add an 'optional' tag suggestion like this 👇 //optional information while forking a community from an existing one
["forksource", "34550:<source community event author pubkey>:<d-identifier of the source community>", "<Optional relay url of source community>"]This would provide a clean mechanism for
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. how do you know the time stamp of the forking since the created at event will change every time the community has a new moderator?
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ahhh my bad! Good point. How about adding this suggestion instead: This can be considered similar to creating a new git branch from a specific commit |
||||||||
| ] | ||||||||
| } | ||||||||
| ``` | ||||||||
|
|
||||||||
| # 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", | ||||||||
vitorpamplona marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||||
| "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>"], | ||||||||
| ], | ||||||||
vitorpamplona marked this conversation as resolved.
Show resolved
Hide resolved
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
This would use #539 to make the community owner able to delete post approvals created by others (moderators). Currently the owner can only delete its own approvals or remove moderators (which deletes all approvals from said moderator). |
||||||||
| "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, | ||||||||
vitorpamplona marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||||
| "#a": ["34550:<community event author pubkey>:<d-identifier of the community>"], | ||||||||
| } | ||||||||
| ``` | ||||||||
Uh oh!
There was an error while loading. Please reload this page.