mirror of
https://github.com/status-im/swarms.git
synced 2025-02-09 08:43:49 +00:00
Merge pull request #57 from status-im/progress/39-init-reqeng
39-chat-moderation: Initialise requirements engineering
This commit is contained in:
commit
480e99faad
@ -29,7 +29,7 @@
|
||||
| @oskarth | [#1](https://github.com/status-im/ideas/issues/1), [#10](https://github.com/status-im/ideas/issues/10), [#55](https://github.com/status-im/ideas/issues/55) |
|
||||
| @pablanopete | [#10](https://github.com/status-im/ideas/issues/10) |
|
||||
| @rasom | |
|
||||
| @themue | |
|
||||
| @themue | [#22](https://github.com/status-im/ideas/issues/22), [#39](https://github.com/status-im/ideas/issues/39) |
|
||||
| @tiabc | [#10](https://github.com/status-im/ideas/issues/10), [#55](https://github.com/status-im/ideas/issues/55) |
|
||||
| @vkjr | [#34](https://github.com/status-im/ideas/issues/34) |
|
||||
| @yenda | [#9](https://github.com/status-im/ideas/issues/9), [#12](https://github.com/status-im/ideas/issues/12) |
|
||||
|
69
active/39-group-chat/README.md
Normal file
69
active/39-group-chat/README.md
Normal file
@ -0,0 +1,69 @@
|
||||
## Preamble
|
||||
|
||||
Idea: <to be assigned>
|
||||
Title: Group Chat
|
||||
Status: Draft
|
||||
Created: 2017-11-23
|
||||
Related: https://github.com/status-im/ideas/issues/15
|
||||
|
||||
## Summary
|
||||
|
||||
Provide a powerful group chat with flexible moderation features
|
||||
|
||||
## Swarm Participants
|
||||
|
||||
- Lead Contributor: @james
|
||||
- Testing & Evaluation: (TBD)
|
||||
- Contributor: @themue
|
||||
- Contributor:
|
||||
- PM: (TBD)
|
||||
- UX (if relevant): (TBD)
|
||||
|
||||
## Product Overview
|
||||
|
||||
Users want to have a convenient and powerful group chat comparable to the market competitors. But beside these standard operations they want to have greater control over the content in their chat feeds ensuring a positive experience. We can give users that control by providing them with a suite of moderation tools. Our moderation tools will enable users to define their own content rules or subscribe to a moderation provider to do it for them. A marketplace will ultimately exist where users can choose from a range of moderation providers.
|
||||
|
||||
### Minimum Viable Product
|
||||
|
||||
- Goal Date: (TBD)
|
||||
- Description: The MVP provides users with basic moderation tools so that they can block users, filter posts with certain phrases, and reduce spam.
|
||||
|
||||
#### User Stories
|
||||
|
||||
- [US 1: Blocking a user](./user-stories/us-1-blocking-a-user.md)
|
||||
- [US 2: Reducing SPAM](./user-stories/us-2-reducing-spam.md)
|
||||
- [US 3: Filter unwanted content](./user-stories/us-3-filter-unwanted-content.md)
|
||||
- [US 4: Advanced filtering with smart contracts](./user-stories/us-4-advanced-filtering-with-smart-contracts.md)
|
||||
- [US 5: Subscribe to moderation providers](./user-stories/us-5-subscribe-to-moderation-providers.md)
|
||||
|
||||
#### Requirements
|
||||
|
||||
- A format / schema for moderation rules must be defined.
|
||||
- A standard rules interface for smart contracts must be defined.
|
||||
- A smart contract that must:
|
||||
- Allow a caller to burn any ERC20 token.
|
||||
- Allow a caller to label burn amounts.
|
||||
- Return burn amounts given a token address, user address, and an optional label.
|
||||
- A moderation settings UI must exist where the user may configure:
|
||||
- Blocked users.
|
||||
- Filtered phrases.
|
||||
- The address of a smart contract to call.
|
||||
- Burn amount required.
|
||||
- UserA must be able to block a UserB from UserB's profile.
|
||||
- Messages are evaluated against the moderation rules before they are rendered, aborting render where necessary.
|
||||
- Moderation rules must persist between sessions.
|
||||
- Chat group settings UI must:
|
||||
- Display the user's burn amount for that channel.
|
||||
- Allow users to burn tokens for that channel.
|
||||
|
||||
## Dates
|
||||
|
||||
- Goal Date: (TBD)
|
||||
- Description: (TBD)
|
||||
- Testing Days required: (TBD)
|
||||
|
||||
## Success Metrics
|
||||
|
||||
## Copyright
|
||||
|
||||
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
|
8
active/39-group-chat/glossary.md
Normal file
8
active/39-group-chat/glossary.md
Normal file
@ -0,0 +1,8 @@
|
||||
# Glossary
|
||||
|
||||
| Term | Meaning |
|
||||
| ---- | ------- |
|
||||
| Chat | Textual communication between two users. |
|
||||
| Chat Room | Grouping of users chatting about a topic or having any other kind of relation. Opposite to bilateral chats. Chat rooms have one owner and possible multiple moderators. |
|
||||
| Public Group Chat | Chat room without restrictions for users to join. Opposite to private chat rooms needing an invitation by the owner or a moderator. |
|
||||
| SNT Burn Rate | ??? |
|
37
active/39-group-chat/requirements/req-1-blocking-menu.md
Normal file
37
active/39-group-chat/requirements/req-1-blocking-menu.md
Normal file
@ -0,0 +1,37 @@
|
||||
# Requirement 1: Blocking Menu
|
||||
|
||||
## User Stories
|
||||
|
||||
- [1: Blocking a User](https://github.com/status-im/ideas/blob/progress/39-init-reqeng/active/39-chat-moderation/user-stories/us-1-blocking-a-user.md)
|
||||
|
||||
## Description
|
||||
|
||||
The context menu for all participants of a chat must contain a blocking menu point.
|
||||
|
||||
## Rationale
|
||||
|
||||
Selecting this menu point by *User A* for a *User B* leads to the blocking of the
|
||||
selected user for all feeds of *User A*.
|
||||
|
||||
## Fit Criteria
|
||||
|
||||
- Selecting this menu point leads to a security question.
|
||||
- Confirming the menu point leads to a blinding out of all messages of
|
||||
*User B* in all common feeds of *User A*.
|
||||
|
||||
## Dependencies
|
||||
|
||||
None.
|
||||
|
||||
## Conflicts
|
||||
|
||||
None.
|
||||
|
||||
## Links
|
||||
|
||||
None.
|
||||
|
||||
## Remarks
|
||||
|
||||
- Question: Does the list of chat members also shows the own profile? Here the
|
||||
context menu must contain no blocking menu point.
|
10
active/39-group-chat/roles.md
Normal file
10
active/39-group-chat/roles.md
Normal file
@ -0,0 +1,10 @@
|
||||
# Roles
|
||||
|
||||
| Role | Description |
|
||||
| ---- | ----------- |
|
||||
| Owner | Creator and owner of a chat. |
|
||||
| Moderator | User with rights to moderate a chat. |
|
||||
| User | Chat user without special rights. |
|
||||
| Power User | Chat user without special rights but ability to develop smart contracts. |
|
||||
| Contract Developer | Developer of contracts especially for chats. |
|
||||
| Contract Provider | Provider of contracts especially for chats. |
|
41
active/39-group-chat/user-stories/us-1-blocking-a-user.md
Normal file
41
active/39-group-chat/user-stories/us-1-blocking-a-user.md
Normal file
@ -0,0 +1,41 @@
|
||||
# User Story 1: Blocking a User
|
||||
|
||||
## Description
|
||||
|
||||
*User A* enters a public group chat. *User B* sends a message that *User A* dislikes. *User A*
|
||||
blocks *User B*. All messages from *User B* no longer show up in any chat feeds of *User A*.
|
||||
|
||||
## Trigger
|
||||
|
||||
Any reason *User A* doesn't want to see posts of *User B* anymore.
|
||||
|
||||
## Actors
|
||||
|
||||
- *User A*
|
||||
- *User B*
|
||||
- *User C*
|
||||
|
||||
## Pre-Condition
|
||||
|
||||
In a chat room with *User A*, *User B*, and possible more more *User A* can read all
|
||||
messages of *User B*.
|
||||
|
||||
## Post-Condition
|
||||
|
||||
The same chat room with the same visitors, but *User A* doesn't see any post of *User B*.
|
||||
Also in other chat rooms with both users *User A* doesn't see any post of *User B*.
|
||||
|
||||
## Flow
|
||||
|
||||
- *User A* selects account of *User B*.
|
||||
- Menu with multiple options is display, one of those is `Block ...`.
|
||||
- After selecting `Block ...` and confirming a security question posts of *User B* aren't
|
||||
visible anymore to *User A*.
|
||||
|
||||
## Remarks
|
||||
|
||||
- Question: How to remove this blocking? Is *User B* still visible in the list of chat
|
||||
participants and can be selected to open a menu like for blocking? Or does the chat
|
||||
room menu an option to list all blocked users and those can be unblocked there?
|
||||
- Question: How is quoting, mentioning, or forwarding of *User B* messages by *User C*
|
||||
handled? Are those visible to *User A*?
|
39
active/39-group-chat/user-stories/us-2-reducing-spam.md
Normal file
39
active/39-group-chat/user-stories/us-2-reducing-spam.md
Normal file
@ -0,0 +1,39 @@
|
||||
# User Story 2: Reducing SPAM
|
||||
|
||||
## Description
|
||||
|
||||
*User A* enters a public group chat. *User A* discovers that messages in the chat
|
||||
feed are low quality (SPAM). *User A* adjusts the required SNT burn value until the
|
||||
quality of the chat feed improves.
|
||||
|
||||
## Trigger
|
||||
|
||||
Wish of *User A* to reduce SPAM in a public group chat.
|
||||
|
||||
## Actors
|
||||
|
||||
- *User A*
|
||||
|
||||
## Pre-Condition
|
||||
|
||||
A public chat room with traffic and *User A* as a user. Quality of the feed
|
||||
is too low for *User A*.
|
||||
|
||||
## Post-Condition
|
||||
|
||||
After adjustment of the required SNT burn value the amount of SPAM reduces.
|
||||
|
||||
## Flow
|
||||
|
||||
- *User A* enters a public chat room and discovers the low feed quality.
|
||||
- *User A* selects his settings for the chat room and changes the SNT burn rate.
|
||||
- After changing the burn rate the amount of SPAM varies.
|
||||
|
||||
## Remarks
|
||||
|
||||
- Question: Do chat rooms have a standard burn rate?
|
||||
- Question: Do chat rooms have upper or lower limits for burn rate?
|
||||
- Question: How does the SNT burn rate of *User A* influences the delivery
|
||||
of low or high quality messages?
|
||||
- Question: Can a sender influence what it's worth to her having a message
|
||||
delivered?
|
@ -0,0 +1,43 @@
|
||||
# User Story 3: Filter unwanted Content
|
||||
|
||||
## Description
|
||||
|
||||
*User A* does not want to view any messages that contain the phrase x. *User A*
|
||||
updates their moderation rules to ignore any messages that contain the phrase x.
|
||||
Messages that contain the phrase x no longer appear in any chat feeds of *User A*.
|
||||
|
||||
## Trigger
|
||||
|
||||
Feeds of *User A* contain a phrase the user doesn't want to see.
|
||||
|
||||
## Actors
|
||||
|
||||
- *User A*
|
||||
- *User B*
|
||||
|
||||
## Pre-Condition
|
||||
|
||||
The disliked phrase is not inside the already added phrases of *User A*.
|
||||
|
||||
## Post-Condition
|
||||
|
||||
After adding a phrase to ignore no more messages containing this phrase are
|
||||
in the feed of *User A*.
|
||||
|
||||
## Flow
|
||||
|
||||
- *User A* discovers unwanted phrase.
|
||||
- *User A* decides to filter this phrase out.
|
||||
- *User A* opens a (global|chat room) menu and selects the menu point
|
||||
for filtering.
|
||||
- *User A* adds a phrase to filter.
|
||||
|
||||
## Remarks
|
||||
|
||||
- Question: Does a phrase ban of a user effects only one chat room or all
|
||||
chats of *User A*?
|
||||
- Question: Does the *User A* get a kind of notification of an unwanted phrase
|
||||
by *User B*, e.g. to allow her to react on it?
|
||||
- Question: Which options for filters? Exact match, full words, wildcards,
|
||||
regular expressions?
|
||||
- Todo: Add user stories for the changing and the removal of filter phrases.
|
@ -0,0 +1,44 @@
|
||||
# User Story 4: Advanced Filtering with Smart Contracts
|
||||
|
||||
## Description
|
||||
|
||||
*User A* is a power user. *User A* configures her moderation rules to include
|
||||
the address of a smart contract that implements a standard rules interface.
|
||||
The smart contract will be called to evaluate new messages as they are received.
|
||||
|
||||
## Trigger
|
||||
|
||||
*User A* want non-standard actions to be performed for each received message.
|
||||
|
||||
## Actors
|
||||
|
||||
- *User A*
|
||||
|
||||
## Pre-Condition
|
||||
|
||||
The actions perfomed on arriving messages do not contain the wanted action.
|
||||
|
||||
## Post-Condition
|
||||
|
||||
After adding the address of a smart contract implementing the standard rule
|
||||
interface this contract will be called for each received message.
|
||||
|
||||
## Flow
|
||||
|
||||
- *User A* opens a (global|chat room) menu and selects the menu point
|
||||
for adding smart contracts.
|
||||
- After entering the address of a smart contract and confirming the
|
||||
adding the smart contract will be checked for implementing the standard
|
||||
rule interface.
|
||||
- In case of a valid implementation the smart contract will be added.
|
||||
|
||||
## Remarks
|
||||
|
||||
- Question: Is the only one global list for all messages or also individual
|
||||
lists per chat room?
|
||||
- Question: Only one contract (global or per chat room) or multiple ones?
|
||||
- Question: In case of multiple contracts, can the order of their execution
|
||||
be defined?
|
||||
- Question: Can contracts filter messages or send new messages? And the latter
|
||||
to *User A* or also to other users?
|
||||
- Todo: Add user stories for the manipulation of the contract set.
|
@ -0,0 +1,45 @@
|
||||
# User Story 5: Subscribe to Moderation Providers
|
||||
|
||||
## Description
|
||||
|
||||
*User A* discovers a bad quality of her feed regarding advertisement and
|
||||
unwanted phrases. She heard about *Moderator A* providing a service for
|
||||
better feed quality. She subscribes to *Muderator A* and her feed improves
|
||||
by the rules of the moderator.
|
||||
|
||||
## Trigger
|
||||
|
||||
*User A* wants an improvement of her feed quality.
|
||||
|
||||
## Actors
|
||||
|
||||
- *User A*
|
||||
- *Moderator A*
|
||||
|
||||
## Pre-Condition
|
||||
|
||||
The feed of *User A* is unfiltered, filtered by own rules or filtered
|
||||
by rules of other moderators.
|
||||
|
||||
## Post-Condition
|
||||
|
||||
The feed of *User A* is filtered like before plus by the rules of
|
||||
*Moderator A*.
|
||||
|
||||
## Flow
|
||||
|
||||
- *User A* opens a global menu and selects the menu point for subbscribing
|
||||
to moderators.
|
||||
- A dialog containing list of all so far subscribed moderators plus a field
|
||||
for entering a new one appears.
|
||||
- *User A* enters the address of *Moderator A*.
|
||||
- The address will be added to the moderator list of *User A*.
|
||||
|
||||
## Remarks
|
||||
|
||||
- Question: Are filters here and in the other user stories only subtractive
|
||||
or can they also be a kind of valuing (+/- value)? So I can say the phrase
|
||||
"Status" is for me +5 opposite to a moderators -2. This way I can create
|
||||
some adjustment.
|
||||
- Discussion: Does the order of subscribed moderators influence the result?
|
||||
- Todo: Add user stories for the manipulation of the moderator list.
|
Loading…
x
Reference in New Issue
Block a user