How to Create a Twitter Bot with Node.js

By  on  

Twitter bots have been in the news over the past few years due to election meddling, not only in the United States but stretching across the globe.  There are, however, good and logical reasons for creating Twitter bots.  In order to see how easy it was to create a Twitter bot, for good or evil, I decided to create my own Twitter bot.  Five minutes of work and I had a working bot -- let's see how it's done!

The first step in creating a Node.js Twitter bot is creating an app on the Twitter website:

Provide the required information and you'll have the ability to create access token and consumer information.

The next step is downloading the twit Node.js resource:

yarn install twit

With twit available, create an instance of Twit with the access token consumer information you were given by the Twitter app website:

const Twit = require('twit')

const T = new Twit({
  consumer_key:         'YOUR_INFO_HERE',
  consumer_secret:      'YOUR_INFO_HERE',
  access_token:         'YOUR_INFO_HERE',
  access_token_secret:  'YOUR_INFO_HERE',
  timeout_ms:           60 * 1000,
});

Now the action can happen.  Here are a few examples of basic Twitter bot functionality:

// Post a tweet
T.post(
  'statuses/update',
  { status: 'This is an automated test!' },
  (err, data, response) => {
    console.log(err, data, response);
  }
)

// Retweet a given tweet
T.post('statuses/retweet/:id', { id: '697162548957700096' })

Let's think of a more practical example:  using the Stream API to "like" any tweet you are mentioned in:

const stream = T.stream('statuses/filter', { track: ['@davidwalshblog'] });

stream.on('tweet',
  tweet => {
    console.log('tweet received! ', tweet)
    T.post(
      'statuses/retweet/:id',
      { id: tweet.id },
      (err, data, response) => {
        console.log(err, data, response);
      }
    )
  }
);

Getting a Twitter bot up and running takes minimal effort, which is why it's important that services like Twitter protect its users from evil-doers.  Bad guys aside, there are plenty of good reasons to create a Twitter bot, whether it be for internal analytics, promotion, or even creating your own Twitter app.  Thank you to Tolga Tezel for creating an amazing JavaScript resources for interacting with Twitter!

Recent Features

  • By
    Responsive and Infinitely Scalable JS Animations

    Back in late 2012 it was not easy to find open source projects using requestAnimationFrame() - this is the hook that allows Javascript code to synchronize with a web browser's native paint loop. Animations using this method can run at 60 fps and deliver fantastic...

  • By
    Regular Expressions for the Rest of Us

    Sooner or later you'll run across a regular expression. With their cryptic syntax, confusing documentation and massive learning curve, most developers settle for copying and pasting them from StackOverflow and hoping they work. But what if you could decode regular expressions and harness their power? In...

Incredible Demos

  • By
    Add Controls to the PHP Calendar

    I showed you how to create a PHP calendar last week. The post was very popular so I wanted to follow it up with another post about how you can add controls to the calendar. After all, you don't want your...

  • By
    Camera and Video Control with HTML5

    Client-side APIs on mobile and desktop devices are quickly providing the same APIs.  Of course our mobile devices got access to some of these APIs first, but those APIs are slowly making their way to the desktop.  One of those APIs is the getUserMedia API...

Discussion

  1. Hi David,

    This is a great introduction, however I must say that coming up with useful ways to utilize the Twitter API with these bots is the harder part. I suppose if one truly has a use for making a bot like this then that part will be self-evident.

    Thanks again for the write up.

  2. Doug

    damn if you’re a beginner. NONE of this will just WORKS like that.

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!