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())
}
}