aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--persistence/sessions.go35
-rw-r--r--telegram/commands.go26
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)
}