diff options
| author | Christine Dodrill <me@christine.website> | 2017-08-20 16:55:59 -0700 |
|---|---|---|
| committer | Christine Dodrill <me@christine.website> | 2017-08-20 16:55:59 -0700 |
| commit | 0bfd6bd21b65861874ac13c01cb2eb45f2f29816 (patch) | |
| tree | 8dde220ea901369184be232a17b9fba2517959a1 | |
| parent | 3a960ff667b61ac28d95418d5895c956e579c4a8 (diff) | |
| download | x-0bfd6bd21b65861874ac13c01cb2eb45f2f29816.tar.xz x-0bfd6bd21b65861874ac13c01cb2eb45f2f29816.zip | |
add splatoon 2 command
| -rw-r--r-- | tg/covfefe/commands/spla2n.go | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/tg/covfefe/commands/spla2n.go b/tg/covfefe/commands/spla2n.go new file mode 100644 index 0000000..19c1d56 --- /dev/null +++ b/tg/covfefe/commands/spla2n.go @@ -0,0 +1,104 @@ +package commands + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "strings" + "time" + + "github.com/syfaro/finch" + "gopkg.in/telegram-bot-api.v4" +) + +func init() { + finch.RegisterCommand(&splattusCommand{}) +} + +type splattusCommand struct { + finch.CommandBase +} + +func (cmd *splattusCommand) Help() finch.Help { + return finch.Help{ + Name: "Splattus", + Description: "Displays splatoon 2 status", + Example: "/splattus@@", + Botfather: [][]string{ + []string{"splattus", "Splatoon 2 map rotations"}, + }, + } +} + +func (cmd *splattusCommand) ShouldExecute(message tgbotapi.Message) bool { + return finch.SimpleCommand("splattus", message.Text) +} + +func (cmd *splattusCommand) Execute(message tgbotapi.Message) error { + resp, err := http.Get("https://splatoon.ink/schedule2") + if err != nil { + panic(err) + } + + st := &splattus{} + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + panic(err) + } + + json.Unmarshal(body, st) + + modeInfo := []string{st.Modes.Regular[0].String(), st.Modes.Gachi[0].String(), st.Modes.League[0].String()} + text := strings.Join(modeInfo, "\n") + + msg := tgbotapi.NewMessage(message.Chat.ID, text) + + return cmd.Finch.SendMessage(msg) +} + +type splatoonMode struct { + StartTime int64 `json:"startTime"` + EndTime int64 `json:"endTime"` + Maps []string `json:"maps"` + Rule splatoonRule `json:"rule"` + Mode splatoonGameMode `json:"mode"` +} + +func (sm splatoonMode) String() string { + maps := strings.Join(sm.Maps, ", ") + end := time.Unix(sm.EndTime, 0) + now := time.Now() + diff := end.Sub(now) + + return fmt.Sprintf("**%s**:\n**Rotation ends at %s** (in %s)\n**Maps**: %s\nRule: %s\n", sm.Mode, end.Format(time.RFC3339), diff, maps, sm.Rule) +} + +type splatoonGameMode struct { + Key string `json:"key"` + Name string `json:"name"` +} + +func (sgm splatoonGameMode) String() string { + return sgm.Name +} + +type splatoonRule struct { + Key string `json:"key"` + MultilineName string `json:"multiline_name"` + Name string `json:"name"` +} + +func (sr splatoonRule) String() string { + return sr.Name +} + +type splattus struct { + UpdateTime int64 `json:"updateTime"` + Modes struct { + League []splatoonMode `json:"league"` + Regular []splatoonMode `json:"regular"` + Gachi []splatoonMode `json:"gachi"` + } `json:"modes"` +} |
