package main import ( "encoding/json" "fmt" "log" "os" "strings" "time" "github.com/hamcha/tg" ) type Macro struct { Value string Author tg.APIUser Time time.Time } var macropath *string var macros map[string]Macro func macro_init() { macros = make(map[string]Macro) file, err := os.Open(*macropath) if err != nil { return } defer file.Close() err = json.NewDecoder(file).Decode(¯os) if err != nil { log.Println("[macro] WARN: Could not load macros (malformed or unreadable file): " + err.Error()) return } log.Printf("[macro] Loaded %d macros from %s\n", len(macros), *macropath) } func macro_message(broker *tg.Broker, update tg.APIMessage) { if isCommand(update, "macro") { parts := strings.SplitN(*(update.Text), " ", 3) switch len(parts) { case 2: var out string macroname := strings.ToLower(parts[1]) item, ok := macros[macroname] if ok { out = fmt.Sprintf("%s\n%s\n%s - %s", macroname, item.Value, item.Author.Username, item.Time.Format("02-01-06 15:04")) } else { out = fmt.Sprintf("%s\nmacro inesistente\n(configura con /macro %s contenuto)", macroname, macroname) } broker.SendTextMessage(update.Chat, out, &update.MessageID) case 3: macroname := strings.ToLower(parts[1]) macros[macroname] = Macro{ Value: parts[2], Author: update.User, Time: time.Now(), } savemacros() broker.SendTextMessage(update.Chat, fmt.Sprintf("%s → %s", macroname, parts[2]), &update.MessageID) default: broker.SendTextMessage(update.Chat, "Sintassi\nLeggi: /macro nome-macro\nScrivi: /macro nome-macro contenuto macro", &update.MessageID) } } } func savemacros() { file, err := os.Create(*macropath) if err != nil { log.Println("[macro] WARN: Could not open macro db: " + err.Error()) return } err = json.NewEncoder(file).Encode(macros) if err != nil { log.Println("[macro] WARN: Could not save macros into file: " + err.Error()) } }