Creare un Telegram bot con Python e raspberry pi

Approfitto dell’ennesimo sabato sera a casa per riprendere in mano il “lampone” che tanto decanto agli amici descrivendolo come “the savior”, e facendogli una testa tanta elogiando la filosofia Open Source.

Siccome da quando ne ho memoria ho il pallino del voler automatizzare qualsiasi cosa, e sono costantemente alla ricerca di nuovi modi, metodi e dispositivi da poter integrare, ho voluto approfondire il discorso dei bot. Ho sfruttato una libreria di Python chiamata appunto telepot .

Naturalmente prima è necessario creare l’istanza del bot tramite Telegram. Per farlo basta semplicemente cercare dall’applicazione l’utente BotFather e seguire le istruzioni che lui indicherà, perché a sua volta anche lui è un bot, e permette di modificare e aggiornare l’anagrafica e descrizione del bot che stiamo creando, permette di creare dei comandi prestabiliti e di impostare la foto del contatto del bot che create. Proprio come farebbe un “padrino”.


Il codice che ho creato (forse più corretto dire “rubato) implementa oltre alla caratteristica del bot di “rimanere in ascolto” come ogni server che si rispetti, attendendo un comando che gli invieremo da Telegram, anche il mio “famoso” MovieSearchApp che sfrutta le API (se ve lo siete perso potete trovare l’articolo qui – il mio primo link al mio blog, sono emozionato! -), ma in versione “ridotta” grazie a delle libreria come json e requests.

Il codice che riporto qui sotto, come quello della MovieSearchApp li trovate anche sul mio repository di GitHub: TelegramPibot e MovieSearchApp

import datetime  # Importing the datetime library
import telepot   # Importing the telepot library
from telepot.loop import MessageLoop    # Library function to communicate with telegram bot
from time import sleep      # Importing the time library to provide the delays in program
import json
import requests
now = datetime.datetime.now() # Getting date and time

def find_movie(a):
    url1 = "http://omdbapi.com/?s="
    url2 = ""
    url3 = "&apikey=thewdb"
    url2 = a
    url = url1+url2+url3
    response = requests.get(url)
    #print(response.text)
    risp = response.json()
    #print risp.keys()
    if "Response" in risp.keys():
        print (risp['Search'][1])
    else:
        print ("cazz")
    return risp

def handle(msg):
    chat_id = msg['chat']['id'] # Receiving the message from telegram
    com = msg['text']   # Getting text from the message
    command = com.lower()
    print ('Received:', command)
    # Comparing the incoming message to send a reply according to it
    if command == '/hi':
        bot.sendMessage (chat_id, str("Hi! MakerPro"))
    elif command == '/time':
        bot.sendMessage(chat_id, str("Time: ") + str(now.hour) + str(":") + str(now.minute) + str(":") + str(now.second))
    elif command == '/date':
        bot.sendMessage(chat_id, str("Date: ") + str(now.day) + str("/") + str(now.month) + str("/") + str(now.year))
    elif "movie" in command:
        s = command[6:]
        risp = find_movie(s)
        Titolo = risp['Search'][1]['Title']
        Anno = risp['Search'][1]['Year']
        Immagine = risp['Search'][1]['Poster'] 
        bot.sendMessage(chat_id, str("Titolo film trovato: ") + Titolo + str(", ") + str("Anno uscita: ") + Anno + str(", ") + str("Immgine Poster: ") + Immagine)

# Insert your telegram token below
bot = telepot.Bot('202678137:AAETSgFM2Jm-N46cQbcgggyo24LgAKUE7Gs')
print (bot.getMe())

# Start listening to the telegram bot and whenever a message is  received, the handle function will be called.
MessageLoop(bot, handle).run_as_thread()
print ('Listening....')

while 1:
    sleep(10)

Oltre a 3 comandi di prova, (uno che saluta, uno che ritorna l’orario e uno che ritorna la data) totalmente inutili, ma che rendono l’idea di quello che si potrebbe fare con un raspberrypi bot (ad esempio comandare dispositivi della propria casa, aprire il cancello, spegnere la luce, ecc), qui sotto inserisco le foto del comando MovieSearchApp che funziona in modo molto semplice: Basta scrivere Movie seguito dal titolo del film (non fa differenza se in grande o in piccolo, perché ho sfruttato la funzione lower() di Python). Di ritorno si avranno 3 cose:

  • Il titolo corretto del film;
  • L’anno di uscita
  • L’immagine del poster

Provate ad immaginare la potenzialità di questa cosa: se l’avessi conosciuta quando andavo a scuola avrei potuto utilizzarla per risolvere il compito di matematica con le espressioni a 2 incognite (che non sono neanche ora in grado di risolvere 😀 )

Potete trovare questo bot sempre attivo in quanto lascio il raspberrypi sempre acceso, cercate il mio bot come @Chicfather_bot o come RaspyTelebot.

Naturalmente io ho utilizzato il raspberry pi 3 B+, ma avrei potuto anche utilizzare un computer o laptop, ma il raspberry costa meno acquistarlo, è più piccolo (come un pacchetto di sigarette o poco più) e soprattutto consuma meno! Per acquistarlo potete andare qui (tranquilli che non sono la Ferragni e non guadagno a sponsorizzare 🙂 ).

Python dovrebbe avere già tutte le librerie a parte telepot, che potete installarlo da terminale con un sudo pip install telepot. In ogni caso se avete dubbi chiedetemi pure!


LONG LIVE AND PROSPERITY

2 commenti su “Creare un Telegram bot con Python e raspberry pi

  1. Tutto molto chiaro, anche io provai a creare un bot in telegram a suo tempo. Interessante come un bot ti aiuti a creare un altro bot 🤔😌
    Con molto tempo e pazienza a disposizione … Alexa spostati proprio 😅👍
    Sarebbe bello applicarlo come strumento di marketing

    1. Se hai qualche idea di cosa si potrebbe implementare possiamo lavorarci insieme per creare uno strumento di marketing. Del tipo: io digito “sensore perimetrale” e lui mi restituisce una serie di articoli inerenti con tanto di link per ordinarli 😉👍🏻

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Top