Slack IRC Gateway

The company that I currently work for is trying to migrate from HipChat to Slack. Nothing is certain yet, but a move seems likely, and at the minimum I can say that we’re evaluating Slack and I’ve gotten to check it out and play with it a bit.

The thing that is awesome about Slack is that it has a native IRC gateway. If you use the IRC gateway you don’t get all of the whiz-bang features that the native client has, but at least the IRC gateway basically works and is supported by the company. This is a huge contrast to HipChat where the only way to get it working with IRC is using BitlBee which uses the XMPP gateway that HipChat supports and BitlBee itself acts as a bizarre XMPP/IRC bridge that maps the weird HipChat XMPP extensions into things that are sort of like IRC. The BitlBee HipChat stuff mostly works and has been pretty solid for me for about a year now, but it definitely has some quirks and is really strange to use in a lot of ways.

I live and die by IRC, so for me the native gateway is a huge, huge win. There are already a few quirks I’ve found (e.g. no scrollback when joining a new room), but all in all the experience is miles ahead of using BitlBee with HipChat.

Here’s why the IRC gateway is a huge win for me. Most of the same is true with HipChat + BitlBee; this is more a commentary on using an IRC client to connect to these newfangled chat systems than anything else.

First of all, like most serious IRC users I have an IRC session connected using WeeChat running in an always-running tmux session that’s on a remote server that I very rarely power cycle (every few months to make sure I stay on top of kernel updates). This isn’t the only way to do it, Irssi is another great terminal-based IRC client, and GNU Screen is getting a bit long in the tooth but there’s nothing wrong with it at all. There are numerous other IRC clients worthy of praise, WeeChat is just the one I prefer.

The reason this is cool is that I’m always connected to the chat system, so I get chats from people all the time and can respond to them at my leisure. It can be a bit annoying to other people who can’t tell if I’m actually on or am just idling, but if anything I’ll chalk that up as a plus. If anyone really needs to contact me, I have my phone number in a million places including in PagerDuty so I’m not too concerned about that.

Second of all, WeeChat (and most other IRC clients) is incredibly customizable, and it’s easy to filter our messages I don’t care about, get highlights on arbitrary words, and a number of other features that are must-have for me. Buffer management in WeeChat is really amazing and incredibly fast once you take the time to learn how it works. I can easily handle really busy times on chat better than my coworkers using the native clients. There are a million plugins (and actually I’m not using any of them), but if you really want to get down that rabbithole it’s an option. WeeChat is also scriptable in a bunch of different languages including Python (my main day job programming language). I have dabbled in WeeChat scripting a bit and while I’m by no means a pro, it’s pretty easy to get started and do cool things. I might write a blog post about this once I’ve written a more substantial WeeChat plugin.

Being able to keep client-side logs is also a godsend. There are a million times where I’ve wanted to find something from my chat history—potentially months (or even years) old, and being able to simply grep the chat logs is awesome. In the same way that it’s common to quote from emails when replying, from time to time I’ve found it incredibly useful to be able to quote from chat conversations e.g. to substantiate timelines that were discussed or the division of responsibility for projects. I’ve also had a lot of fun doing statistical analyses of my conversations (e.g. what proportion of the messages come from me v.s. from person X) and training Markov chain bots on chat logs.

There is one serious downside which is that given someone’s real name I don’t know how to look up their nick/alias. For instance, suppose someone tells me I need to talk to Aubrey Graham about a project, but he cleverly set his nick to be drizzy. I can use /whois drizzy to figure out that drizzy is Aubrey Graham, but just given the name Aubrey Graham I’m not sure how to figure out that his nick is drizzy.

One more thing. If you want to use the Slack IRC gateway, I highly recommend Calle Erlandsson’s excellent article on the topic where he goes into a lot more details about various configuration things and the plugins available.