grim/wasdead

13edf213332c
Parents de78b69bcb67
Children e3445e602139
Move to github.com/alecthomas/kong for command line parsing
  • +1 -9
    go.mod
  • +0 -29
    go.sum
  • +8 -76
    main.go
  • +78 -0
    run/run.go
  • --- a/go.mod Fri May 10 22:41:06 2019 -0500
    +++ b/go.mod Fri May 10 23:16:01 2019 -0500
    @@ -3,19 +3,11 @@
    go 1.12
    require (
    - github.com/alecthomas/kingpin v2.2.6+incompatible // indirect
    - github.com/alecthomas/kong v0.1.16 // indirect
    - github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc // indirect
    - github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf // indirect
    + github.com/alecthomas/kong v0.1.16
    github.com/bwmarrin/discordgo v0.19.0
    github.com/dustin/go-humanize v1.0.0
    - github.com/go-redis/redis v6.15.2+incompatible // indirect
    github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0
    github.com/nicklaw5/helix v0.5.1
    - github.com/nicksnyder/go-i18n v1.10.0 // indirect
    - github.com/onsi/ginkgo v1.8.0 // indirect
    - github.com/onsi/gomega v1.5.0 // indirect
    github.com/prologic/bitcask v0.1.6
    github.com/sirupsen/logrus v1.4.1
    - gopkg.in/alecthomas/kingpin.v3-unstable v3.0.0-20180810215634-df19058c872c
    )
    --- a/go.sum Fri May 10 22:41:06 2019 -0500
    +++ b/go.sum Fri May 10 23:16:01 2019 -0500
    @@ -1,13 +1,7 @@
    github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
    github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
    -github.com/alecthomas/kingpin v2.2.6+incompatible h1:5svnBTFgJjZvGKyYBtMB0+m5wvrbUHiqye8wRJMlnYI=
    -github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE=
    github.com/alecthomas/kong v0.1.16 h1:BheBKuvr6FE1unlZVdqkdZo/D/eDu90rrVIlpPbOdgw=
    github.com/alecthomas/kong v0.1.16/go.mod h1:0m2VYms8rH0qbCqVB2gvGHk74bqLIq0HXjCs5bNbNQU=
    -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU=
    -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
    -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY=
    -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
    github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
    github.com/bwmarrin/discordgo v0.19.0 h1:kMED/DB0NR1QhRcalb85w0Cu3Ep2OrGAqZH1R5awQiY=
    github.com/bwmarrin/discordgo v0.19.0/go.mod h1:O9S4p+ofTFwB02em7jkpkV8M3R0/PUVOwN61zSZ0r4Q=
    @@ -21,21 +15,15 @@
    github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
    github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
    github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
    -github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
    -github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
    github.com/gofrs/flock v0.7.1 h1:DP+LD/t0njgoPBvT5MJLeliUIVQR03hiKR6vezdwHlc=
    github.com/gofrs/flock v0.7.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
    github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=
    github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
    -github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
    -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
    github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
    github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
    github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
    github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
    github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
    -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
    -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
    github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0 h1:i462o439ZjprVSFSZLZxcsoAe592sZB1rci2Z8j4wdk=
    github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA=
    github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
    @@ -53,13 +41,6 @@
    github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
    github.com/nicklaw5/helix v0.5.1 h1:Z6y2RLlLtMljcsVw+q/A3x+1TS8qnFoj7ddnM69jnVk=
    github.com/nicklaw5/helix v0.5.1/go.mod h1:nRcok4VLg8ONQYW/iXBZ24wcfiJjTlDbhgk0ZatOrUY=
    -github.com/nicksnyder/go-i18n v1.10.0 h1:5AzlPKvXBH4qBzmZ09Ua9Gipyruv6uApMcrNZdo96+Q=
    -github.com/nicksnyder/go-i18n v1.10.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q=
    -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
    -github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w=
    -github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
    -github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo=
    -github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
    github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
    github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
    github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
    @@ -102,12 +83,9 @@
    golang.org/x/exp v0.0.0-20190321205749-f0864edee7f3/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
    golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
    golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
    -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
    golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=
    golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
    -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
    golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
    golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
    @@ -117,16 +95,9 @@
    golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
    golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
    golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
    -gopkg.in/alecthomas/kingpin.v3-unstable v3.0.0-20180810215634-df19058c872c h1:vTxShRUnK60yd8DZU+f95p1zSLj814+5CuEh7NjF2/Y=
    -gopkg.in/alecthomas/kingpin.v3-unstable v3.0.0-20180810215634-df19058c872c/go.mod h1:3HH7i1SgMqlzxCcBmUHW657sD4Kvv9sC3HpL3YukzwA=
    gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
    gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
    gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
    gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
    -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
    -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
    -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
    -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
    -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
    gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
    gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
    --- a/main.go Fri May 10 22:41:06 2019 -0500
    +++ b/main.go Fri May 10 23:16:01 2019 -0500
    @@ -1,91 +1,23 @@
    package main
    import (
    - "fmt"
    - "os"
    - "os/signal"
    - "syscall"
    - "time"
    + "github.com/alecthomas/kong"
    - log "github.com/sirupsen/logrus"
    - "gopkg.in/alecthomas/kingpin.v3-unstable"
    -
    - "bitbucket.org/TheToyz/nowdead/database"
    - "bitbucket.org/TheToyz/nowdead/discord"
    - "bitbucket.org/TheToyz/nowdead/presence"
    - "bitbucket.org/TheToyz/nowdead/twitch"
    + "bitbucket.org/TheToyz/nowdead/run"
    )
    const (
    version = "0.1.0"
    )
    -var (
    - app = kingpin.New("nowdead", "discord auto announce streaming bot").Version(version)
    - discordToken = app.Flag("discord-token", "The bot token for discord").Short('d').Envar("NOWDEAD_DISCORD_TOKEN").Required().String()
    - twitchClientID = app.Flag("twitch-client-id", "The client id").Short('t').Envar("NOWDEAD_TWITCH_CLIENT_ID").Required().String()
    -
    - startTime time.Time
    -)
    -
    -func init() {
    - log.SetOutput(os.Stdout)
    - log.SetLevel(log.DebugLevel)
    +type cli struct {
    + Run run.RunCmd `kong:"cmd,help='Run the bot'"`
    }
    func main() {
    - _, err := app.Parse(os.Args[1:])
    - if err != nil {
    - fmt.Printf("error: %v\n", err)
    - return
    - }
    -
    - if err := database.Open("db"); err != nil {
    - log.Errorf("failed to open database: %v", err)
    - return
    - }
    - defer database.Close()
    -
    - if len(*twitchClientID) > 0 {
    - provider, err := twitch.New(*twitchClientID)
    - if err != nil {
    - log.Panic(err)
    - }
    -
    - presence.AddProvider("twitch.tv", provider)
    - log.Info("Added twitch provider")
    - }
    -
    - // create our error channel that's used by the various clients
    - errChan := make(chan error, 1)
    + cli := cli{}
    + ctx := kong.Parse(&cli)
    - // create the discord client
    - dc, err := discord.New(*discordToken)
    - if err != nil {
    - fmt.Println("error creating Discord session,", err)
    - return
    - }
    - dc.Start(errChan)
    - defer dc.Shutdown()
    - log.Info("Connected to discord")
    -
    - // create a channel for handling unix signals
    - signalChan := make(chan os.Signal, 1)
    - signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM, os.Interrupt, os.Kill)
    -
    - // start the main loop
    - log.Info("Bot is now running. Press CTRL-C to exit.")
    - for {
    - select {
    - case err := <-errChan:
    - if err != nil {
    - log.Error(err)
    - return
    - }
    - case s := <-signalChan:
    - log.Infof("caught %s Exiting...", s)
    - return
    - }
    -
    - }
    + err := ctx.Run()
    + ctx.FatalIfErrorf(err)
    }
    --- /dev/null Thu Jan 01 00:00:00 1970 +0000
    +++ b/run/run.go Fri May 10 23:16:01 2019 -0500
    @@ -0,0 +1,78 @@
    +package run
    +
    +import (
    + "os"
    + "os/signal"
    + "syscall"
    + "time"
    +
    + log "github.com/sirupsen/logrus"
    +
    + "bitbucket.org/TheToyz/nowdead/database"
    + "bitbucket.org/TheToyz/nowdead/discord"
    + "bitbucket.org/TheToyz/nowdead/presence"
    + "bitbucket.org/TheToyz/nowdead/twitch"
    +)
    +
    +type RunCmd struct {
    + DiscordToken string `kong:"flag,name='discord-token',env='DISCORD_TOKEN',help='The bot token for discord',required"`
    + TwitchClientID string `kong:"flag,name='twitch-client-id',env='TWITCH_CLIENT_ID',help='The Twitch client ID',required"`
    +}
    +
    +var (
    + startTime time.Time
    +)
    +
    +func init() {
    + log.SetOutput(os.Stdout)
    + log.SetLevel(log.DebugLevel)
    +}
    +
    +func (r *RunCmd) Run() error {
    + if err := database.Open("db"); err != nil {
    + return err
    + }
    + defer database.Close()
    +
    + if len(r.TwitchClientID) > 0 {
    + provider, err := twitch.New(r.TwitchClientID)
    + if err != nil {
    + log.Panic(err)
    + }
    +
    + presence.AddProvider("twitch.tv", provider)
    + log.Info("Added twitch provider")
    + }
    +
    + // create our error channel that's used by the various clients
    + errChan := make(chan error, 1)
    +
    + // create the discord client
    + dc, err := discord.New(r.DiscordToken)
    + if err != nil {
    + return err
    + }
    + dc.Start(errChan)
    + defer dc.Shutdown()
    + log.Info("Connected to discord")
    +
    + // create a channel for handling unix signals
    + signalChan := make(chan os.Signal, 1)
    + signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM, os.Interrupt, os.Kill)
    +
    + // start the main loop
    + log.Info("Bot is now running. Press CTRL-C to exit.")
    + for {
    + select {
    + case err := <-errChan:
    + if err != nil {
    + return err
    + }
    + case s := <-signalChan:
    + log.Infof("caught %s Exiting...", s)
    + return nil
    + }
    + }
    +
    + return nil
    +}