Block is a user Policy that defines how two actors on the system are able to interact. The unidirectional action of blocking a user results in the Blockee losing certain privileges in relation to the Blocker.
Frequently Asked Questions:
1. Who can perform a block action?
- Any user can elect to block any other user, and it affects both users' ability to see or message one another (see #4).
2. Who should be explicitly aware of a block?
- Only the blocker, explicitly. Although the blockee may be able to interpret that they are blocked from cues (see #3 -- if messages never get delivered or a group conversation cannot be created with that participant)
3. Can a user unblock?
- Yes, a block is a fundamentally reversible action. We allow a user to manage their own block list, both adding and removing people from this list. When a user unblocks, it is acceptable for the history of messages sent during the block period to be synchronized to a new device or upon cold synchronization.
4. What information or actions are blocked? *
- Message delivery
- Receipts and message state
- Conversation creation
- if a group conversation is created with the blocker in the participant list, they are filtered out upon conversation creation
- Add participant
- if a blocker tries to add blockee to a conversation, she will get an error
Actions still permitted:
- Remove participant
- Sync historical messages
* All of these are blocked bidirectionally. Block is an inherently unidirectional action (A blocks B), yet some actions should be unpermitted in a two-way fashion. Actions like sending a message to a blocked contact should not be permitted by either party after the blocker has elected to block.
5. Do the unpermitted actions fail silently or have an error?
- These actions should fail silently to the blocked user.
6. How does blocking work in group chats or channels?
- In short, the users will be aware that each other is in the participant list, but no messages from that user will be visible. Either user can remove themself from the conversation.
E.g. If a user Carol adds two participants to a group conversation, Alice and Bob, and Alice has blocked Bob (Carol has not blocked anyone, and is not aware of any blocking), both Alice and Bob will be added to Carol's conversation. Alice and Bob will be aware of each other as participants in the conversation (participant list), although neither will be able to see the messages of the other user. If Alice and Carol are conversing, Bob will only see Carol's side of the conversation; likewise if Bob and Carol are conversing, Alice will only see Carol's side of the conversation.