]> git.giacomolli.uk - onechat/blob - main.go
Talk to the agent through a Telegram bot
[onechat] / main.go
1 package main
2
3 import (
4 "context"
5 "fmt"
6 "os"
7 "os/signal"
8 "strings"
9 "syscall"
10 )
11
12 func main() {
13 err := run()
14 if err != nil {
15 fmt.Fprintln(os.Stderr, "onechat:", err)
16 os.Exit(1)
17 }
18 }
19
20 func run() error {
21 ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
22 defer cancel()
23
24 args := os.Args[1:]
25 switch {
26 case len(args) == 0:
27 _, err := fmt.Println("onechat")
28 if err != nil {
29 return err
30 }
31 case len(args) == 1 && args[0] == "login":
32 err := login(ctx, os.Stdout)
33 if err != nil {
34 return err
35 }
36 // A signal is the normal stop of the daemon and the client, so their
37 // result does not include ctx.Err().
38 case len(args) == 1 && args[0] == "daemon":
39 return daemon(ctx, os.Stdout)
40 case len(args) == 1 && args[0] == "chat":
41 return chat(ctx, os.Stdin, os.Stdout)
42 case len(args) > 0 && args[0] == "probe":
43 err := probe(ctx, args[1:], os.Stdout)
44 if err != nil {
45 return err
46 }
47 default:
48 return fmt.Errorf("unknown command %q", strings.Join(args, " "))
49 }
50
51 return ctx.Err()
52 }