hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/main.go
blob: b7361943906dddd8bf41945f0b3b1766c1206b15 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package main

import (
	"fmt"
	"os"

	"github.com/hachem-wtf/benson/internal/bot"
	"github.com/hachem-wtf/benson/internal/cli"
	"github.com/hachem-wtf/benson/internal/setup"
)

const version = "2.0"

func usage() {
	fmt.Fprint(os.Stderr, `benson — a Minecraft server manager from hell

Usage:
  benson              Start the interactive server-manager CLI
  benson setup        Configure the server manager
  benson setup bot    Configure the Discord bot
  benson bot          Run the Discord bot
  benson version      Print the version
  benson help         Show this help
`)
}

func main() {
	os.Exit(run(os.Args[1:]))
}

func run(args []string) int {
	if len(args) == 0 {
		if err := cli.Run(version); err != nil {
			fmt.Fprintln(os.Stderr, "error:", err)
			return 1
		}
		return 0
	}

	switch args[0] {
	case "setup":
		var err error
		switch {
		case len(args) == 1:
			err = setup.Run()
		case args[1] == "bot":
			err = setup.RunBot()
		default:
			fmt.Fprintf(os.Stderr, "benson: unknown setup target %q (try `benson setup` or `benson setup bot`)\n", args[1])
			return 2
		}
		if err != nil {
			fmt.Fprintln(os.Stderr, "error:", err)
			return 1
		}
		return 0
	case "bot":
		if err := bot.Run(); err != nil {
			fmt.Fprintln(os.Stderr, "error:", err)
			return 1
		}
		return 0
	case "version", "--version", "-v":
		fmt.Println("benson", version)
		return 0
	case "help", "--help", "-h":
		usage()
		return 0
	default:
		fmt.Fprintf(os.Stderr, "benson: unknown command %q\n\n", args[0])
		usage()
		return 2
	}
}