pseudo-joined conferences
Profanity (in contrast to all the other clients I've tried) responds to a MUC presence stanza telling it that it has joined a room, like
<!-- In Mon 08 Feb 2016 10:21:23 PM EST
From Slack XMPP Gateway
-->
<presence xmlns="jabber:client" from="[email protected]/kousu" to="[email protected]/Gajim">
<x xmlns="http://jabber.org/protocol/muc#user">
<status code="100"/>
<status code="110"/>
<status code="200"/>
<item affiliation="member" role="participant" jid="[email protected]" name="kousu" nick="kousu"/>
</x>
<show>chat</show>
<x xmlns="vcard-temp:x:update">
<photo>sha1-hash-of-image_202081</photo>
<FN>kousu</FN>
</x>
</presence>
Gajim and Pidgin and Xabber ignore these unless they were the ones that initiated the join. So does Conversations, but it will pick up a following <message type="groupchat" from="[email protected]/someone" to="[email protected]">, turn it into a window, complain that the conference doesn't exist, and not pick up the roster: https://github.com/siacs/Conversations/issues/1687.
Profanity has similar issues. It does this:
[email protected] [ ...online ]
09-02-16 09:55 ! -> You have joined the room as (null), role: none, affiliation: none
and shows no room roster.
I don't think the spec specifically outlaws what Slack is doing, but it's certainly non-standard. Yet if Slack can cause you to set nulls in your code and then use them you probably have gaps floating around those code branches.
@kousu is this still the case?
How do I get such a stanza to test?
I'm sorry, I'm not sure how to test this now. Slack turned off their XMPP gateways years ago. I assume it is still an issue if no one has looked into it.
Without Slack's gateways handy, the only way I could think to test this now is to write a gateway (in slixmpp or aioxmpp or whatever) that sends these un-requested joins and see how Profanity handles them. I don't have one ready for you.