Il bot Telegram per controllare gli aggiornamenti dei package Python
Avevo voglia di creare un bot Telegram, è un tipo di “applicazione” che mi piace sviluppare perchè solitamente dall’idea al prodotto finito passa relativamente poco tempo. In poche ore o giorni di lavoro si può raggiungere il risultato desiderato dato che il testing è molto veloce e non c’è il bisogno di sviluppare un frontend perchè sarà Telegram stesso a fare da GUI .
Oltre al fatto che uso moltissimo Telegram, è quasi la mia app di messaggistica istantanea principale, avere a disposizione un bot integrato in un’app che già uso quotidianamente senza utilizzare app o siti web esterni fa comodo.
Ti lascio subito il link al bot e ti spiego il suo funzionamento: PyPi Package Updates
L’idea
Sviluppo quotidianamente codice in Python e mi capita spesso di utilizzare dei package esterni.
Mi piaceva l’idea di avere uno strumento che mi segnala l’aggiornamento di un package per avere anche una lista degli aggiornamenti delle librerie che seguo in un unico posto (così posso monitorare anche la frequenza degli aggiornamenti).
Ho fatto qualche ricerca nell’app e su Google e non ho trovato un progetto simile su Telegram quindi mi sono detto: «Ok, ci penso io!».
In un gruppo mi hanno detto:
È tipo un dependabot dei povery praticamente 🤣
Si, fondamentalmente dependabot e PyPi Package Updates hanno la stessa utilità.
Ma ci sono alcune piccole differenze:
PyPi Package Updates
segnala gli aggiornamenti direttamente nella sua chat Telegram creando anche una sorta di storicoPyPi Package Updates
posso seguire tutte le librerie che voglio, non solo quelle di un unico progettodependabot
è uno strumento del repository (Gitlab, GitHub, etc.) ed analizza solo i package di uno specifico progetto una volta attivato- da quel che so in
dependabot
non è possibile interrompere il monitoraggio di un package
Funzioni
/start
: viene invocato automaticamente all’avvio del bot e restituisce un messaggio di presentazione sempre identico
/track
: inizia a seguire un package su PyPi, ti verrà chiesto di inviare
l’url del package che vuoi seguire ed è fatto
/list
: lista dei package che stai seguendo, se non sei più interessato a uno specifico package,
cliccando su un elemento della lista puoi scegliere di smettere di ricevere notifiche
Implementazione
Ovviamente il bot è stato scritto in Python con l’ausilio della libreria: python-telegram-bot
Per controllare periodicamente gli aggiornamenti ho utilizzato la funzione job-queue
integrata nello stesso package.
Il database è un piccolo e semplice SQLite con sole 2 tabelle:
- una per memorizzare gli id utenti che utilizzano il bot
- una per salvare i package collegati agli utenti
Disclaimer: l’id utente deve essere salvato per avere un “riferimento” e inviare il messaggio quando una libreria si aggiorna. Non effettuo statistiche, non faccio profilazione (e credo non sia nemmeno possibile), non posso farci cose strane dato che ci sono dei limiti di sicurezza imposti da Telegram.
Puoi utilizzare il bot senza nessuna preoccupazione.
Come ho gestito la persistenza
Come ti dicevo, ho memorizzato tutto in un piccolo database SQLite.
Avrei potuto utilizzare una funzionalità di python-telegram-bot
,
che implementa già al suo interno un sistema per memorizzare dei metadati associati agli utenti del bot.
Ho abbandonato subito questa idea perchè ho pensato che poteva tornarmi scomodo quando dovevo
interrogare “il db” durante il controllo degli aggiornamenti.
Allo stesso tempo però avevo voglia di provare qualcosa di esotico ed ho scelto di non utilizzare SQLAlchemy . Ho utilizzato l'ORM di Django!
Quindi hai usato Django?
Ni.
Ho trovato un gist che permette, con qualche martellata, di estrarre l’ORM da Django ed utilizzarlo in un progetto “non Django”.
Utilizzo Django in molti progetti e riuscire a sfruttare il suo ORM in semplici scriptini o mini app può essere comodo.
Questo bot mi ha dato modo di testare questo metodo per capire se è una soluzione che può funzionare, se è stabile e quali sono gli eventuali problemi che si potrebbero verificare.
Il tutto in meno di 250 linee di codice
La logica del bot è molto semplice ed il codice lo è di conseguenza.
Vuoi creare il tuo bot Telegram ma non sai da dove partire?
Se vuoi dare vita alla tua idea posso darti una mano nella realizzazione 🙂 contattami e spiegami cosa hai in mente.
AP