I am in the early planning stages for a chat plugin that fulfills the goals mentioned here. When the initial version of the plugin is created I will create a new topic, however this topic is a good place to think about how this plugin will work.
At this stage I'm thinking the plugin will have the following features.
Chat lives in it's own route, rather than in a shoutbox (Babble) or messagebox (Quick Messages). One question here is whether the header is present in this view. Compare Stack Exchange Chat, in which the normal site header is not present. Personally I think it should be, as it will allow normal site navigation and search, and also make chat feel like part of the 'app', even though it is in a separate route.
A 'presence' feature, showing online members and activity such as typing.
The compose input is ever-present in the UI, like in Babble or Quick Messages.
In terms of chat 'Channels' one thought I have is that having an entirely separate hierarchy may be a bit confusing. I'm thinking it would be best to tie the chat channels into the existing Discourse hierarchy in some way. Perhaps the following:
A channel that corresponds with / is linked to the 'All categories' topic list discovery (a 'general channel').
- A channel that corresponds with / is linked to each category.
- A channel that corresponds with / is linked to each tag.
- A channel that corresponds with / is linked to each topic? This may be going to far as it may start to deter people from creating posts in a topic. For example having 'I'm having a problem with X...' kind of post is often useful in a topic because if you (the reader) are having the same problem, you know you're on the right track to find the answer. If this kind of question is posted in chat, a reader is less likely to come across it.
A feature to turn a chat message or group of messages into a topic. If the approach in '4' is taken, this could flow quite nicely, e.g. a chat in the 'Feature' category channel gets turned into a topic in the 'Feature' category.
In terms of where the channels would be accessed in the UI this depends on things like '1' and '4'. One potential way to do this would be to put a button in the topic list header. Like the other buttons in the topic list header it would be context dependent, e.g. it would toggle the chat for the discovery context you're currently looking at, e.g. All Categories, 'Feature' category, 'community-management' tag etc.
Clicking that button would turn the topic list for that context into a chat stream with a compose at the bottom.
I'm not quite sure how channels with users or groups of users would work yet. One thing that has to be figured out in this respect is how 'user/group channels would be distinct from the existing 'user/group messages'. One way to do this would be to just have a chat that corresponds to each private message topic, however you run into a similar kind of issue I referred to above in the context of a chat channel for every topic, namely it's not clear how the 'chat' and 'topic' post streams should interrelate. Should all chat messages also appear on the 'topic' version of the private message? I think it would be best to keep 'private messages' and 'private channels' separate.
The other question regarding private channels is where they would appear in the UI. The 'default' would be as a separate view in the user profile, next to messages.
These are all just preliminary ideas. Would be keen to hear others' thoughts on how 'community chat' might be implemented.