Telegram Chatbot API,Python e Bestemmie

Sviluppo di un chatbot in Python usando Requests

Dopo un primo approccio con le API di Telegram e Arduino ho pensato ad un bot che potessi fare che avesse una qualche sorta di utilità e che potesse essere usato anche da altri utenti.

Attenzione: I contenuti sottostanti potrebbero infastidire la vostra sensibilità; Il testo contiene e parla in modo esplicito di bestemmie.
Se ritieni che questo possa darti fastidio non proseguire la lettura.

Dopo diverse ore di riflessione l’illuminazione, ho fatto subito una ricerca tra i miei vecchi progetti ed era sempre li, Bestemmie Over The World.

Bestemmie Over The World era un vecchio progettino fatto in Python con Django che iniziai proprio per imparare ad usare Django.
La classica “pool app” mi annoiava e quindi decisi di creare una sorta di sito (portale bo… non saprei definirlo 🙂 ) che raccogliesse tutte le bestemmie.

Ovviamente non avrei mai pensato di hostarlo da qualche parte e mi ero limitato a farlo vedere a qualche amico.

L’idea (geniale) è proprio questa:
Condividere il database di Bestemmie Over The World con un bot per Telegram in grado di bestemmiare quando richiesto.

Per prima cosa ho creato il bot, cercando mi sono accorto che i nomi meglio esplicativi erano già stati scelti, così un pò sconfortato dal fatto che non ero l’unico ad aver avuto quest’idea gli ho provati.
Per fortuna i primi tre che ho provato non funzionavano il che mi ha fatto ben sperare, quindi mi sono messo a pensare ad un altro nome che avesse un collegamento con il sito.
Il nome scelto per il bot è : @bestemmieworld_bot

Una volta scelto il nome mi sono subito messo a lavoro per sviluppare il serverino per il bot.

Volevo usare Python, ma i vari pacchetti suggeriti online non mi piacevano così ho trovato un ottimo tutorial che spiegava come fare un semplice bot in Python con soltanto l’aiuto di Requests.

Una volta completato il tutorial ho giocato un pò con quello che avevo appreso ed alla fine ho iniziato a scrivere quelle che sono le funzionalità del bot.

Prima di tutto il database:

Con BOtW (Bestemmie Over The World) avevo usato Sqlite3, dato che non ho esigenze di performance o query particolarmente complicate ho preferito lasciare tutto così com’era (Anche per pigrizia l’ ammetto).

La prima query è una ‘SELECT DISTINCT’ di tutte le bestemmie presenti normalizzate a caratteri minuscoli usando ‘LOWER(bestemmia)’

La seconda invece aggiunge un WHERE in fondo alla query facendo la SELECT solo per le bestemmie che contengono una parola specifica.
Questa parola, che viene passata come parametro ed è il nome di uno dei classici “soggetti bestemmiabili”       

Le funzionalità del bot:

E’ piuttosto semplice dalle query intuire quali sono le principali funzioni del bot la prima è: /bestemmia e serve per tirare una bestemmia a caso.

Regex
Screen del risultato

La seconda è effettivamente più divertente specialmente nel caso in cui il bot sia in un gruppo (E ve lo consiglio).
Tramite una regex il bot rileva nelle frasi se è presente uno dei “soggetti bestemmiabili”, se lo trova tirerà una bestemmia riferita a quel soggetto.

Funzione regex
Ecco uno screen della ricerca. text è il testo nel quale cercare la parola

Qui ho effettivamente trovato un problemino, di default quando crei un bot ha la privacy nei gruppi attivata e quindi non rileva i messaggi che i membri del gruppo inviano a meno che il messaggio non sia un comando del bot (Inizia con /).
Per sistemare la cosa inizialmente ho impostato il bot come amministratore del gruppo, in questo modo può leggere tutti i messaggi.
Più tardi ho notato che nelle impostazioni era possibile disattivare la privacy nei gruppi per ottenere lo stesso risultato senza dover aspettarsi un azione da un utente ma ho preferito comunque disabilitare questa opzione e fare si che siano gli utenti a scegliere se il bot può o meno leggere i messaggi del loro gruppo.

 

Nuove funzionalità:

Lo scopo di BOtW era quello di condividere con il mondo le proprie bestemmie e mi scocciava il fatto che per aggiungere una bestemmia si doveva andare sul sito, ho quindi fatto una semplice INSERT e aggiunto il comando /add per poter aggiungere la propria bestemmia alla lista.
Prima dell’INSERT faccio un banale controllo sul testo da inserire alla ricerca dei famosissimi “soggetti bestemmiabili” per garantire che venga effettivamente inserita una bestemmia, questo controllo manca sul sito in Django ed è una delle cose che devo sistemare al più presto.

Deploy ed altri problemi:

Alla fine fiero ed orgoglioso della mia creatura ho deciso di caricarlo su un qualche server e cosi ho preso impacchettato tutto e l’ho caricato su PythonAnywhere.

Attualmente c’è un problema che ancora non ho ben chiaro, certe mattine il bot non risponde. Nei log non vedo nulla di strano e basta un riavvio del processo per farlo ripartire.

Quando avrò finito di sistemare queste cosette caricherò il codice su GitHub.

Lascia un commento