The Slack IRC gateway drops your messages.

So, imagine the following exchange in private message with one of your team members:

<alice> So, how have I been doing?
<bob> Frankly, I don't think it's working out.
* bob is joking!  You're doing great.

Maybe Bob shouldn’t be such a joker here, but sometimes Bob can’t help himself. Unfortunately, Bob has just caused Alice an incredible amount of stress. Or, more to the point, Slack has gotten in the way of team communication, leading to a terrible misunderstanding.

The problem is that when you use /me on the IRC gateway while in private chat with someone, Slack just drops the message on the floor and doesn’t deliver it! Alice never got that final message.

Read that again, then ask yourself how often you may have miscommunicated with your team because of this. Remember that it goes both ways: maybe you never used /me in privmsg, but did your coworkers? Who knows! I reported this bug to Slack feedback in August 2016 and again in September. When I reported it the second time, I went back in my IRC logs to compare them to Slack logs. If I found a time when an emote showed up in both, I’d know when the problem started.

The answer is that it started around January or February 2016. In other words, this silent data loss bug has been in place for a year and known about for, at the very least, five months. It hasn’t been fixed. More than a few times in this period, I’ve realized that I missed an invitation to a meeting or other important communication because it was /me-ed at me in privmsg. This is garbage.

I can’t fix Slack from my desk, but I can fix my IRC client to prevent me from making this error. I wrote this irssi plugin:

use warnings;
use strict;

use Irssi ();

our $VERSION = '0.001';
our %IRSSI = (
  authors => 'rjbs',
  name    => 'slack-privmsg-me',
);

Irssi::signal_add('message irc own_action'  => sub {
  my ($server, $message, $target) = @_;

  # only stop /me on Slack
  return unless $server->{address} =~ /\.slack\.com\z/i;

  return if $target =~ /^#/; # allow /me in channels

  Irssi::print("Sorry, Slack drops /me silently in private chat.");
  Irssi::signal_stop();
});

This intercepts every “about to send an action” event and, if it’s to a Slack chatnet and in a private message, reports an error to the user and aborts. I could’ve made it turn the message into a normal text message, but I thought I’d keep it inconvenient to keep me angry.

Please use this plugin. If you port it to WeeChat, I’ll add a link here.

When people tell you, “Of course your free software project should use Slack. There’s even an IRC gateway!” remember that Slack doesn’t seem to give a darn about the IRC gateway losing messages. It’s saying that gateway users are second-class users.

Garbage.

Update:

Written on January 24, 2017
🐫 perl
🧑🏽‍💻 programming
🏷 slack