Creare Telegram Bot con NodeJs

C

Se avete aperto l’articolo, sicuramente conoscete già Telegram e indubbiamente avrete usato qualche bot. Oggi ne creeremo uno, utilizzando la combinazione NodeJs/BotFather.
Il nostro chatbot si occuperà di ricercare su Reddit ciò che l’utente ha scritto tramite messaggio e restituirà un risultato.

Requisiti

  • NodeJs
  • Telegram (come poteva mancare!!)
  • Un qualsiasi editor di testo

Come prima cosa, scarichiamo e installiamo NodeJs dal sito ufficiale.
Al termine possiamo dirigerci su Telegram, aggiungere BotFather e creare il nostro bot con questi semplici passi:

  1. Lanciare il comando “/newbot”.
  2. Scegliere il nome da assegnare al bot.
  3. Salvarsi il token di accesso alle api.

 

Scriviamo il nostro bot

Creiamo una cartella in cui verrà iniziallizato il nostro nuovo progetto e apriamola da linea di comando.
Una che ci troviamo all’interno della nostra cartella, lanciamo il comando npm init e seguiamone la procedura, lasciando come entry point “index.js”. Al termine possiamo installare Telegraf nel nostro progetto tramite npm npm install telegraf --save.
Adesso nella root del progetto creiamo un file chamandolo “index.js” e scriviamo il seguente codice:

const Telegraf = require('telegraf');
const bot = new Telegraf(YOUR_TOKEN_HERE);

bot.start((message) => {
  console.log('started:', message.from.id)
  return message.reply('Hello my friend, write anything to start search!!');
})

app.startPolling();

In questo modo, quando il bot verrà avviato, invierà all’utente questo messaggio: “Hello my friend, write anything to start search!!”. Possiamo testarlo lanciando il comando node index e aggiungendolo su Telegram.

Adesso facciamo in modo che qualsiasi testo riceva il nostro bot, eseguirà una ricerca su Reddit e risponda con ciò che ha trovato.
Modifichiamo il codice in questo modo:

const Telegraf = require('telegraf');
const bot = new Telegraf("YOUR_TOKEN");
const axios = require('axios');

bot.start((message) => {
  console.log('started:', message.from.id)
  return message.reply('Hello my friend, contact me by send /contact, or write anything');
})

bot.on('text', message=> {
  const subreddit = message.message.text;

  axios
    .get(`https://reddit.com/r/${subreddit}/top.json?limit=10`)
    .then(res => {

      const data = res.data.data;


      if (data.children.length < 1)
        return message.reply("The search on reddit haven't results.");

      const link = `https://reddit.com/${data.children[0].data.permalink}`;
      return message.reply(link);
    })


    .catch(err => {
      console.log(err);
      return message.reply('try to another search (in english) or contact me at: [email protected] or @VarPGram');
    });
});

bot.startPolling();

Al posto di “YOUR_TOKEN”, dovrete inserire il token che vi è stato fornito da BotFather.
Con il comando .on(‘text, aggiungiamo un listener al nostro bot, il quale qualsiasi testo riceve, esegue un’azione. Nel nostro caso farà una ricerca su reddit, rispondendo con un risultato. In caso la ricerca sia vuota, restituirà un messaggio di errore all’utente, spiegando cosa sia potuto accadere.

Dopo telegram non perdetevi messenger

Se la guida vi è interessata e volete apliare il vostro bot a più piattaforme, leggete la guida Creare Un Bot Per Messneger In Node.js.

Scaricate la repository

Potete trovare il progetto appena creato anche sul mio account github.

A proposito di me

Pasquale De Lucia

Appassionato di tecnologia, ama la programmazione, tanto da farla diventare la sua professione. Orientato al Front-End, ma non lascia indietro gli studi su Back-End e database.
Amante dello smart working.

Gli articoli più letti

Articoli recenti

Commenti recenti