- Learn
- Telegram Bot: come crearli, la guida
- Telegram Bot in Python
Telegram Bot in Python
In questa lezione, realizziamo un TelegramBot in linguaggio Python. Come illustrato nelle lezioni precedenti, i passaggi da seguire saranno questi:
- richiederemo al BotFather l’inizializzazione di un nuovo Bot. Questo ci chiederà il nome che dovrà avere e l’identificativo, terminante con il suffisso bot, da associargli;
- se tutti i dati al punto precedente saranno corretti il BotFather ci assegnerà un token che costituirà la chiave di autenticazione del nostro programma presso la piattaforma Telegram;
- passando al codice, sceglieremo la libreria per interagire con le API di Telgram che vorremo utilizzare ed imposteremo l’impianto di comunicazione di base.
Quanto sopra per avviare il Bot ed integrarlo nell’ecosistema Telegram ma non dimentichiamo che la parte principale sarà il software le cui funzionalità dovremo esporre attraverso il Bot. Infatti, il Bot va visto come una sorta di API per un nostro servizio, un mezzo estremamente comodo e conosciuto per poter offrire agli utenti interazione con esso da remoto.
Nel nostro caso, il TelegramBot esporrà le funzionalità relative ad un convertitore di valuta euro/dollaro e sarà contenuto nel file bot_main.py. Al suo interno, vi sarà la variabile TOKEN che conterrà il codice token che il BotFather ci ha assegnato. Nel testo che vedremo essa conterrà dei dati fasulli che dovranno essere sostituiti con quelli validi prima dell’utilizzo del programma.
Fissato il token, il nostro bot inizierà a funzionare avviandolo come un normale script Python da riga di comando:
$ python bot_main.py
L’aspetto più interessante è che grazie al token il nostro programma sarà rintracciato ovunque si trovi e non sarà affatto necessario avere un server a disposizione: il nostro PC collegato in Rete sarà perfettamente idoneo per sperimentare il tutto. La libreria che abbiamo scelto è una delle più famose per TelegramBot in Python sebbene non l’unica, python-telegram-bot installabile molto semplicemente tramite pip da riga di comando:
$ pip install python-telegram-bot --upgrade
Il codice
Per svolgere le operazioni di conversione, abbiamo preparato due semplici funzioni fissando un cambio in maniera statica. Abbiamo messo il tutto in un file chiamato exchange.py:
EXCHANGE=1.125
def from_usd_to_eur(usd):
return usd/EXCHANGE
def from_eur_to_usd(eur):
return EXCHANGE*eur
Abbiamo due funzioni che si occupano di convertire, rispettivamente, un valore in dollari americani in euro (from_usd_to_eur) ed un valore in euro nel suo controvalore in dollari (from_eur_to_usd). Qui abbiamo fissato il tasso di cambio in una variabile ma nella realtà un servizio simile dovrebbe collegarsi a qualche fonte remota e scaricare in tempo reale il rapporto aggiornato. Per gli scopi del nostro esempio va bene così e lo si potrà fare come ulteriore esercitazione.
Il nostro bot si occuperà di dialogare con la piattaforma invocando al momento necessario le funzioni che abbiamo visto prima. Questo il codice del bot contenuto nel file bot_main.py:
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import exchange
# IMPORTANTE: inserire il token fornito dal BotFather nella seguente stringa
TOKEN="ABCDEFGH12345678"
def extract_number(text):
return text.split()[1].strip()
def convert_usd(update, context):
usd=float(extract_number(update.message.text))
eur=exchange.from_usd_to_eur(usd)
print(f'Eseguita conversione da {usd} USD a {eur} EUR')
update.message.reply_text(f'{eur} EUR')
def convert_eur(update, context):
eur=float(extract_number(update.message.text))
usd=exchange.from_eur_to_usd(eur)
print(f'Eseguita conversione da {eur} EUR a {usd} USD')
update.message.reply_text(f'{usd} USD')
def main():
upd= Updater(TOKEN, use_context=True)
disp=upd.dispatcher
disp.add_handler(CommandHandler("usd", convert_usd))
disp.add_handler(CommandHandler("eur", convert_eur))
upd.start_polling()
upd.idle()
if __name__=='__main__':
main()
Il funzionamento si basa su ciò che succede nella funzione main. Il bot resta in attesa di aggiornamenti che gli vengono forniti ed il suo scopo è di reagire a questi. Gli aggiornamenti verranno innescati dai messaggi che riceve via Telegram. Gli utenti intenzionati a cercare il bot potranno individuarlo nel loro client mediante nome o id e gli potranno inviare dei messaggi.
I messaggi contengono i comandi che nel nostro caso saranno /eur o /usd seguiti dalla cifra che vorremo convertire. Se inviamo /eur 100 vorremo sapere il corrispondente di 100 euro in dollari mentre inviando /usd 100 saremo interessati a sapere a quanti euro equivalgono 100 dollari.
Con le righe:
disp.add_handler(CommandHandler("usd", convert_usd))
disp.add_handler(CommandHandler("eur", convert_eur))
diciamo quale funzione deve essere invocata in base al comando assegnato. Se inviamo il messaggio /eur 100 verrà riconosciuto il comando eur e, di conseguenza, invocata la funzione convert_eur. Comportamento analogo si avrà usando il comando /usd.
Nelle funzioni convert_usd e convert_eur dovremo per prima cosa recuperare il testo del messaggio. L’aggiornamento ricevuto sarà contenuto nell’oggetto update e tra i suoi vari dati troveremo update.message.text che conterrà l’intero comando. Da qui dovremo estrarre il valore economico da convertire. Sarebbe opportuno eseguire controlli sul formato del comando ma in questo caso non lo facciamo per leggibilità tuttavia si ricordi che è sempre buona prassi farlo.
Importante considerare che se invochiamo print in queste funzioni, il suo output sarà stampato sulla console di esecuzione del bot mentre utilizzando la funzione reply_text invieremo dell’output sotto forma di messaggio Telegram all’utente che ha contattato il bot.
In questo modo, avremo un prototipo di Bot funzionante, attivo finchè manterremo in esecuzione lo script bot_main.py. Espanderlo non sarà affatto complicato: per iniziare, sarà sufficiente prevedere ulteriori comandi nel dispatcher e definire le funzioni di reazione.
Il codice usato in questa lezione è disponibile a questo link.
Telegram Bot in Node.js
La guida è in pubblicazione. Altre lezioni saranno pubblicate nei prossimi giorni.
Se vuoi aggiornamenti su Programmazione inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
I Video di HTML.it
Eva Gjeci, backend mobile con Azure e JS
Usare i Windows Azure Mobile Services per sviluppare le vostre app per qualunque piattaforma