Bot en Twitter con Nodejs

Daniel Avila
4 min readDec 21, 2022

--

En este artículo veremos el paso a paso para crear un bot en Twitter con la api V2 y todo el código será escribo en Nodejs

Antes de comenzar debes tener instalado nodejs en tu computador, te dejo el enlace para que lo puedas descargar 👇

Creamos el proyecto e instalamos las librerías

Crea una carpeta y dentro corre el siguiente comando:

npm init

Completa los campos y luego abre con VSCode, verás que ya tienes el archivo package.json creado

Instala las librerías dotenv y twitter-api-v2 con los siguientes comandos

npm i dotenv

npm i twitter-api-v2

Crea los clientes

Para poder ejecutar funciones con la api debemos tener dos clientes creados, uno que tenga funciones de desarrollador para hacer la busqueda de tweets y otro que tenga funciones de usuario para darle like, reply y retweet a cada tweet.

Crea la carpeta client en el proyecto y agrega los archivos user_client.js y dev_client.js

En dev_client.js agrega el siguiente código:

require('dotenv').config()
const {TwitterApi} = require('twitter-api-v2');

const dev_client = new TwitterApi(process.env.APP_TOKEN);

module.exports = dev_client;

Ahora en user_client.js

require('dotenv').config()
const {TwitterApi} = require('twitter-api-v2');

const user_client = new TwitterApi({
appKey: process.env.APP_KEY,
appSecret: process.env.APP_SECRET,
accessToken: process.env.ACCESS_TOKEN,
accessSecret: process.env.ACCESS_SECRET,
});

module.exports = user_client;

Ahora crea el archivo .env en la raíz del proyecto y agrega el siguiente código:

#dev
APP_TOKEN=""


#user
APP_KEY=""
APP_SECRET=""
ACCESS_TOKEN=""
ACCESS_SECRET=""

Obtenemos las credenciales para cada client

Para tener acceso a la api de Twitter debes crearte un usuario desarrollador en Twitter Developers 👇

Una vez creado el usuario debes crear un nuevo proyecto y dentro del proyecto una nueva app.

Deberas llenar un formulario para obtener el acceso Elevated

Te recomiendo que el formulario lo llenes con fines educacionales, para que Twitter te entregue el acceso.

Con el acceso Elevated ingresa en la sección Keys and tokens

Para el APP_TOKEN ve a la sección Bearer Token y selecciona Regenerate, te entregará el token que debes pegar en .env

Para el APP_KEY y APP_SECRET ve a la sección

Para el ACCESS_TOKEN y ACCESS_SECRET ve a la sección Access Token and Secret , regenera el token y copa cada variable dentro del .env

Asegurate de tener los permisos de lectura y escritura (read and write)

Listo ya tenemos todas nuestras credenciales ahora ejecutemos la busqueda de tweets!

Rules y Streaming

Crea el archivo index.js dentro de la raíz del proyecto

Copia el siguiente código para obtener los cliente creados y el manejador de eventos de streaming de la api de twitter

const dev_client = require('./client/dev_client.js');
const user_client = require('./client/user_client.js');

const {ETwitterStreamEvent} = require('twitter-api-v2');

Luego crea una función async llamada main y agrega el siguiente código:

async function main(){

//obtiene el user
const user = await user_client.v2.me();
//console.log(user);

//copia el user_id en esta variable
let user_id = '';

//obtiene las reglas de busqueda
const rules = await dev_client.v2.streamRules();
//console.log(rules);

//elimina las reglas de busqueda
// await dev_client.v2.updateStreamRules({
// delete: { ids: rules.data.map( rule => rule.id) }
// })

//crea nuevas reglas de busqueda
// await dev_client.v2.updateStreamRules({
// add: [{ value: 'Javascript'} , {value: 'Nodejs' }],
// });

//crea un nuevo stream
const stream = dev_client.v2.searchStream({
'tweet.fields' : ['referenced_tweets', 'author_id']
});

//ejecuta el stream y muestra los resultados
(await stream).on(ETwitterStreamEvent.Data, async tweet => {

//mostramos el author_id por consola
console.log(tweet.data.author_id);

//mostramos el text por consola
console.log(tweet.data.text);

//like
await user_client.v2.like(user_id, tweet.data.id);

//retweet
await user_client.v2.retweet(user_id, tweet.data.id);

//reply
await user_client.v1.reply('I like this!', tweet.data.id);

});

main();

Con este código ya podremos filtrar por todos los tweets que tengan Javascript o Nodejs en su texto y darles like, retweet y replay

Acá te dejo el video completo de la implementación del código 👇

Suscríbete al canal, estaré subiendo muy buen contenido como este 🙌

--

--