mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2025-06-28 20:29:53 +00:00
62 lines
2 KiB
Markdown
62 lines
2 KiB
Markdown
|
# Message replies and chat item sequential numbers
|
||
|
|
||
|
## Problem
|
||
|
|
||
|
Many chat features require referring to the previous chat items in the same conversation:
|
||
|
|
||
|
- item editing
|
||
|
- item deletion
|
||
|
- item reply (with quoting)
|
||
|
- delivery/read receipts
|
||
|
- any interactive features mutating chat item state
|
||
|
- group message integrity via DAG
|
||
|
|
||
|
The most in-demand feature is replies.
|
||
|
|
||
|
## Proposed solution
|
||
|
|
||
|
As group message integrity is needed not for chat items, but for messages, the updated proposal is to introduce a random, non-sequential message id, unique per conversation and per sender.
|
||
|
|
||
|
All above features would rely on this ID, e.g. reply would use the ID of the message that created the item.
|
||
|
|
||
|
We will add an optional property `msgId` into all chat messages (not only visible to the users) and `msgRef` into messages that need to reference other messages.
|
||
|
|
||
|
`msgId` property is a base64 encoded 12 byte binary
|
||
|
|
||
|
JTD for quoting messages:
|
||
|
|
||
|
```yaml
|
||
|
definitions:
|
||
|
msgRef:
|
||
|
discriminator: type
|
||
|
mapping:
|
||
|
direct:
|
||
|
properties:
|
||
|
msgId: type: string
|
||
|
sentAt: type: datetime
|
||
|
sent: type: boolean # true if it is in reference to the item that the sender of the message originally sent, false for references to received items
|
||
|
group:
|
||
|
properties:
|
||
|
msgId: type: string
|
||
|
sentAt: type: datetime
|
||
|
memberId: type: string # base64 member ID of the sender known to all group members for group chats
|
||
|
content:
|
||
|
properties:
|
||
|
type: type: string
|
||
|
text: type: string
|
||
|
properties:
|
||
|
msgId: string
|
||
|
event: enum: ["x.msg.new"]
|
||
|
params:
|
||
|
properties:
|
||
|
content: ref: content
|
||
|
quote:
|
||
|
properties:
|
||
|
content: ref: content
|
||
|
msgRef: ref: msgRef
|
||
|
```
|
||
|
|
||
|
This format ensures that replies with quoting show as normal messages on the clients that do not support showing quotes (`quote` property will be ignored).
|
||
|
|
||
|
The only feature that would not work in case chatItem/chatItemRef is missing is navigating to the message to which the message is in reply to.
|