element-hq / element-android

A Matrix collaboration client for Android.
https://element.io/
Apache License 2.0
3.28k stars 678 forks source link

Stories/Status like WhatsApp Status/Instagram Story #2631

Open subins2000 opened 3 years ago

subins2000 commented 3 years ago

Is your feature request related to a problem? Please describe. With the recent WhatsApp privacy policy update, many in my circle is looking for alternatives. Some saying Signal, but Matrix seems to be the best long-term solution mainly because of federation. One thing lacking from WhatsApp in Matrix clients is the status/stories feature. My feature request is a WhatsApp like status or Instagram like story, it'd be great if there's something like that on Element. Disappearing stories after 24 hours.

I like to share content within my circle-of-contacts and to start or engage in conversation with that topic.

Describe the solution you'd like Exactly like how many social platforms have implemented it. But would this need change in Matrix synapse server ? I don't know. Is there any Matrix clients that support this though ? I searched and from this page, there's Fluffychat 0.21.1 is released! Stories feature removed. But I couldn't find any more info on what FluffyChat's stories were like.

Describe alternatives you've considered A broadcast message to everyone, but that screams right into everyone's inbox. A status/story gives contacts option to whether open, see it, respond or ignore.

Additional context I guess most people are familiar with how stories work. Sorry if this has been asked here before, but I didn't find anything on my search.

notramo commented 3 years ago

This can be done with the retention event, which is a WIP MSC (but Synapse implements it). This is basically setting an expiration time for events. I recall correctly, Synapse implements it, but clients not yet, but it can be manually sent to any room using the Send custom event feature of Element (or other clients). This means, if they have it in cache (mobile clients probably will), they won't delete even if expire_on_clients is set to true. (After clearing cache, it won't show up, because the server supports the spec, and deletes the events.) So clients have to implement that spec too.

When client support is added, it would be simple:

  1. Create a group room (this can be public, or invite-only)
    • one user can have multiple "stories", e.g.:
    • one for friends (invite-only), and one public (everyone can join)
    • multiple topics
    • different expiration time for each "story"
  2. Send an m.room.retention state event with an empty state key, and content:
    
    {
    "min_lifetime": 86400000,
    "max_lifetime": 86400000,
    "expire_on_clients": true
    }

(A day is 86400000 milliseconds, but it can be changed to any time span, expressed in milliseconds.)