package main
import "encoding/json"
import "flag"
import "fmt"
import "oscarkilo.com/okg/chat"
func runChat(cfg *Config, args []string) error {
if len(args) == 0 {
return fmt.Errorf(
"usage: okg chat SUBCOMMAND ... " +
"(try `okg --help`)")
}
switch args[0] {
case "send":
return runChatSend(cfg, args[1:])
case "fetch":
return runChatFetch(cfg, args[1:])
default:
return fmt.Errorf(
"unknown chat subcommand: %s", args[0])
}
}
func runChatSend(cfg *Config, args []string) error {
fs := flag.NewFlagSet("chat send", flag.ContinueOnError)
if err := fs.Parse(args); err != nil {
return err
}
positional := fs.Args()
if len(positional) != 2 {
return fmt.Errorf("usage: okg chat send TO TEXT")
}
to := positional[0]
text := positional[1]
c, err := newChatClient(cfg)
if err != nil {
return err
}
msg, err := c.Send(chat.SendRequest{To: to, Text: text})
if err != nil {
return err
}
fmt.Printf(
"Sent (from=%s, to=%s, at=%s)\n",
msg.From, msg.To,
msg.CreatedAt.Format("2006-01-02 15:04:05"))
return nil
}
func runChatFetch(cfg *Config, args []string) error {
fs := flag.NewFlagSet("chat fetch", flag.ContinueOnError)
to := fs.String("to", "",
"filter by destination group (default: all visible)")
asJSON := fs.Bool("json", false, "output raw JSON")
if err := fs.Parse(args); err != nil {
return err
}
c, err := newChatClient(cfg)
if err != nil {
return err
}
msgs, err := c.Search(chat.SearchRequest{To: *to})
if err != nil {
return err
}
if *asJSON {
buf, err := json.MarshalIndent(msgs, "", " ")
if err != nil {
return err
}
fmt.Println(string(buf))
return nil
}
for _, m := range msgs {
fmt.Printf(
"[%s] %s → %s: %s\n",
m.CreatedAt.Format("2006-01-02 15:04:05"),
m.From, m.To, m.Text)
}
return nil
}
// newChatClient builds a //chat client.
func newChatClient(cfg *Config) (*chat.HTTPClient, error) {
if cfg.ApiKey == "" {
return nil, fmt.Errorf(
"no API key — run `okg auth login --key sk-...`")
}
return chat.NewHTTPClient(cfg.Host, cfg.ApiKey), nil
}