Most of us are familiar with Twitter. But we are not much familiar that we can automate the activities like status posting, retweeting, liking, commenting and so on. So,here I'll show you how we can automate some of the activities like getting the twitter data,posting the status and retweeting with Node.js and a npm package called Twit.
And we ll deploy the project to github and heroku and keep it running...
Let's start by signing in to a twitter developer section, You'll get insight of creating a developer account and will be able to Create an app where you will get the following keys:
consumer_key : 'key',
consumer_secret : 'key',
access_token : 'key',
access_token_secret : 'key'
Project structure:
project---| 
          |--config--config.env--config.js
          |--botget.js //not needed for deployment
          |--botpost.js //not needed for deployment
          |--botretweet.js
          |--Procfile           
Installation:
Node.js must be installed on your system.
In the project folder,In terminal enter the following commands:
$ git init -y
$ npm i twit
Setting up the environment variables:
Let's install dotenv to hide the keys when uploading to github and heroku
$ npm i dotenv
Create a folder config in the project directory.And inside that create a file called config.env:
API_KEY=key
API_SECRET_KEY=key
ACCESS_TOKEN=key
ACCESS_TOKEN_SECRET=key
Create another file inside project directory as config.js:
const path = require('path')
const dotenv = require('dotenv')
require('dotenv').config();
// Load config
dotenv.config({ path: './config/config.env' })

//exports the keys
module.exports = {
    consumer_key : process.env.API_KEY,
    consumer_secret : process.env.API_SECRET_KEY,
    access_token : process.env.ACCESS_TOKEN,
    access_token_secret : process.env.ACCESS_TOKEN_SECRET
}
Now we are ready to work on the bot scripts.
You might want to look Sample JSON data from twitter and twit before going on further.
Create a file as botget.js in the root of the project:
console.log("Bot is starting")
var config = require('./config/config')//imports keys 
var Twit = require('twit');


var T = new Twit(config);


var parameters = {
    q : 'node',//query to search the twitter,can be any thing count : 2 //no. of data to fetch
}


//  search twitter for all tweets containing the word 'suJJJan' 
T.get('search/tweets',parameters,fetchData); 


function fetchData (err, data, response) {
    var tweets = data.statuses; 
    for(var i=0;i< tweets.length;i++){ // checks the statuses twiceconsole.log(tweets[i].text);//prints the text
    }
    console.log(data)
} 
To run the script.Use:
$ node  botget.js
Sample Output:
Bot is startingRT @Hello2: @random twitter is best
@random twitter is best
{
  statuses: [
    {
      created_at: 'Thu Aug 06 10:38:09 +0000 2020',
      id: 1291311562636183600,
      id_str: '129110210662636183559',
      text: "RT @Hello2: @random twitter is best",
      truncated: false,
      entities: [Object],
      metadata: [Object],
      source: '',
      in_reply_to_status_id: null,
      in_reply_to_status_id_str: null,
      in_reply_to_user_id: null,
      in_reply_to_user_id_str: null,
      in_reply_to_screen_name: null,
      user: [Object],
      geo: null,
      coordinates: null,
      place: null,
      contributors: null,
      retweeted_status: [Object],
      is_quote_status: false,
      retweet_count: 1,
      favorite_count: 0,
      favorited: false,
      retweeted: false,
      lang: 'en'
    },
    {
      created_at: 'Sat Aug 01 02:24:27 +0000 2020',
      id: 1289386479903371300,
      id_str: '1289386479903371265',
      text: "@ randomtwitter is best",
      truncated: false,
      entities: [Object],
      metadata: [Object],
      source: '<a href="http://twitter.com/download/android" rel="nofollow">Twitter for Android</a>',
      in_reply_to_status_id: 128921230498288600,
      in_reply_to_status_id_str: '1289469260498288640',
      in_reply_to_user_id: 832773717648143900,
      in_reply_to_user_id_str: '832773417688143873',
      in_reply_to_screen_name: 'random',
      user: [Object],
      geo: null,
      coordinates: null,
      place: null,
      contributors: null,
      is_quote_status: false,
      retweet_count: 1,
      favorite_count: 0,
      favorited: false,
      retweeted: false,
      lang: 'en'
    }
  ],
  search_metadata: {
    completed_in: 0.027,
    max_id: 1291322662436183600,
    max_id_str: '1291322662636183559',
    next_results: '?max_id=1289386479904371264&q=random&count=2&include_entities=1',
    query: 'node',
    refresh_url: '?since_id=1291322662646183559&q=random&include_entities=1',
    count: 2,
    since_id: 0,
    since_id_str: '0'
  }
}
Create a file as botpost.js in the root of the project:

console.log("Bot is starting")
var config = require('./config/config')
var Twit = require('twit');


var T = new Twit(config);


tweetThis();

//uncomment this if u want to run the event in certain interval
//setInterval(tweetThis,3600000)//every 1 hour(time is in ms)



function tweetThis() {
    var statsArray = ["hello","How ya doin","I love node"];
    //selects random tweets from the arrayvar stat = statsArray[Math.floor(Math.random()*statsArray.length)]


    var tweet = {
    status: stat
    }


T.post('statuses/update',tweet,tweeted); //posts tweets


function tweeted (err, data, response) {
    if(err){
        console.log("Something is wrong")
    }else{
        console.log("Works fine")
    }
} 
}
Now we will create a bot which retweets and deploy it to heroku.
Create a file as botretweet.js in the root of the project:
console.log("Bot is started");


var twit = require('twit');
var config = require('./config/config');


var T = new twit(config);


reTweet();


// find latest tweet according the query 'q' in parameters
//set q as # or @ for hashtags and username.Can keep both as '@tag,#hash'
function reTweet() {
    var parameters = {
        q: '@suJJJan', 
        result_type: 'recent',
        lang: 'en'
    }


    T.get('search/tweets', parameters, function(err, data) {
        if (!err) {
//gets the tweetidvar retweetId = data.statuses[0].id_str;
//retweets the status in which the 'q' is mentioned
            T.post('statuses/retweet/:id',{ id : retweetId },tweeted);
            function tweeted(err, response) {
                if (response) {
                    console.log('Retweeted successfully');
                }
                // if there was an error while tweeting if (err) {
                    console.log('Duplicate tweet or Something went wrong');
                }
            }
        }
        else {
        console.log('Nothing found');
        }
    });
}
Create Procfile in the root of the project folder:
Add the code below and save the file.
worker:node botretweet.js
Pushing Code to Github: