-
Notifications
You must be signed in to change notification settings - Fork 412
MSC4356: Recently used emoji #4356
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
base: main
Are you sure you want to change the base?
Changes from 1 commit
ad61e4f
6e1cf39
1ff30d4
58d45ad
d67a3f8
594df05
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,65 @@ | ||
# MSC4356: Recently used emoji | ||
|
||
Like other chat platforms, Matrix supports emoji as a way to visually express ideas or emotions. In | ||
practice, most people use a limited set of emoji only. Since emoji are commonly used as a quick way | ||
to react to something, it is desirable for clients to offer users shortcuts to their favorite emoji. | ||
Some emoji picker libraries support this feature by locally tracking emoji usage. This doesn't work | ||
well in a multi-device environment, however, because such history cannot easily be shared between | ||
clients. | ||
|
||
This proposal introduces a way for clients to maintain a shared storage of recently used emoji to | ||
enable emoji suggestions across clients. | ||
|
||
## Proposal | ||
|
||
A new global account data event `m.recent_emoji` is introduced. In `content`, it contains a single | ||
property `recent_emoji` that is an array where each element is itself an array. The first element in | ||
this nested array is the emoji, the second element is a counter for how often it was used. The outer | ||
Johennes marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
`recent_emoji` array is ordered descendingly by last usage time. | ||
|
||
``` json5 | ||
{ | ||
"type": "m.recent_emoji", | ||
"content": { | ||
"recent_emoji": [ | ||
[ "😅", 7 ], // Most recently used, 7 times overall | ||
[ "👍", 84 ], // Second most recently used, 84 times overall | ||
... | ||
} | ||
} | ||
``` | ||
|
||
When an emoji is used in a message or an annotation, the sending client moves (or adds) it to the | ||
beginning of the `recent_emoji` array and increments (or initializes) its counter. | ||
Johennes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
As new emoji are being used, clients SHOULD limit the length of the `recent_emoji` array by dropping | ||
elements from the end. A RECOMMENDED maximum length is 100 emoji. | ||
|
||
Clients MAY freely customise the logic for generating recommendations from the stored emoji. As an | ||
example, they could select the 24 first (= most recently used) emoji and stably sort them by their | ||
counters (so that more recently used emoji are ordered first on ties). | ||
|
||
## Potential issues | ||
|
||
Clients could choose wildly different ways to generate recommendations from the shared storage | ||
leading to significantly different UX across clients. | ||
|
||
## Alternatives | ||
|
||
Further metadata such as the concrete access time or the room could be tracked together with emoji. | ||
It is unclear, however, if this would lead to materially better suggestions, however. | ||
|
||
|
||
## Security considerations | ||
|
||
This proposal doesn't mandate encrypting the `m.recent_emoji` account data event. Since emoji are | ||
most commonly used in annotations which are not encrypted, servers could already track and abuse | ||
this information today, however. | ||
|
||
Johennes marked this conversation as resolved.
Show resolved
Hide resolved
|
||
## Unstable prefix | ||
|
||
While this MSC is not considered stable, `m.recent_emoji` should be referred to as | ||
`io.element.recent_emoji`. | ||
|
||
## Dependencies | ||
|
||
None. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I know that the plural form of
emoji
can beemoji
but to avoid confusion, maybe usingm.recent_emojis
help to clarify that we have a list of emojis?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Client developers should be able to determine the type of a field from the spec, rather than relying on the field name.
As a native English speaker,
recent_emoji
sounds best to me.