You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
2.2 KiB

package main
import (
"flag"
"log"
"github.com/caarlos0/env"
)
type botOptions struct {
Debug bool `env:"BOT_DEBUG" envDefault:"false"`
LogConvIDStr string `env:"BOT_LOG_CONVID" envDefault:""`
HomePath string `envDefault:""`
JSON bool `env:"BOT_LOG_JSON" envDefault:"false"`
RedditUser string `env:"BOT_REDDIT_USER" envDefault:""`
RedditPass string `env:"BOT_REDDIT_PASS" envDefault:""`
Owner string `env:"BOT_OWNER" envDefault:""`
KvStoreTeam string `env:"BOT_KVSTORE_TEAM" envDefault:""`
}
func parseArgs(args []string) botOptions {
// parse environment
opts := botOptions{}
if err := env.Parse(&opts); err != nil {
log.Fatalf("Unable to parse env vars: %+v", err)
}
// parse CLI
flags := flag.NewFlagSet(args[0], flag.ExitOnError)
cliOpts := botOptions{}
flags.BoolVar(&cliOpts.Debug, "debug", false, "enables debugging")
flags.BoolVar(&cliOpts.JSON, "json", false, "enables JSON logging")
flags.StringVar(&cliOpts.LogConvIDStr, "log-convid", "", "set the keybase conversation log id")
flags.StringVar(&cliOpts.HomePath, "kbhome", "", "sets alternate keybase home folder for debugging")
flags.StringVar(&cliOpts.RedditUser, "reddit-user", "", "sets the reddit auth user")
flags.StringVar(&cliOpts.RedditPass, "reddit-pass", "", "sets the reddit auth password")
flags.StringVar(&cliOpts.Owner, "owner", "", "sets the keybase username of the bot owner")
flags.StringVar(&cliOpts.KvStoreTeam, "kvstore-team", "", "sets the kvstore team if you want to save configs")
if err := flags.Parse(args[1:]); err != nil {
log.Fatalf("Unable to parse cli args: %+v", err)
}
//overwrite ENV with CLI
if flags.NFlag() > 0 {
if cliOpts.Debug == true {
opts.Debug = true
}
if cliOpts.JSON == true {
opts.JSON = true
}
if cliOpts.HomePath != "" {
opts.HomePath = cliOpts.HomePath
}
if cliOpts.LogConvIDStr != "" {
opts.LogConvIDStr = cliOpts.LogConvIDStr
}
if cliOpts.RedditUser != "" {
opts.RedditUser = cliOpts.RedditUser
}
if cliOpts.RedditPass != "" {
opts.RedditPass = cliOpts.RedditPass
}
if cliOpts.Owner != "" {
opts.Owner = cliOpts.Owner
}
if cliOpts.KvStoreTeam != "" {
opts.KvStoreTeam = cliOpts.KvStoreTeam
}
}
return opts
}