From ec1197f83cfa064ea8170d4b9f8a9ec021f88a87 Mon Sep 17 00:00:00 2001 From: bodqhrohro Date: Thu, 5 Dec 2019 21:56:12 +0200 Subject: [PATCH] Add /config command --- persistence/sessions.go | 35 ++++++++++++++++++++++++++++++++++- telegram/commands.go | 26 +++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/persistence/sessions.go b/persistence/sessions.go index d15c4f3..85c84be 100644 --- a/persistence/sessions.go +++ b/persistence/sessions.go @@ -23,7 +23,8 @@ type SessionsMap struct { // Session is a key-values subtree type Session struct { - Login string `yaml:":login"` + Login string `yaml:":login"` + Timezone string `yaml:":timezone"` } var sessionDB *SessionsYamlDB @@ -75,3 +76,35 @@ func initYamlDB(path string, dataPtr *SessionsMap) (*SessionsYamlDB, error) { Data: dataPtr, }, nil } + +// Get retrieves a session value +func (s *Session) Get(key string) (string, error) { + switch key { + case "timezone": + return s.Timezone, nil + } + + return "", errors.New("Unknown session property") +} + +// ToMap converts the session to a map +func (s *Session) ToMap() map[string]string { + m := make(map[string]string) + for _, configKey := range []string{"timezone"} { + value, _ := s.Get(configKey) + m[configKey] = value + } + + return m +} + +// Set sets a session value +func (s *Session) Set(key string, value string) (string, error) { + switch key { + case "timezone": + s.Timezone = value + return value, nil + } + + return "", errors.New("Unknown session property") +} diff --git a/telegram/commands.go b/telegram/commands.go index c0fe05f..d3a8ea7 100644 --- a/telegram/commands.go +++ b/telegram/commands.go @@ -1,6 +1,7 @@ package telegram import ( + "fmt" "github.com/pkg/errors" "strconv" "strings" @@ -22,7 +23,7 @@ var transportCommands = map[string]command{ "setname": command{"first last", "update name"}, "setbio": command{"", "update about"}, "setpassword": command{"[old] [new]", "set or remove password"}, - //"config": command{"[param] [value]", "view or update configuration options"}, + "config": command{"[param] [value]", "view or update configuration options"}, } var chatCommands = map[string]command{ @@ -209,6 +210,29 @@ func (c *Client) ProcessTransportCommand(cmdline string) string { if err != nil { return errors.Wrap(err, "Couldn't set password").Error() } + case "config": + if len(args) > 1 { + value, err := c.Session.Set(args[0], args[1]) + if err != nil { + return err.Error() + } + + return fmt.Sprintf("%s set to %s", args[0], value) + } else if len(args) > 0 { + value, err := c.Session.Get(args[0]) + if err != nil { + return err.Error() + } + + return fmt.Sprintf("%s is set to %s", args[0], value) + } + + var entries []string + for key, value := range c.Session.ToMap() { + entries = append(entries, fmt.Sprintf("%s is set to %s", key, value)) + } + + return strings.Join(entries, "\n") case "help": return helpString(helpTypeTransport) }