3

I can connect with Slack through jabber and chat with individual users, but I can't join channels. There are some instructions here, but I don't know which jabber commands to use. I've tried jabber-muc-join and jabber-groupchat-join, but neither of those seem to work. I use conference.name.xmpp.slack.com for the server name.

Matthew Piziak
  • 5,958
  • 3
  • 29
  • 77

2 Answers2

4

The Slack XMPP server doesn't provide correct information about chat rooms in response to an information discovery query. Could you try the following function and see if M-x jabber-join-slack-room lets you join the room?

(defun jabber-join-slack-room (jc group nickname)
  (interactive
   (let ((account (jabber-read-account))
         (group (jabber-read-jid-completing "group: ")))
     (list account group (jabber-muc-read-my-nickname account group))))
  ;; The Slack server does not return a proper disco result:
  ;;
  ;; 1. The disco response has no 'from' attribute.  It should be
  ;; copied from the 'to' attribute of the request, so that the client
  ;; can correlate the request and the response.
  ;;
  ;; 2. The response doesn't contain an identity of "conference",
  ;; which jabber.el looks for to confirm that this is in fact a
  ;; conference room.  (It would be confusing to try to "join" one of
  ;; your contacts.)
  ;;
  ;; 3. The disco response doesn't contain the feature
  ;; "muc_passwordprotected", so jabber.el doesn't know that it needs
  ;; to provide a password.
  ;;
  ;; Therefore, let's seed the correct information into the disco
  ;; cache before joining the room.
  (jabber-disco-got-info
   jc `(iq ((type . "result")
             (from . ,group)
             (id . "emacs-iq-21272.27175.175195")
             (xmlns . "jabber:client")
             (to . ,(jabber-connection-jid jc)))
            (query ((xmlns . "http://jabber.org/protocol/disco#info"))
                   (identity ((category . "conference") (type . "text")))
                   (feature ((var . "http://jabber.org/protocol/muc")))
                   (feature ((var . "muc_passwordprotected")))))
   (list nil))
  (jabber-muc-join jc group nickname t))

I brought these issues to the attention of the Slack team in March 2014.

legoscia
  • 6,012
  • 29
  • 54
  • When I invoke `jabber-join-slack-room`, it returns a result `member` for every member on the team, as well as `member@name.xmpp.slack.com`. None of the rooms appear in the result list. – Matthew Piziak Jul 11 '15 at 22:42
  • Right, you'll have to type in `roomname@conference.name.xmpp.slack.com`. Not sure if there's a way to get tab completion for existing rooms... – legoscia Jul 12 '15 at 00:08
  • That works great, thanks very much! – Matthew Piziak Jul 12 '15 at 00:29
2

It's a bug.

I've raised a ticket on jabber.el, and notified Slack of the problem. Their first tier support has escalated it; hopefully it'll be fixed soon.

Drew
  • 75,699
  • 9
  • 109
  • 225
Duncan Bayne
  • 121
  • 2