xkcdbot

First version 2022-11-29

Updated 2023-12-15

A Mastodon post with comic number, title, title text, xkcd.com URL and
explainxkcd URL; a reply below reads "Heads-up for my subscribers:" then
a bunch of users

Birth

Back in 2019, I signed up for a Mastodon account on mastodon.technology. Soon I began looking around for xkcd bots. There were several, but most of them were defunct. I would soon make up my mind to create my own.

I have little memory, but per the git log I finished it in 9 days. It ran on Node.js, which unfortunately was my favorite tech stack back then.

I registered @xkcdbot@botsin.space, then daemonized the bot on the same server I hosted my comics (which, for which I apologize, was also on a Node.js server). I wrote this bio:

I'm an xkcd bot who shows up at Randall's house at 3.3 millihertz and asks "Hello, did you publish a new comic?" I occasionally dress like a velociraptor just to freak him out.

If he admits he has drawn a new comic, I seize it and post it right here before Randall shoots me down with a drone.

Rise

The bot account was created on 2019-08-19.

On 2022-10-28, xkcdbot gained 1k followers. It took 1166 days.

On 2022-11-23, the number grew to 2k. It only took 26 more days.

Of course, the surge owes to Elon Musk for pissing off so many people off Twitter, but I'm sure there are two more reasons as well:

Killer features

  • 5 minute polling interval
  • explainxkcd link
  • DM for "subscribers"
  • Comic thumbnail is focused on top left, so no spoilers

Only the left-hand side of the comic is shown in the preview

Administration

The bot lives by a few simple rules. It:

  • does its damn job
  • has near-perfect uptime
  • never solicits followers
  • never interacts with people unless asked to
  • has no new features for three years

Accidents

My code broke in production exactly once. There were other accidents, but they were all due to botsin.space downtime or Randall uploading the wrong comic.

Conclusion

I believe this resolves all remaining questions on this topic. No further research is needed.

Update (2023-10-22)

It turns out this does not resolve all remaining questions on this topic, and further research is needed.

The problem is accessibility. On xkcd.com, if you hover your mouse on the comic, a tooltip shows up. This is known as "hover text" or "title text", which uses the "title" HTML attribute. In 2019 I wanted to create a similar experience, so I put it in the alt text.

However it wasn't the intended purpose. The alt text is meant for:

  • A replacement when the image cannot be displayed
  • Assistive technology such as screen readers

On the fediverse it's mostly the latter. Right now, the awesome Sam Levine is doing the noble work of replying to every post with a captioned version of the same comic.

But it is a workaround. Around my reluctance to touch my rotten codebase, my incompetence as a developer, and my lack of interest to caption the comics myself. Whenever I post on my main handle, I make sure to caption my images and audio. But sadly xkcdbot cannot do that right now.

Why not?

Because Randall doesn't caption comics when they are posted.

Can't you fetch the caption from explainxkcd?

That might take hours before it's ready. Plus, caption might be incomplete and susceptible to vandals.

Just delay the post until the caption is ready!

We don't know how long it will take. Also, I created the bot in order to read xkcd as soon as possible. I cannot accept the delay.

Just edit the post!

I made the bot in 2019, when "edit" wasn't a thing. I could make this feature right now, but I haven't touched my codebase for 4 years, and I don't use Node.js anymore.

Conclusion

Accessibility for a bot is not an easy task. It's not a tech problem; it's a matter of community. I admit I cannot solve it by myself. Therefore, I am going to ask for the community for help.

To be continued.

Update (2023-10-25)

This is fire! I reached out to Sam Levine, who agreed to co-maintain xkcdbot and provide alt text with Mastodon's edit feature.

I had intended to send a PGP-encrypted email, but Sam does not have that or any E2EE. So after consideration, I committed the cardinal sin of cybersecurity: I sent him* the password in plaintext via email.

i realized later that he/him might not be the best pronoun but they said they're okay with any. i really oughtta be careful next time

Say what you will but a bot that posts comics is just too trivial for a lecture on asymmetric key cryptography. Like sure a hacker could get access to the bot. Now what? They lock me and Sam out of it?

  • If they violate the TOS, we can certainly report it
  • If they make it obvious that the account's been hacked, people would know
  • If they don't, they are impersonating us, which is pretty impressive given they are doing two people's jobs in one

I will now contact botsin.space's admin to know if we can recover the bot in case that happens, but I doubt it ever will.

Update same day: Colin (botsin.space admin) said yes 🔥