]> git.giacomolli.uk - onechat/blob - main.go
Limit the time of each Telegram send call
[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 }