MozillaItalia / mozitahub_bot

Il bot di Mozilla Italia Hub.
Creative Commons Zero v1.0 Universal
5 stars 8 forks source link

Refactoring del codice mozitabot #51

Open dag7dev opened 3 years ago

dag7dev commented 3 years ago

USARE QUESTO ISSUE SOLO PER RILASCIARE AGGIORNAMENTI IMPORTANTI

Link al branch di sviluppo: https://github.com/dag7dev/MozItaReBot

Issue tracker: https://github.com/dag7dev/MozItaReBot/issues/1

Discussione originale Siccome il codice attuale è "messy", bisognerebbe fare un refactoring appena possibile. Cito qualcosa che mi viene in mente: - dividere il codice in funzioni e subroutine (eventualmente con delle funzioni lambda per facilitare la stesura) - ogni variabile / funzione / subroutine deve avere un nome significativo - creare delle funzioni generali parametrizzate - valutare se è il caso di creare degli oggetti (vorrei evitare ma in caso venga fatto bisogna stabilire una gerarchia di oggetti) - ogni funzione deve essere documentata e il codice deve essere scritto in grado di generare della documentazione "autonomamente" (per esempio utilizzando Doxygen così abbiamo il supporto anche a Graphwiz che ci aiuta graficamente, leggere [qui](https://wiki.python.org/moin/DocumentationTools) - i commenti vanno fatti in maniera significativa - sia codice che commenti DOVREBBERO essere scritti in un inglese comprensibile (questo perché magari se qualcuno vuole darci una mano non sa dove mettere le mani, e soprattutto perché se prevediamo di estendere questo bot a un caso generale poi bisognerebbe rimettere mano al codice) - ogni parte di codice andrebbe "divisa" internamente (es. funzioni di utilità, funzioni per "fare questa cosa" ecc) - andrebbero evitate le variabili globali, a meno che non siano strettamente necessarie Dare un'occhiata anche qui: [PEP8](https://www.python.org/dev/peps/pep-0008/) Inoltre Telepot è stata deprecata, quindi bisognerebbe trovare una valida alternativa al più presto. Me ne potrei teoricamente occupare io appena ho tempo, ma ditemi voi cosa ne pensate.
ilyasmg commented 3 years ago

Ha senso. E' un lavoro lunghino da fare. Rido un occhiata al codice e se mi viene in mente qualche modifica per semplificare faccio PR

FedericoAntoniazzi commented 3 years ago

Ciao a tutti, Penso che un rewrite completo ad una libreria aggiornata sia più conveniente rispetto ad un semplice refactoring.

Io conosco già python-telegram-bot e potrei occuparmene almeno per l'inzio ma comunque è una libreria non troppo complessa e ben documentata.

Fatemi sapere cosa ne pensate :)

Mte90 commented 3 years ago

Se si passa a una altra libreria, si organizza meglio il codice e si fanno tests automatici per me meglio evitare il refactoring. Sicuramente però se va in produzione deve avere le stesse funzionalità, possiamo casomai fare un analisi di quelle che non sono utili ma non credo che ne abbiamo.

FedericoAntoniazzi commented 3 years ago

Ho già visto questo argomento per quanto riguarda i bot ma l'unica è creare uno userbot (altra libreria) e farlo interagire con il bot. L'alternativa che mi convince di più è creare dei metodi per wrappare le singole azioni del bot e testarle individualmente

Mte90 commented 3 years ago

Considerando che abbiamo anche il bot Antispam https://github.com/MozillaItalia/mozitaantispam_bot forse conviene fare una libreria comune per semplificare la gestione?

dag7dev commented 3 years ago

@Mte90 intendi scrivere una "utils lib" comune a tutti i bot?

A quel punto converrebbe aggiungerla come sottomodulo su ogni bot, quindi una repo a parte così ogni volta che viene aggiornata non bisogna aggiornare manualmente tutti i bot...

FedericoAntoniazzi commented 3 years ago

@Mte90 Sì, potrei prendermi carico di ciò. Non mi sembrano bot tanto complessi però chiaramente verrebbe più semplice in team

ilyasmg commented 3 years ago

@FedericoAntoniazzi ho cominciato a fare una bozza usando python-telegram-bot sul mio fork del bot (ho creato una nuova branch new_bot) se vuoi dare un occhiata

Mte90 commented 3 years ago

Si intendo una libreria unica così è piú facile gestire il tutto e il codice è piú testabile e meno spaghettoso.

Vedete voi come organizzarvi, fate anche un repo nuovo di pacca, poi dopo in caso lo migriamo dentro l'organizzazione.

FedericoAntoniazzi commented 3 years ago

@ilyasmg Fantastico, più tardi dò un'occhiata :D

dag7dev commented 3 years ago

https://github.com/dag7dev/mozitahub_bot/tree/experimental

Branch experimental funzionante (abbozzata UI + check sui file .env)

Grazie a @FedericoAntoniazzi per il supporto e per l'idea del file .env!

.env file: TOKEN=your-token NEWS_CHANNEL=@your-news-channel

dag7dev commented 3 years ago

https://github.com/dag7dev/mozitahub_bot/tree/experimental

Aggiornamento: codice refactored

EDIT: guardare il primo messaggio

Sav22999 commented 3 years ago

Possibile libreria da utilizzare: https://github.com/eternnoir/pyTelegramBotAPI