Need a hug? There's a bot for that!
Tags: python, showdev, bots, twitter
Published: 2020-02-26 19:22:27

Hey all!

I know I haven't posted in a while, but after a long break I finally had a free weekend and was able to work on a side project (my first one in over a year! Don't believe the gatekeepers, you can have a successful career without side projects!)

It all started a few weeks ago when I was feeling down and felt like I could really use a hug.

Not being close to anyone with whom I'm friends on a hugging basis, I did the next best thing and turned to Twitter:

{% tweet 1227616299548889090 %}

Sometime later, I was tweeting with a friend who was feeling down, and they mentioned that they could use a hug as well. I immediately sent them a (virtual) hug as well. And the idea came up for a bot that would help people feeling down by sending hugs at them!

![a cat hugging her teddy bear](https://media1.giphy.com/media/DmkfCWnUgT1cc/giphy.gif)

I'm no stranger to Twitter bots, having written one some time ago:

{% link https://dev.to/yechielk/creating-my-first-twitter-bot-1kj4 %}

This time I decided to write one in Python.

Python has a great library for interacting with Twitter called [tweepy](http://www.tweepy.org/), and even a library around [Giphy](https://github.com/Giphy/giphy-python-client) that makes things like getting a random gif of a hug pretty straightforward!

Between those two libraries, I didn't have to write much code on my own. The whole bot is about 35 lines of code!

I followed this dev.to post by [@emcain](https://dev.to/emcain) for instructions on how to get my bot set up on Heroku: 
{% link https://dev.to/emcain/how-to-set-up-a-twitter-bot-with-python-and-heroku-1n39 %}

And by the end of the weekend, [@ICanHazHugzPlz](https://twitter.com/ICanHazHugzPlz) was born!

![a rabbit saying "do you need a hug? Have one! Maybe you do even if you don't think so"](https://media1.giphy.com/media/2GnS81AihShS8/giphy.gif)

## Scope Reduction

Of course, no project comes out the way you expect it.

I had initially envisioned that the bot would reply to people asking it for hugs with a gif of a hug.

It turns out that to implement that, I would have to work out a queue that could keep track of which tweets the bot already replied to. That queue would need to maintain state between restarts; otherwise, the bot would keep spamming anyone who tweeted at it every time the script restarts (multiple times a day on Heroku's free dyno), as my bots earliest followers found out the hard way (sorry!!!)

I wasn't planning on spending more than a weekend on the project, so in the end, I settled on a bot that tweets a hug at the world every few hours.

## Show Me The Code!

If you would like to take a look at the code for the bot, you'll find it here (including the failed implementation of the replying version of the bot on a separate branch):

{% github https://github.com/achasveachas/hug-bot %}

And of course, if you'd like to bless your Twitter timeline with wholesome hugs, please give my bot a follow at [@ICanHazHugzPlz](https://twitter.com/ICanHazHugzPlz)!

Until next time!

![Rory Gilmore from Gilmore Girls giving a hug](https://media1.giphy.com/media/l2YWgw9u8tZw6iHw4/giphy.gif)