Automating Humour on Slack with “Memebot”

Matt identified a significant improvement to the experience of office humour - and set about writing a bespoke software solution.

Matt March
Matt March Software Developer

Like many other technology companies, we use Slack for informal company-wide instant messaging. From serious discussion about work and events, to sharing light-hearted jokes and funny pictures of coworkers (in designated channels, of course), Slack is one of the most popular methods of communication in the company.

The latter use case was recently boosted by a huge collection of photos which were taken for our brand launch as Ghyston. Fortunately for us, all the photos taken for this have been kept, both the good (which you'll find all around our website) and the bad (which you definitely won't!).

Some of the particularly enterprising amongst us created memes from the images by opening the photos up in their photo editing software of choice, and adding some text, before sharing it on Slack for a humorous and topical interjection into the conversation.

Conor explains what Slack is for

Meme creation without Memebot (defining a need)

Unfortunately creating a meme like this requires a not insignificant amount of time and effort. Not only do we have our actual work to do, but also spending time painstakingly creating memes in a photo editor could ruin that all important comedic timing. This was severely limiting the amount of fun we could have by adding some text to a photograph.

This was the problem I set out to solve one "Pizza and Programming" evening. Every fortnight we have an optional “Type of food and alliterating word about software development” evening after work, where we're encouraged to work on fun projects to improve our skills, learn new languages or technologies, or just to work on fun ideas. It is all - of course - with food provided, which inspires the ingenious naming system. Most importantly though, it's left up to us to decide what we want to learn or build.

So on this particular "Mexican and Making" evening, I started trying to create a Slack bot to automatically create memes when requested. For speed of development and the strong ecosystem surrounding it I chose Python for this, and fortunately there's good documentation available on how to use Python to build a Slack bot which can respond to messages. Great, pretty quickly into the evening my bot could respond to any messages it was tagged in (after fixing a slight bug where it wouldn't stop replying to itself over and over, endlessly spamming the Slack channel in an infinite loop!).

Meme generation

This was a good start, but the next problem was how to programmatically generate a meme. For this I used Python's popular image processing library PILLOW, which made adding text on top of an image trivial. With a little bit of time spent working out the program logic to size the text to fit into a specified rectangle on the image, and then quite a bit of time working out the logic to ensure the text still fits within the area if the text is rotated, the meme generation was complete.

What do you mean it's not pronounced 'Jy-ston'?

Next was the simple task of combining the Slack bot and the meme generator together. I made it so that all you had to do was tag “@memebot” in a message, followed by the name of the photo you wanted to add text to, followed by a message to write on top of the photo. After a couple of seconds memebot would reply with the resulting meme. It worked! By now it was starting to get late into the evening, but all that was left to do was to deploy memebot to a server so it could still run when my laptop was off.

Deployment

Deploying the memebot application was made simple by our internal Docker swarm infrastructure. We have a custom tool which automatically generates the necessary Dockerfile and deploys apps to run in a container on our internal servers with a single command. We use this for all kinds of internal apps, but it is particularly useful to be able to instantly get something running with no hassle on a "Curry and Coding" evening where the priority is getting something done quickly.

After it was deployed, the only thing to do was to wait until the next morning, add it to our main channels, and watch everyone have some fun with it (and inevitably try to break it, which fortunately no one did!). I'd made sure to write it so that all you needed to add to the code base was an image, and rectangle coordinates for the text to be placed in (and some optional parameters like rotation, font colour etc.), and you could add a whole new meme template to memebot. Soon pull requests were coming in as people added their own favourite photos to be automatically memed.

Since then, memebot has had GIF support added, and the ability to respond to certain phrases, and continues to be used throughout the company. If you want to check it out and maybe even try it on your Slack channels we've made it available on Github here.

It only took a couple of months before I found myself added to memebot’s library of photos after a colleague spotted a photo opportunity with a perfectly positioned ray of sunlight.

Matt (author) features in his own memebot (That smile when everyone loves Memebot)

Matt March
Matt March
Software Developer

We think you'll also enjoy

The Ghyston 2023 Impact Report

Here is what we got up to in 2023 - we are delighted to share with you our impact report for last year.
Learn more

AI: Four things every technology leader should do in 2024

Despite dominating the headlines there’s still plenty of uncertainty around exactly what you should be doing with AI. Here are four practical steps, we think you should focus on in 2024.
Learn more

Sniffing Out Trouble: A Deep Dive into Code Smells and How to Address Them

Using real-world examples, we dissect common pitfalls in coding practices, offering insights into why they arise and how they can be mitigated. Whether you're reviewing, maintaining, or building from scratch, arm yourself with the knowledge to foster code that isn't just functional but also maintainable for the long haul.
Learn more

Subscribe to our newsletter

The latest news and industry insights, straight to your inbox