Refactoring del codice mozitabot
dag7dev opened this issue · 13 comments
USARE QUESTO ISSUE SOLO PER RILASCIARE AGGIORNAMENTI IMPORTANTI
Link al branch di sviluppo: https://github.com/dag7dev/MozItaReBot
Issue tracker: MozillaItalia/MozItaReBot#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
- 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
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.
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
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 :)
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.
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
Considerando che abbiamo anche il bot Antispam https://github.com/MozillaItalia/mozitaantispam_bot forse conviene fare una libreria comune per semplificare la gestione?
@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...
@Mte90 Sì, potrei prendermi carico di ciò. Non mi sembrano bot tanto complessi però chiaramente verrebbe più semplice in team
@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
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.
@ilyasmg Fantastico, più tardi dò un'occhiata :D
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
https://github.com/dag7dev/mozitahub_bot/tree/experimental
Aggiornamento: codice refactored
EDIT: guardare il primo messaggio
Possibile libreria da utilizzare: https://github.com/eternnoir/pyTelegramBotAPI