diff --git a/args.go b/args.go deleted file mode 100644 index 7e54414..0000000 --- a/args.go +++ /dev/null @@ -1,69 +0,0 @@ -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 -} diff --git a/go.mod b/go.mod index da22aa9..91acf27 100644 --- a/go.mod +++ b/go.mod @@ -6,14 +6,13 @@ require ( github.com/PuerkitoBio/goquery v1.6.1 github.com/andybalholm/cascadia v1.2.0 // indirect github.com/beefsack/go-rate v0.0.0-20200827232406-6cde80facd47 // indirect - github.com/caarlos0/env v3.5.0+incompatible github.com/golang/protobuf v1.4.3 // indirect github.com/google/go-querystring v1.0.0 // indirect github.com/google/uuid v1.1.5 github.com/jzelinskie/geddit v0.0.0-20200521013404-78c28c13fba2 github.com/kf5grd/keybasebot v1.4.1 - github.com/stretchr/testify v1.7.0 // indirect github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125 + github.com/urfave/cli/v2 v2.3.0 golang.org/x/net v0.0.0-20201224014010-6772e930b67b // indirect golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3 // indirect google.golang.org/appengine v1.6.7 // indirect diff --git a/go.sum b/go.sum index 129d8be..8e4a6e4 100644 --- a/go.sum +++ b/go.sum @@ -41,14 +41,14 @@ github.com/andybalholm/cascadia v1.2.0 h1:vuRCkM5Ozh/BfmsaTm26kbjm0mIOM3yS5Ek/F5 github.com/andybalholm/cascadia v1.2.0/go.mod h1:YCyR8vOZT9aZ1CHEd8ap0gMVm2aFgxBp0T0eFw1RUQY= github.com/beefsack/go-rate v0.0.0-20200827232406-6cde80facd47 h1:M57m0xQqZIhx7CEJgeLSvRFKEK1RjzRuIXiA3HfYU7g= github.com/beefsack/go-rate v0.0.0-20200827232406-6cde80facd47/go.mod h1:6YNgTHLutezwnBvyneBbwvB8C82y3dcoOj5EQJIdGXA= -github.com/caarlos0/env v3.5.0+incompatible h1:Yy0UN8o9Wtr/jGHZDpCBLpNrzcFLLM2yixi/rBrKyJs= -github.com/caarlos0/env v3.5.0+incompatible/go.mod h1:tdCsowwCzMLdkqRYDlHpZCp2UooDD3MspDBjZ2AD02Y= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -93,6 +93,7 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= @@ -112,39 +113,11 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/haukened/keybasebot v1.3.0 h1:GS66YERAnRqPVjmFfZlPMDMpKshus/+3rYYZ0S+6pcA= -github.com/haukened/keybasebot v1.3.0/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg= -github.com/haukened/keybasebot v1.3.2 h1:0/sLWS45p5lGvcXlYSQHzSnarOwu+9OK9nAHtydR4/U= -github.com/haukened/keybasebot v1.3.2/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg= -github.com/haukened/keybasebot v1.3.3 h1:5oNmF7z51enSl/3bWt5ZryKJROitxSYXYosIRzJWDv4= -github.com/haukened/keybasebot v1.3.3/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg= -github.com/haukened/keybasebot v1.3.4 h1:8jl/HHDqrzx+6NiYXp6uQjmJDF7qOMH+tpw7oLYUqok= -github.com/haukened/keybasebot v1.3.4/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg= -github.com/haukened/keybasebot v1.3.5 h1:CSBI9B45d7Jo+IL1if5yYXbXVD1AQIenkpcLTA6oO1o= -github.com/haukened/keybasebot v1.3.5/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg= -github.com/haukened/keybasebot v1.3.6 h1:3f04Wc+wbi7PIPvdnSocO9y7sC2xE2vqJSlPOHCqluo= -github.com/haukened/keybasebot v1.3.6/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg= -github.com/haukened/keybasebot v1.3.7 h1:7gCinJPFktUXSN/NaXzH6lgr8lgk67SeF6uWl9QQh3s= -github.com/haukened/keybasebot v1.3.7/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jzelinskie/geddit v0.0.0-20200521013404-78c28c13fba2 h1:kiU2zluXsjQ0QmeG0n1zXMGf/7+Fb8+Pn0xzzIeIpGs= github.com/jzelinskie/geddit v0.0.0-20200521013404-78c28c13fba2/go.mod h1:KiUhpHWSO6xCSPYKhRXa1LDLtbxZKaFH4NINTP3Lm2Q= -github.com/kf5grd/keybasebot v1.2.0 h1:X/+dpP64G9mLLGEyZJ5oYK0l2yk8jDk1BVByxVKSo7M= -github.com/kf5grd/keybasebot v1.2.0/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg= -github.com/kf5grd/keybasebot v1.3.0 h1:XWr96H4UmZQnHrvR5whuVJxrrUkqrJm/puGnckyqLFc= -github.com/kf5grd/keybasebot v1.3.0/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg= -github.com/kf5grd/keybasebot v1.3.1-0.20210114174004-0f0b435f9f41 h1:EC0XypakLOr0Ob87vii0XFJURzSQJ0ICATzy+dLEdKk= -github.com/kf5grd/keybasebot v1.3.1-0.20210114174004-0f0b435f9f41/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg= -github.com/kf5grd/keybasebot v1.3.1-0.20210115152456-e9098b6373e7 h1:uUjyh919GupSHb8IyrsGk4yRjFKWNK9igW33pgO/a0Y= -github.com/kf5grd/keybasebot v1.3.1-0.20210115152456-e9098b6373e7/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg= -github.com/kf5grd/keybasebot v1.3.1-0.20210115153557-55a46e5206dc h1:vO5YkfgOxBLdpOLHewDBOcZdRolQLMJbh0aoQJIyiI4= -github.com/kf5grd/keybasebot v1.3.1-0.20210115153557-55a46e5206dc/go.mod h1:aLjlXVBN7JQuBkKfUK/VT6fgXY8Gt4TlnNZGd3iPQXg= -github.com/kf5grd/keybasebot v1.3.1-0.20210115215309-970123606dc4 h1:ONxFFsoV0AYMbpt5G1hCDh3ZWMGI82JLD80i4a2cwOQ= -github.com/kf5grd/keybasebot v1.3.1-0.20210115215309-970123606dc4/go.mod h1:8T07cWZZrl2G6hTRsL9x2SBwaH8gEZocF9NRknSU3dY= -github.com/kf5grd/keybasebot v1.3.1-0.20210115222331-9060677d0119 h1:t2INVIjxt/kq4AszGOYCl0LmHJnvU7f28UA+1ouimVA= -github.com/kf5grd/keybasebot v1.3.1-0.20210115222331-9060677d0119/go.mod h1:8T07cWZZrl2G6hTRsL9x2SBwaH8gEZocF9NRknSU3dY= github.com/kf5grd/keybasebot v1.4.1 h1:6VTcDnCiYWtEtxSOEFvKF5R7VwabR3pSEONWV81WS+Q= github.com/kf5grd/keybasebot v1.4.1/go.mod h1:8T07cWZZrl2G6hTRsL9x2SBwaH8gEZocF9NRknSU3dY= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= @@ -155,13 +128,17 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125 h1:3SNcvBmEPE1YlB1JpVZouslJpI3GBNoiqW7+wb0Rz7w= github.com/teris-io/shortid v0.0.0-20201117134242-e59966efd125/go.mod h1:M8agBzgqHIhgj7wEn9/0hJUZcrvt9VY+Ln+S1I5Mha0= +github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -327,6 +304,7 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -409,8 +387,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -421,7 +398,5 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -samhofi.us/x/keybase/v2 v2.0.6 h1:gLluTcyjbwckQxSarF1ig2klL4Li7O/THdxsgo1dUvw= -samhofi.us/x/keybase/v2 v2.0.6/go.mod h1:lJivwhzMSV+WUg+XUbatszStjjFVcuLGl+xcQpqQ5GQ= samhofi.us/x/keybase/v2 v2.0.8 h1:hmGZa8v1peHuWBvePI09EXh5vahxbDPqNAXtztLDQzM= samhofi.us/x/keybase/v2 v2.0.8/go.mod h1:lJivwhzMSV+WUg+XUbatszStjjFVcuLGl+xcQpqQ5GQ= diff --git a/main.go b/main.go index acd805e..7416f0d 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,7 @@ package main import ( - "fmt" + "log" "os" "os/signal" "syscall" @@ -11,29 +11,90 @@ import ( "github.com/kf5grd/keybasebot" "github.com/kf5grd/keybasebot/pkg/kvstore" + "github.com/urfave/cli/v2" "samhofi.us/x/keybase/v2" "samhofi.us/x/keybase/v2/types/chat1" ) +var version string + func main() { - opts := parseArgs(os.Args) - b := keybasebot.New("", keybase.SetHomePath(opts.HomePath)) - b.Debug = opts.Debug - b.JSON = opts.JSON + app := cli.NewApp() + app.Name = "ssh0le" + app.Version = version + app.HideVersion = false + app.Usage = "A general Keybase chat bot" + app.Writer = os.Stdout + app.HideVersion = false + + app.Flags = []cli.Flag{ + &cli.StringFlag{ + Name: "home", + Aliases: []string{"H"}, + Usage: "Keybase Home Folder", + }, + &cli.BoolFlag{ + Name: "debug", + Usage: "Enables debugging", + EnvVars: []string{"BOT_DEBUG"}, + }, + &cli.BoolFlag{ + Name: "json", + Usage: "Enables JSON logging", + EnvVars: []string{"BOT_LOG_JSON"}, + }, + &cli.StringFlag{ + Name: "log-convid", + Usage: "Set the Keybase log conversation id", + EnvVars: []string{"BOT_LOG_CONVID"}, + }, + &cli.StringFlag{ + Name: "reddit-user", + Usage: "Set the Reddit auth user", + EnvVars: []string{"BOT_REDDIT_USER"}, + }, + &cli.StringFlag{ + Name: "reddit-pass", + Usage: "Set the Reddit auth password", + EnvVars: []string{"BOT_REDDIT_PASS"}, + }, + &cli.StringFlag{ + Name: "owner", + Usage: "Set the Keybase username of the bot owner", + EnvVars: []string{"BOT_OWNER"}, + }, + &cli.StringFlag{ + Name: "kvstore-team", + Usage: "Set the kvstore team if you want to save configs", + EnvVars: []string{"BOT_KVSTORE_TEAM"}, + }, + } + + app.Action = run + + if err := app.Run(os.Args); err != nil { + log.Fatal(err) + } +} + +func run(c *cli.Context) error { + b := keybasebot.New("", keybase.SetHomePath(c.String("home"))) + b.Debug = c.Bool("debug") + b.JSON = c.Bool("json") b.LogWriter = os.Stdout - b.LogConv = chat1.ConvIDStr(opts.LogConvIDStr) + b.LogConv = chat1.ConvIDStr(c.String("log-convid")) // set the bot owner for private commands - if opts.Owner != "" { - b.Meta["owner"] = opts.Owner + if c.String("owner") != "" { + b.Meta["owner"] = c.String("owner") } - if opts.KvStoreTeam != "" { - b.Meta["kvstore"] = opts.KvStoreTeam + if c.String("kbstore-team") != "" { + b.Meta["kvstore"] = c.String("kvstore-team") loadNsfwAllowed(b) } // set reddit login, which enables reddit commands - if opts.RedditUser != "" && opts.RedditPass != "" { - b.Meta["reddit-user"] = opts.RedditUser - b.Meta["reddit-pass"] = opts.RedditPass + if c.String("reddit-user") != "" && c.String("reddit-pass") != "" { + b.Meta["reddit-user"] = c.String("reddit-user") + b.Meta["reddit-pass"] = c.String("reddit-user") } // register the bot commands @@ -86,7 +147,7 @@ func main() { }, ) // if there are reddit credentials add the reddit commands - if opts.RedditPass != "" && opts.RedditUser != "" { + if c.String("reddit-user") != "" && c.String("reddit-pass") != "" { b.Commands = append(b.Commands, keybasebot.BotCommand{ Name: "eyebleach", @@ -108,14 +169,13 @@ func main() { ), }, ) - fmt.Printf("%+v\n", opts) } // catch ctrl-c so we can clean up - c := make(chan os.Signal) - signal.Notify(c, os.Interrupt, syscall.SIGTERM) + ch := make(chan os.Signal) + signal.Notify(ch, os.Interrupt, syscall.SIGTERM) go func() { - <-c + <-ch b.Logger.Info("Caught SIGINT, cleaning up.") b.KB.ClearCommands() b.Logger.Info("Cleared command adverts. Bye.") @@ -124,6 +184,8 @@ func main() { }() // then run b.Run() + + return nil } func loadNsfwAllowed(b *keybasebot.Bot) { @@ -142,4 +204,4 @@ func loadNsfwAllowed(b *keybasebot.Bot) { b.Meta["nsfwAllowed"] = allowedTeams } return -} \ No newline at end of file +}