Browse Source

Parse args with urfave/cli instead of flag

master
Sam Hofius 5 years ago
parent
commit
2ef9b5e6ef
  1. 69
      args.go
  2. 3
      go.mod
  3. 47
      go.sum
  4. 98
      main.go

69
args.go

@ -1,69 +0,0 @@ @@ -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
}

3
go.mod

@ -6,14 +6,13 @@ require ( @@ -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

47
go.sum

@ -41,14 +41,14 @@ github.com/andybalholm/cascadia v1.2.0 h1:vuRCkM5Ozh/BfmsaTm26kbjm0mIOM3yS5Ek/F5 @@ -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 @@ -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+ @@ -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 @@ -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 @@ -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 @@ -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 @@ -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=

98
main.go

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
package main
import (
"fmt"
"log"
"os"
"os/signal"
"syscall"
@ -11,29 +11,90 @@ import ( @@ -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() { @@ -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() { @@ -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() { @@ -124,6 +184,8 @@ func main() {
}()
// then run
b.Run()
return nil
}
func loadNsfwAllowed(b *keybasebot.Bot) {

Loading…
Cancel
Save