DEV Community

Cover image for Building a Twitter bot with Node.js and OpenAI
Sojin Samuel
Sojin Samuel

Posted on • Edited on

Building a Twitter bot with Node.js and OpenAI

Hello fellow developers,

In this tutorial, I will show you how to build a Twitter bot that comments on tweets that mention a certain keyword every 30 minutes. This bot uses the OpenAI API to generate unique and relevant comments for each tweet. Not only is this a fun project to work on, but it can also be a useful tool for anyone looking to increase their presence on social media and engage with their audience in a meaningful way.

You can checkout out the GitHub repo from here.

Prerequisites:

Before we get started, make sure you have the following:

  • A Twitter account and developer account (you will need to create a Twitter developer account to get your API keys)
  • A free OpenAI API key (you will need this to generate comments for the tweets)
  • Node.js and npm installed on your machine
  • A code editor of your choice (I will be using Visual Studio Code)

Step 1: Set up the project

First, create a new directory for your project and navigate to it in your terminal. Then, run the following command to initialize a new npm project:

npm init -y
Enter fullscreen mode Exit fullscreen mode

This will create a package.json file in your project directory.

Next, install the necessary dependencies by running the following commands:

npm install axios twit
Enter fullscreen mode Exit fullscreen mode

Axios is a library that we will use to make API requests, and Twit is a library that allows us to interact with the Twitter API.

Step 2: Set up the Twitter API

Now that we have the necessary libraries installed, it's time to set up the Twitter API. In your project directory, create a new file called index.js.

Then, add the following code to the file, replacing the placeholder text with your own Twitter API keys:

import Twit from "twit";

const twitterConsumerKey = "Consumer Key";
const twitterConsumerSecret = "Consumer Secret Key";
const twitterAccessToken = "Acess Token";
const twitterAccessTokenSecret = "Access Token Secret";

const api = new Twit({
  consumer_key: twitterConsumerKey,
  consumer_secret: twitterConsumerSecret,
  access_token: twitterAccessToken,
  access_token_secret: twitterAccessTokenSecret,
});

Enter fullscreen mode Exit fullscreen mode

Step 3: Set up the OpenAI API

Now that we have the Twitter API set up, let's set up the OpenAI API. Add the following code to your index.js file, replacing the placeholder text with your own OpenAI API key:

import axios from "axios";

const openaiApiKey = "Open AI API key";
Enter fullscreen mode Exit fullscreen mode

Step 4: Search for tweets using the Twitter API

Now that we have authenticated our Twitter API client, we can use it to search for tweets that mention the keyword we specified. In this case, we are searching for tweets that mention the keyword "javascript".

To do this, we use the api.get() method and pass in the endpoint search/tweets and an object with the following properties:

  • q: the query string to search for
  • count: the maximum number of tweets to return

We save the search results to a variable called searchResults and log the number of tweets found to the console.

  const query = 'javascript';
  const maxTweets = 100;

  const { data: searchResults } = await api.get('search/tweets', {
    q: query,
    count: maxTweets
  });
  console.log(`Found ${searchResults.statuses.length} tweets. Generating comments...`);

Enter fullscreen mode Exit fullscreen mode

Step 5: Generate comments using OpenAI API

In this step, we will use the OpenAI API to generate unique and relevant comments for each tweet that we searched for in the previous step.

To do this, we make a POST request to the OpenAI API with the following options:

  • model: The name of the model that we want to use. In this case, we will use the "text-davinci-003" model.
  • prompt: The text that we want the model to generate a response for. In this case, we want the model to generate a comment on the tweet.
  • max_tokens: The maximum number of tokens (words) that we want the model to generate in the response.
  • temperature: The "creativity" of the model. A value of 0.5 means that the model will generate responses that are more balanced between creative and predictable.
  • top_p: The probability of the model choosing the most likely response. A value of 1 means that the model will always choose the most likely response.

We also need to set the Content-Type header to application/json and include our OpenAI API key in the Authorization header.

Here is the code that accomplishes this:

const { data: response } = await axios.post(
  "https://api.openai.com/v1/completions",
  {
    model: "text-davinci-003",
    prompt: `Comment on this tweet: "${tweet.text}", the reply to this tweet must be like i am writing it and also include some emoji that matches the generated text`,
    max_tokens: 70,
    temperature: 0.5,
    top_p: 1,
  },
  {
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${openaiApiKey}`,
    },
  }
);

Enter fullscreen mode Exit fullscreen mode

Step 6: Post the generated comment as a reply to the tweet

We use the api.post() method to post a new tweet in reply to the original tweet that we are commenting on. We pass in the status parameter which contains the text of the tweet that we want to post.

In this case, we want to post a reply to the original tweet, so we include the @ symbol followed by the screen_name of the user who posted the original tweet. We also include the in_reply_to_status_id parameter, which specifies the ID of the original tweet that we are replying to.

Here is the code that does this:

const { data: postResponse } = await api.post("statuses/update", {
  status: `@${tweet.user.screen_name} ${comment}`,
  in_reply_to_status_id: tweet.id_str,
});
console.log(`Comment posted: ${postResponse.text}`);

Enter fullscreen mode Exit fullscreen mode

Step 7: Delay each iteration for 30 minutes

To ensure that we are not posting comments too frequently, we use the setTimeout() function to delay each iteration of the loop by 30 minutes. This is done using the following code:

await new Promise((resolve) => setTimeout(resolve, 30 * 60 * 1000));
Enter fullscreen mode Exit fullscreen mode

Wrapping up:

Finally, we call the searchAndComment function again at the end of the loop to start the process over. This will continue indefinitely until the script is stopped.

And that's it! With just a few lines of code and the power of the OpenAI API, we were able to build a Twitter bot that can search for tweets containing a specific keyword and post unique, relevant comments on them.

You can customize the code to fit your specific needs, such as changing the keyword or the frequency at which the bot posts comments.

I hope this tutorial was helpful and gave you a good understanding of how to build a Twitter bot using the Twitter API and the OpenAI API.

If you're interested in checking out this project, you can find it on my GitHub page. Feel free to leave a star if you like it!

If you have any questions or suggestions, feel free to leave a comment below.

Happy coding! 😄

Feel free to contact me for TypeScript or JavaScript Projects, any challenging projects are welcome.

My Resume: https://drive.google.com/file/d/18HmQniQdwUQ695bktnrN2ntqD4ira-Gy/view

Top comments (0)