Plural accessibility in voice and text

(#947) Feature Under consideration accessibility profiles

Thread

Comment by @haileyscommit
RexSystem 1 vote originally by @haileyscommit on GitHub 13 replies
My vision for this was that it would do two things to help with abuse:
  • Show a subprofiles icon and the main profile picture on the message byline somewhere (in Compact mode, probably just the icon before the profile picture or name, similar to the bot tag).
  • Show the main profile when you expand a subprofile in the chat, de-emphasized. That way the main profile can be identified when necessary.
Additionally, subprofiles are only cosmetic and wouldn't affect permissions or blocks (you will stay blocked if you use a subprofile). Behind the scenes it would be "just" additional metadata, so the original message author is always there as well (and would still be used for other things like mentions, replies, blocks, and slowmode). I considered having subprofile use behind a permission, but I think that would end up in communities gatekeeping the feature. So it's better to double up on other abuse prevention methods. I am also considering taking this on myself... I'm just not confident that the effort would be worth it, if it isn't merged. An initial implementation would be for text, and it would really just cosmetically replace the profile picture and name of the sender with the subprofile's details [name color kept], and show the subprofile's details in the profile card, hinting at the main (system) profile somewhere on it. Future iterations could include VC support (depends on what I can do with VCs), cosmetic roles, or user-set custom name colors (which would be a part of regular profiles as well). edit: also I thought I'd call it Personas. Subprofiles might be better but it could be confused with server profiles. Not really sure on the name.
Comment by @bunnikyuube
RexSystem 1 vote originally by @bunnikyuube on GitHub
This is roughly the implementation i think works best. Pretty much echoed completely by my own response, save for my inclusion of being able to send one message under multiple Personas. I don't see a reason that it wouldn't be merged, assuming your implementation was functional and human-friendly. It's an accessibility feature at heart, and your implementation takes a majority of the actual issues into account- as such i think it would be pretty dogwater to not merge it. I'd be willing to provide additional UX feedback, if you do end up working on this, for whatever that's worth.
Comment by @haileyscommit
RexSystem 1 vote originally by @haileyscommit on GitHub
As far as the message metadata for it goes, I think I'd store an ID (referencing the subprofile) and the "short name" of the persona/subprofile along with the message [I do have to look into how webhooks and existing messages handle authorship metadata and reflect that behavior], and use the short name for a fallback message signature for clients that don't support the feature (i.e. older clients). In light of the "multiple contributors" suggestion, the shortname used for a message would account for the "other contributors". Plus, the shortname thing means that even if the subprofile/persona is deleted, the name, at least, can remain. I'll add the profile picture link to the message metadata too if webhooks do it (possibly reuse the field it uses?). It's something to look into when I can actually start working on it (once the codebase stabilizes and PRs are opened; or if hampus greenlights me sooner somehow). The rest of the profile metadata will be offloaded and only requested when the profile itself is looked up (i.e. clicking the profile picture). edit: something I've also considered for the feature is allowing bots to set an endpoint clients can call to get subprofile information. In particular, this could be helpful to support bridges, so that full profile information can be lazy-loaded, and that it won't have to pretend that every user using the bridge is a bot. Bots could therefore have unlimited subprofiles, even on the main instance, because the main instance isn't hosting them. (Otherwise, bots can't have subprofiles at all; yes this is related to limits.) I do want to have a way for users to be able to bypass the limit by using a bot but I haven't figured out how that would work yet.
Comment by @chiaracoetzee
RexSystem 1 vote originally by @chiaracoetzee on GitHub
I think this is the most reasonable short-term way to implement this and it's not a ton of work. It would essentially make personas/subprofiles purely visual/decorative, only affecting how messages are displayed but not really affecting anything else. Main downside is it'd require both server-side and client-side changes. But for people who have home servers that are only accessed from the web, they could patch in the feature pretty easily even if the mainline repo doesn't take the merge (without requiring users to install any special software). Because my own homeserver has urgent need of this feature I'm likely to go ahead and implement it in a fork (architected to facilitate easy rebasing). I'll post here when I have it running and maybe then it can be used as a starting point for iterating on an official feature. As noted in other discussions below the block feature might need extensions to allow particular personas/subprofiles to be blocked without blocking the entire system. Edit: Another thing I think is important for this design is to have two separate fields for the message, the existing message field for clients that don't support the feature and a new one for clients that do support the feature. This would allow the server to embed system member tags for non-supporting clients directly in the message, so that old clients can tell what's going on, without cluttering up messages in the new client.
Comment by @Hate9
RexSystem 1 vote originally by @Hate9 on GitHub
You should definitely consider at least PRing this if you implement it for your own server+client.
Comment by @chiaracoetzee
RexSystem 1 vote edited originally by @chiaracoetzee on GitHub
@Hate9 I definitely will, although preparing for PR submission and responding to PR comments may take some extra time.
Comment by @AspectBox
RexSystem 1 vote edited originally by @AspectBox on GitHub
Hello @haileyscommit @chiaracoetzee, I was wondering if either of you had started on making your own implementations intended for a PR or even just for your own client? I have also been considering the possibility of attempting to implement the persona's idea as well.
Comment by @haileyscommit
RexSystem 1 vote edited originally by @haileyscommit on GitHub
Hello @haileyscommit @chiaracoetzee, I was wondering if either of you had started on making your own implementations intended for a PR or even just for your own client? I have also been considering the possibility of attempting to implement the persona's idea as well.
I've been basically waiting for Hampus's okay on it. Also PRs are locked now so I wouldn't be able to contribute it anyway. edited to clarify: I haven't personally, directly asked Hampus because they've said they don't want unsolicited DMs 🙃
Comment by @AspectBox
RexSystem 1 vote originally by @AspectBox on GitHub
I've been basically waiting for Hampus's okay on it. Also PRs are locked now so I wouldn't be able to contribute it anyway. edited to clarify: I haven't personally, directly asked Hampus because they've said they don't want unsolicited DMs 🙃
I see, assuming I'm not misunderstanding you and by 'waiting' you meant you havent done much on it, would you be open to collaborating on this? I've mainly been waiting for the new refactor since poor hampus has enough on his hands right now, but I was going to begin studying the repo soon.
Comment by @chiaracoetzee
RexSystem 1 vote edited originally by @chiaracoetzee on GitHub
@AspectBox As of today I have a rough prototype of @haileyscommit's design above which I've published in a fork feature branch here: https://github.com/chiaracoetzee/fluxer-subprofiles/tree/features/subprofiles Only did web/desktop clients so far, not mobile. I've spent maybe 1 day on it so far but it seems to work well for our purposes on our home server. It supports both a pop-up subprofile selector and also PluralKit-style text prefixes for power users, as well as an importer that can import profiles from a PluralKit json export dump. Supports name, avatar, prefix, color. Supports three autoproxy modes, off, Manual (you select which subprofile is autoproxied), and Last Used (like PluralKit latched, autoproxy sticks to last used subprofile). Here are some screenshots. Tested reactions, replies, editing messages to change prefix, among other edge cases. Tested it with a large imported system with 60+ members. Let me know if any questions. Right now if you click on a subprofile avatar you just get the profile card for the owner account but I'll fix that up later. I deliberately organized my changes to make it easy to take rebases from upstream since I wasn't necessarily expecting to merge a PR back to fluxer any time soon. Should hopefully make it a bit less messy to construct a PR as well. image image image image
  • 647615036-bab2621a-df3a-4288-a90b-09821a2a56ad.png

    647615036-bab2621a-df3a-4288-a90b-09821a2a56ad.png

    583×497 | 49 kB

  • 647621454-0b6ae11b-2a63-48c6-aebc-2932475231c0.png

    647621454-0b6ae11b-2a63-48c6-aebc-2932475231c0.png

    631×502 | 59 kB

  • 647615635-b57b5ff3-4448-4379-8d16-50b399174443.png

    647615635-b57b5ff3-4448-4379-8d16-50b399174443.png

    586×748 | 80 kB

  • 647615869-c80b3985-4d5e-45dd-89bf-807d89a0253a.png

    647615869-c80b3985-4d5e-45dd-89bf-807d89a0253a.png

    1603×1119 | 181 kB

Comment by @haileyscommit
RexSystem 1 vote edited originally by @haileyscommit on GitHub
Hey @chiaracoetzee, this is awesome! Do you mind if I add you on Fluxer or Discord to collaborate a bit closer on this (in other words, can I send you git-bundles and ask stupid questions)? FWIW, I got this running in a local dev-container, and I might tackle a few of the missing and broken(-ish) things I've noticed, if that's okay with you.
Comment by @chiaracoetzee
RexSystem 1 vote edited originally by @chiaracoetzee on GitHub
@haileyscommit Please feel free! I invited you as collaborator so you can push directly to same repo. Feel free also to add me on Discord at username chiarastellata (I'm not fully set up to use Fluxer routinely yet). I'll check in after work. Thank you for your help. :)
Comment by @AspectBox
RexSystem 1 vote edited originally by @AspectBox on GitHub
This so cool!! I would also love to help test and hopefully make some contributions as well if you are open to it @chiaracoetzee?