GithubHelp home page GithubHelp logo

develer-staff / tinabot Goto Github PK

View Code? Open in Web Editor NEW
0.0 5.0 5.0 53 KB

TinaBot è un bot Hubot e integrato con Slack che gestisce gli ordini del pranzo

License: MIT License

Shell 0.90% Batchfile 0.42% JavaScript 54.96% CoffeeScript 43.72%

tinabot's Introduction

TinaBot

TinaBot è un bot Hipchat basato su Hubot.

Ci permette di gestire gli ordini del TuttoBene tenendo una lista giornaliera degli ordini di ognuno, stampandola quando richiesto.

I comandi che possono essere inviati (citandolo) al bot sono:

  • @tinabot per me <ordine> - aggiunge all'ordine dell'utente
  • @tinabot per me niente - cancella il proprio ordine
  • @tinabot ordine - pubblica i dishes ordinati

Inoltre, nelle stanze in cui è attivo, tinabot è in ascolto delle parole TB (case-sensitive) o TuttoBene (case-insensitive)

Sviluppo

Hubot richiede npm 0.10.x installato.

Per iniziare clonare il repository e installare i pacchetti NPM necessari con npm install.

Lo script che fa tutto il lavoro è scripts/listapranzo.js. Si può modificare quello script o aggiungerne di nuovi.

Se si aggiunge un comando nuovo, va anche inserita la relativa descrizione in Commands all'inizio del file, in modo da farlo comparire nell'help del bot.

Provarlo in locale

Per provare TinaBot è sufficiente lanciare:

export HUBOT_HIPCHAT_JID="<utente del bot>"
export HUBOT_HIPCHAT_PASSWORD="<password del bot>"

./bin/hubot --adapter hipchat

Verrà lanciata la shell interattiva di TinaBot. Si può iniziare a guardarsi intorno con tinabot help.

Anche senza le variabili d'ambiente è comunque possibile interagire col bot direttamente dalla console.

Deployment

TinaBot è hostato presso Heroku. Fate riferimento alle istruzioni standard di Hubot per Heroku. È richiesta l'installazione di RedisToGo (basta la versione free). Il processo principale viene avviato da Heroku leggendo il file Procfile.

Sono richieste alcune variabili d'ambiente su Heroku:

HEROKU_URL:                      http://tinabot.herokuapp.com
HUBOT_HEROKU_KEEPALIVE_URL:      https://tinabot.herokuapp.com/
HUBOT_HIPCHAT_JID:               <utente del bot>
HUBOT_HIPCHAT_JOIN_PUBLIC_ROOMS: false
HUBOT_HIPCHAT_PASSWORD:          <password del bot>
HUBOT_HIPCHAT_ROOMS:             <Lista delle stanze in cui stare in ascolto (comma-separated)>
REDISTOGO_URL:                   <impostato da heroku>

HUBOT_HIPCHAT_ROOMS richiede il valore XMPP JID delle stanze, si trova nel sito di Hipchat.

Il remote GIT di Heroku è:

[remote "heroku"]
  url = https://git.heroku.com/tinabot.git
  fetch = +refs/heads/*:refs/remotes/heroku/*

Per vedere i log o riavviare il bot i comandi necessari sono heroku logs e heroku restart. È necessario aver installato la Heroku CLI.

Hubot Heroku Keepalive

Dato che su Heroku i processi free si fermano se non c'è attività per 30 minuti viene usato hubot-heroku-keepalive per tenere attivo TinaBot.

tinabot's People

Contributors

batt avatar plorefice avatar svalorzen avatar tommyblue avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

tinabot's Issues

Gestione del develunch

Che ne direste se implementassi in tinabot anche la gestione del Develunch? Pensavo semplicemente al fatto che potrebbe essere lei a inviare i reminder giusti e, in caso di develunch, oltre a non prendere ordinazioni lo ricordasse in chat.

Per settare un develunch si potrebbe aggiungere un comando "develunch" che prende una data, lei controlla se è un venerdì e automaticamente si schedula i develunch ogni 2 settimane a partire da quella. Così in caso di salto sappiamo come riprogrammarla.

Che ne dite? Pensate che sia una feature utile?

funzione "menu" e "ordine"

sicuramente per "menu" ma forse anche per "ordine" tinabot dovrebbe rispondere in privato per evitare che la chat sia spammata

Ordine rifiutato

Se dico a Tinabot “per me Salmone all’arancia con fagiolini” non me lo ordina dicendomi “mi spiace, non riesco a trovare nulla che rassomigli a “Salmone all’arancia con fagiolini” nel menu.“,

Ho provato anche togliendo lo spazio di troppo tra “arancia” e “con”.

[RFC] Gestione del nuovo menu (secondi + contorni)

Obiettivo

Essere in grado di ordinare secondi personalizzati alla stregua di come si farebbe andando di persona al TB.

Propongo l'uso del simbolo & per aggiungere contorni a un piatto. Ad esempio:

zero: per me foobar & pippo
tinabot: Ok, foobar con pippo per @zero
zero: per me foobar & pippo & pluto
tinabot: Ok, foobar con pippo e pluto per @zero
zero: per me foobar & pippo & pluto & topolino
tinabot: Ok, foobar con pippo, pluto, e topolino per @zero

Questi sono solo output di esempio, un'alternativa dall'implementazione più semplice può essere

zero: per me foobar & pippo & pluto & topolino
tinabot: Ok, foobar con pippo e pluto e topolino per @zero

Esempio del formato del menu

Secondi piatti
Spiedini misti di carne grigliati con spinaci
Galletto livornese farcito con patate sabbiose
Trippa alla fiorentina con fagioli all’uccelletto
Baccalà alla livornese con ceci
Polenta con seppie e patate
Baccalà in bianco con patate

altre verdure….
Grigliate: peperoni
Grigliate: melanzane
Grigliate: belga
Grigliate: radicchio
Vapore:  broccoli
Vapore: cavolfiore
Vapore: carote
Vapore: fagiolini
Dadolata di verdure al forno
Insalata

Piatti vegetariani
Tavolozza di verdure grigliate con mozzarelle
Fantasia di verdure al vapore

Esempio di ordini personalizzati

  • Trippa alla fiorentina con cavolfiore al vapore e melanzane grgliate
  • Spiedini misti di carne grigliati con ceci

Problematiche

Menu scritto a mano

Per quanto ne sappiamo il menu è scritto a mano, quindi è soggetto a typo o errori nel formato. Questo non è facilmente risolvibile. Una possibile soluzione potrebbe essere permettere un override manuale all'autocompletamento di tinabot.

Per esempio, si potrebbe implementare un comando voglio, che funziona come per me ma permette di forzare una stringa qualunque.

Es.

zero: voglio banane all'uccelletto con sugo di nulla
tinabot: Ok, banane all'uccelletto con sugo di nulla per @zero

Formato dei contorni

I contoni hanno formato tipo: contorno mentre nell'ordine devono comparire nel modo più "umano" possibile.

Un buon compromesso può essere trasformarli nel formato contorno tipo.
Ad esempio: Grigliate: melanzane -> melanzane grigliate

Gli svantaggi sono evenutali problemi di genere (es. peperoni grigliate) o la mancanza di articoli (es. carote vapore) ma confido che il risultato finale sia comprensibile a un umano.

Contorni mancanti

I secondi piatti hanno spesso inclusi dei contorni, che non sempre compaiono nella sezione relativa ai contorni. Nel menu esemplificativo questo accade con Baccalà alla livornese con ceci.

In questo caso l'euristica più semplice è splittare sulla stringa con e aggiungere ciò che è sulla destra tra i contorni. In questo caso: ceci

Secondi piatti con verdure integrate nella cottura

Alcuni secondi piatti contengono la stringa con, ma ciò che segue non è un contorno a parte, ma parte integrativa del piatto e cotto insieme con l'ingrediente principale.
Nel menu esemplificativo questo succede con Baccalà in bianco con patate.

In questo caso le patate non sono a parte, ma sono cotte insieme con il baccalà e non sono separabili.

Ancora peggio nel caso di Polenta con seppie e patate, dove non è nemmeno chiaro se e quali tra seppie e patate siano contorni a parte.

In questi casi l'euristica di cui sopra aggiungerebbe contorni e, soprattutto, secondi piatti sbagliati.
Sbagliati nel senso che Baccalà in bianco non è un secondo piatto valido, deve essere sempre accompagnato da patate.

La solzione più semplice in questi casi è ignorare la cosa e confidare che chi ordina sia in grado di parsare il menu con più intelligenza di tinabot, ricostruendo le cose giuste con & o con voglio:

zero: per me Baccalà & patate & ceci
tinabot: Ok, Baccalà in bianco con patate e ceci per @zero

Questo primo esempio funzionerebbe perchè Baccalà in bianco con patate verrebbe splittato in un secondo piatto Baccalà in bianco e un contorno patate

zero: voglio Baccalà in bianco con patate e ceci
tinabot: Ok, Baccalà in bianco con patate e ceci per @zero

In questo secondo esempio, chi ordina si accorgerebbe che il baccalà in bianco va sempre con le patate, e che i ceci sono un contorno a parte, ed esegue un override manuale confidando che il TB sia in grado di preparare il piatto.

Problemi miscellanei

Possibili complicazioni (al di là del parsing e delle euristiche imprecise) possono essere messaggi di errore chiari con l'autocompletamento.

Ad esempio se nel menu compaiono sia Lesse: patate che Al forno: patate, chiedere a tinabot foo & patate non sarà sufficiente. In questo caso tinabot dovrà essere chiara sul problema che la confonde, proponendo le alternative giuste solo per la parte problematica.

In questo caso di esempio, le alternative proposte da tinabot dovrebbero essere patate lesse e patate al forno (seguendo la regola di sostituzione dei contorni)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.