Mercurial > lbo > hg > goe_bot
view handlers.go @ 17:b7fca64d56d0
Use proper markup for italics
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Fri, 09 Dec 2016 22:00:48 +0100 |
parents | 992cc8d12603 |
children | 02dba5e5265e |
line wrap: on
line source
package main import ( "bytes" "fmt" "log" "strings" ) const ( echoCmd = "echo" fortuneCmd = "fortune" helpCmd = "help" quoteCmd = "quote" remindCmd = "remind" statusCmd = "status" todoCmd = "todo" ) type handler struct { fn (func(message) (string, error)) desc string } var ( handlers = map[string]handler{ echoCmd: {echoHandler, "Anfrage zurücksenden"}, fortuneCmd: {missingHandler, "Glückskeks"}, quoteCmd: {missingHandler, "Zitat speichern/abfragen"}, remindCmd: {missingHandler, "Wecker"}, statusCmd: {statusHandler, "Status anfragen"}, todoCmd: {missingHandler, "Aufgabenliste"}, } ) func echoHandler(msg message) (string, error) { return msg.Text, nil } func missingHandler(msg message) (string, error) { return "_tut mir leid, das kann ich noch nicht :(_", nil } func unknownCommandHandler(msg message) (string, error) { return "_tut mir leid, das verstehe ich nicht (*/help* für Hilfe)_", nil } func badFormatHandler(msg message) (string, error) { return "_bitte benutze einen Befehl, der mit '/' beginnt!_", nil } func helpHandler(message) (string, error) { b := bytes.NewBuffer(nil) for n, h := range handlers { b.WriteString(fmt.Sprintf("*/%-15s* %s\n", n, h.desc)) } return b.String(), nil } func statusHandler(message) (string, error) { return srvStatus.String(), nil } func dispatch(msg message) (sendMessage, error) { text := "" var err error words := strings.SplitAfter(msg.Text, " ") cmd := words[0] if strings.HasPrefix(cmd, "/") { // set Text to rest of message (without command) msg.Text = msg.Text[len(cmd):] msg.Text = strings.Trim(msg.Text, " ") cmd = cmd[1:] cmd = strings.Trim(cmd, " ") if cmd == helpCmd { // special case text, err = helpHandler(msg) } else if h, ok := handlers[cmd]; ok { text, err = h.fn(msg) } else { log.Println("Unknown command", cmd) text, err = unknownCommandHandler(msg) } } else { log.Println("Bad format:", msg.Text) text, err = badFormatHandler(msg) } reply := sendMessage{ Chat_ID: msg.Chat.ID, Parse_Mode: "Markdown", Text: text} return reply, err }