aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristine Dodrill <me@christine.website>2017-08-20 16:55:59 -0700
committerChristine Dodrill <me@christine.website>2017-08-20 16:55:59 -0700
commit0bfd6bd21b65861874ac13c01cb2eb45f2f29816 (patch)
tree8dde220ea901369184be232a17b9fba2517959a1
parent3a960ff667b61ac28d95418d5895c956e579c4a8 (diff)
downloadx-0bfd6bd21b65861874ac13c01cb2eb45f2f29816.tar.xz
x-0bfd6bd21b65861874ac13c01cb2eb45f2f29816.zip
add splatoon 2 command
-rw-r--r--tg/covfefe/commands/spla2n.go104
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"`
+}