diff --git a/mods/dantes.go b/mods/dantes.go index 5499627..9af4a7b 100644 --- a/mods/dantes.go +++ b/mods/dantes.go @@ -1,24 +1,65 @@ package main -import "github.com/hamcha/clessy/tg" +import ( + "math/rand" + "strings" -var nomifamosi = []string{ - "Voltaire", "Lucio Dalla", "Newton", "Cartesio", "Socrate", "Nietzsche", - "Pascoli", "Platone", + "github.com/hamcha/clessy/tg" +) + +var dantes_frasiacaso = []string{ + "MA TU SEI FUORI", "scusa ma chi cazzo se ne frega", "snì", "io non discuto più, derido e ignoro", "MA CHI SEIIIIIII", "Non commento", } -var tipibrutti = []string{ - "lo scassapalle", "l'archibugio", "il minchione", "il saputello", +var dantes_manomi = []string{ + "Ma chi ti credi, _?", "ATTENZIONE RAGAZZI, È ARRIVATO _", "Eh allora vallo a dire a _", } -func dantes(broker *tg.Broker, update tg.APIMessage) { - +var dantes_nomifamosi = []string{ + "Voltaire", "Lucio Dalla", "Newton", "Cartesio", "Socrate", "Nietzsche", "Pascoli", "Platone", "Ricky Martin", } -/* -MA TU SEI FUORI +var dantes_scusa = []string{ + "scusa se faccio _", "non per fare il _", +} -ATTENZIONE RAGAZZI, E' ARRIVATO +var dantes_tipibrutti = []string{ + "lo scassapalle", "il minchione", "il saputello", "lo stronzo", +} -Scusa se faccio , ma hai detto una stronzata -*/ +var dantes_followup = []string{ + " ma hai detto una stronzata", " però cristo dai", ", ma ti sei letto?", ", ma cosa cazzo dici", +} + +func dantes_message(broker *tg.Broker, update tg.APIMessage) { + if isCommand(update, "dantes") { + frase := "" + switch rand.Intn(3) { + case 0: + // Frasi a caso + fraseid := rand.Intn(len(dantes_frasiacaso)) + frase = dantes_frasiacaso[fraseid] + case 1: + // Ma nomi + incipitid := rand.Intn(len(dantes_manomi)) + nomeid := rand.Intn(len(dantes_nomifamosi)) + frase = strings.Replace(dantes_manomi[incipitid], "_", dantes_nomifamosi[nomeid], 1) + case 2: + // Brutta persona + scusaid := rand.Intn(len(dantes_scusa)) + tipoid := rand.Intn(len(dantes_tipibrutti)) + followid := rand.Intn(len(dantes_followup)) + frase = strings.Replace(dantes_scusa[scusaid], "_", dantes_tipibrutti[tipoid], 1) + dantes_followup[followid] + + } + + id := update.MessageID + if update.ReplyTo != nil { + id = update.ReplyTo.MessageID + } + + broker.SendTextMessage(update.Chat, frase, &id) + return + } + +} diff --git a/mods/macro.go b/mods/macro.go index 8018545..1993cdf 100644 --- a/mods/macro.go +++ b/mods/macro.go @@ -20,7 +20,7 @@ type Macro struct { var macropath *string var macros map[string]Macro -func initmacro() { +func macro_init() { macros = make(map[string]Macro) file, err := os.Open(*macropath) if err != nil { @@ -35,7 +35,7 @@ func initmacro() { log.Printf("[macro] Loaded %d macros from %s\n", len(macros), *macropath) } -func macro(broker *tg.Broker, update tg.APIMessage) { +func macro_message(broker *tg.Broker, update tg.APIMessage) { if isCommand(update, "macro") { parts := strings.SplitN(*(update.Text), " ", 3) switch len(parts) { diff --git a/mods/main.go b/mods/main.go index c9f10fc..3c333bd 100644 --- a/mods/main.go +++ b/mods/main.go @@ -18,51 +18,54 @@ type Mod struct { var mods = map[string]Mod{ "metafora": { - OnMessage: metafora, + OnMessage: metafora_message, + }, + "dantes": { + OnMessage: dantes_message, }, "viaggi": { - OnInit: initviaggi, - OnMessage: viaggi, + OnInit: viaggi_init, + OnMessage: viaggi_message, }, "meme": { - OnInit: initmeme, - OnMessage: memegen, + OnInit: meme_init, + OnMessage: meme_message, }, "unsplash": { - OnInit: initunsplash, - OnMessage: unsplash, + OnInit: unsplash_init, + OnMessage: unsplash_message, }, "macro": { - OnInit: initmacro, - OnMessage: macro, + OnInit: macro_init, + OnMessage: macro_message, }, "snapchat": { - OnInit: initsnapchat, - OnMessage: snapchat, + OnInit: snapchat_init, + OnMessage: snapchat_message, }, "proverbio": { - OnInit: initproverbio, - OnMessage: proverbio, + OnInit: proverbio_init, + OnMessage: proverbio_message, }, "talk": { - OnInit: inittalk, - OnMessage: talk, + OnInit: talk_init, + OnMessage: talk_message, }, "stt": { - OnInit: initstt, - OnMessage: stt, + OnInit: stt_init, + OnMessage: stt_message, }, "remind": { - OnInit: initremind, - OnMessage: remind, + OnInit: remind_init, + OnMessage: remind_message, }, "search": { - OnInit: initsearch, - OnMessage: search, + OnInit: search_init, + OnMessage: search_message, }, "oroscopo": { - OnInit: initoroscopo, - OnMessage: oroscopo, + OnInit: oroscopo_init, + OnMessage: oroscopo_message, }, } @@ -95,7 +98,20 @@ func isCommand(update tg.APIMessage, cmdname string) bool { } text := *(update.Text) - return strings.HasPrefix(text, "/"+cmdname+"@"+*botname) || (strings.HasPrefix(text, "/"+cmdname) && !strings.Contains(text, "@")) + + // Check without bot suffix + prefix := "/" + cmdname + if text == prefix || strings.HasPrefix(text, prefix+" ") { + return true + } + + // Check with bot suffix + prefix = "/" + cmdname + "@" + *botname + if text == prefix || strings.HasPrefix(text, prefix+" ") { + return true + } + + return false } var broker *tg.Broker diff --git a/mods/memegen.go b/mods/memegen.go index 7a66b3a..b95823f 100644 --- a/mods/memegen.go +++ b/mods/memegen.go @@ -20,7 +20,7 @@ import ( var memeFontData draw2d.FontData -func initmeme() { +func meme_init() { fontfile, err := os.Open(*impact) assert(err) defer fontfile.Close() @@ -37,7 +37,7 @@ func initmeme() { log.Println("[meme] Loaded!") } -func memegen(broker *tg.Broker, update tg.APIMessage) { +func meme_message(broker *tg.Broker, update tg.APIMessage) { // Make replies work if update.ReplyTo != nil && update.Text != nil && update.ReplyTo.Photo != nil { update.Photo = update.ReplyTo.Photo diff --git a/mods/metafora.go b/mods/metafora.go index a5cdd2a..da6b117 100644 --- a/mods/metafora.go +++ b/mods/metafora.go @@ -29,7 +29,7 @@ var metaobjects = []string{ "la manovella", "il pennello", "l'asta", "il cacciavite", "lo spazzolino", } -func metafora(broker *tg.Broker, update tg.APIMessage) { +func metafora_message(broker *tg.Broker, update tg.APIMessage) { if isCommand(update, "metafora") { broker.SendTextMessage(update.Chat, metaforaAPI(), nil) return diff --git a/mods/oroscopo.go b/mods/oroscopo.go index c2c83f7..2918585 100644 --- a/mods/oroscopo.go +++ b/mods/oroscopo.go @@ -15,7 +15,7 @@ import ( var orogen *gomarkov.Chain -func initoroscopo() { +func oroscopo_init() { counter := 0 orogen = gomarkov.NewChain() filepath.Walk(*oropath, func(path string, info os.FileInfo, err error) error { @@ -37,7 +37,7 @@ func initoroscopo() { log.Printf("[oroscopo] Loaded corpus from %d files\n", counter) } -func oroscopo(broker *tg.Broker, update tg.APIMessage) { +func oroscopo_message(broker *tg.Broker, update tg.APIMessage) { if isCommand(update, "oroscopo") { var err error var txt string diff --git a/mods/proverbio.go b/mods/proverbio.go index c027276..e263180 100644 --- a/mods/proverbio.go +++ b/mods/proverbio.go @@ -18,7 +18,7 @@ type ProverbioData struct { var proverbipairs ProverbioData -func initproverbio() { +func proverbio_init() { data, err := ioutil.ReadFile(*proverbi) assert(err) @@ -36,7 +36,7 @@ func initproverbio() { log.Printf("[proverbio] Loaded %d pairs (%d combinations!)\n", len(proverbipairs.Inizio), len(proverbipairs.Inizio)*len(proverbipairs.Fine)) } -func proverbio(broker *tg.Broker, update tg.APIMessage) { +func proverbio_message(broker *tg.Broker, update tg.APIMessage) { if isCommand(update, "proverbio") { n := rand.Intn(len(proverbipairs.Inizio)) m := rand.Intn(len(proverbipairs.Fine)) diff --git a/mods/remind.go b/mods/remind.go index ec03509..3665a00 100644 --- a/mods/remind.go +++ b/mods/remind.go @@ -31,7 +31,7 @@ var reminders map[string]Reminder const ReminderMaxDuration = time.Hour * 24 * 30 * 3 -func initremind() { +func remind_init() { reminders = make(map[string]Reminder) file, err := os.Open(*remindpath) if err != nil { @@ -49,7 +49,7 @@ func initremind() { log.Printf("[remind] Loaded %d pending reminders from %s\n", len(reminders), *remindpath) } -func remind(broker *tg.Broker, update tg.APIMessage) { +func remind_message(broker *tg.Broker, update tg.APIMessage) { if isCommand(update, "ricordami") { // Supported formats: // Xs/m/h/d => in X seconds/minutes/hours/days diff --git a/mods/search.go b/mods/search.go index 6782a88..70c2750 100644 --- a/mods/search.go +++ b/mods/search.go @@ -44,7 +44,7 @@ type SearchResultData struct { const MAX_SEARCH_ALTS = 2 -func initsearch() { +func search_init() { if strings.HasPrefix(*gapikey, "@") { data, err := ioutil.ReadFile((*gapikey)[1:]) if err != nil { @@ -57,7 +57,7 @@ func initsearch() { } } -func search(broker *tg.Broker, update tg.APIMessage) { +func search_message(broker *tg.Broker, update tg.APIMessage) { if isCommand(update, "search") { parts := strings.SplitN(*(update.Text), " ", 2) if len(parts) < 2 { diff --git a/mods/snapchat.go b/mods/snapchat.go index a7c8a61..4b134ef 100644 --- a/mods/snapchat.go +++ b/mods/snapchat.go @@ -25,7 +25,7 @@ import ( var snapFontData draw2d.FontData -func initsnapchat() { +func snapchat_init() { rand.Seed(time.Now().Unix()) fontfile, err := os.Open(*sourcesans) @@ -44,7 +44,7 @@ func initsnapchat() { log.Println("[snapchat] Loaded!") } -func snapchat(broker *tg.Broker, update tg.APIMessage) { +func snapchat_message(broker *tg.Broker, update tg.APIMessage) { // Make replies work if update.ReplyTo != nil && update.Text != nil && update.ReplyTo.Photo != nil { update.Photo = update.ReplyTo.Photo diff --git a/mods/stt.go b/mods/stt.go index 1375418..6553e6f 100644 --- a/mods/stt.go +++ b/mods/stt.go @@ -16,7 +16,7 @@ import ( var sttClient *speech.Client var sttCtx context.Context -func initstt() { +func stt_init() { sttCtx = context.Background() var err error sttClient, err = speech.NewClient(sttCtx, option.WithServiceAccountFile(*gapifile)) @@ -25,7 +25,7 @@ func initstt() { } } -func stt(broker *tg.Broker, update tg.APIMessage) { +func stt_message(broker *tg.Broker, update tg.APIMessage) { if isCommand(update, "stt") { // Make replies work if update.ReplyTo != nil && update.ReplyTo.Voice != nil { diff --git a/mods/talk.go b/mods/talk.go index f56cf1a..3fb4205 100644 --- a/mods/talk.go +++ b/mods/talk.go @@ -52,7 +52,7 @@ type QResponse struct { const talkBaseURL = "https://api.api.ai/v1" -func inittalk() { +func talk_init() { if strings.HasPrefix(*talktoken, "@") { data, err := ioutil.ReadFile((*talktoken)[1:]) if err != nil { @@ -65,7 +65,7 @@ func inittalk() { } } -func talk(broker *tg.Broker, update tg.APIMessage) { +func talk_message(broker *tg.Broker, update tg.APIMessage) { // Must be a text message if update.Text == nil { return diff --git a/mods/unsplash.go b/mods/unsplash.go index 6fa7164..9162263 100644 --- a/mods/unsplash.go +++ b/mods/unsplash.go @@ -24,7 +24,7 @@ const unsplashUrl = "https://source.unsplash.com/random/1280x720" var quoteFontData draw2d.FontData -func initunsplash() { +func unsplash_init() { fontfile, err := os.Open(*gillmt) assert(err) defer fontfile.Close() @@ -51,7 +51,7 @@ func stripUnreadable(r rune) rune { return r } -func unsplash(broker *tg.Broker, update tg.APIMessage) { +func unsplash_message(broker *tg.Broker, update tg.APIMessage) { if isCommand(update, "unsplash") { text := "" user := update.User diff --git a/mods/viaggi.go b/mods/viaggi.go index 0bd8d44..4127c57 100644 --- a/mods/viaggi.go +++ b/mods/viaggi.go @@ -17,11 +17,11 @@ const viaggiurl = "http://free.rome2rio.com/api/1.2/json/Search?key=X5JMLHNc&lan var reg *regexp.Regexp -func initviaggi() { +func viaggi_init() { reg = regexp.MustCompile("([^-]+) -> (.+)") } -func viaggi(broker *tg.Broker, update tg.APIMessage) { +func viaggi_message(broker *tg.Broker, update tg.APIMessage) { if isCommand(update, "viaggi") { usage := func() { broker.SendTextMessage(update.Chat, "Formato: /viaggi <PARTENZA> -> <DESTINAZIONE>", &update.MessageID)