aboutsummaryrefslogtreecommitdiff
path: root/irc
diff options
context:
space:
mode:
authorChristine Dodrill <xena@yolo-swag.com>2015-08-20 08:34:15 -0700
committerChristine Dodrill <xena@yolo-swag.com>2015-08-20 08:34:15 -0700
commite95c6ff82eeac4d7e643eed9a67b0401826e392c (patch)
tree84655a8c44ac53e03501c6fdb1c7d372ad2786cc /irc
parent0379d786ddbe81ea9cb03a126a5ce560d516c4f9 (diff)
downloadx-e95c6ff82eeac4d7e643eed9a67b0401826e392c.tar.xz
x-e95c6ff82eeac4d7e643eed9a67b0401826e392c.zip
Add splatbot
Diffstat (limited to 'irc')
-rw-r--r--irc/splatbot/.gitignore1
-rw-r--r--irc/splatbot/doc.go4
-rw-r--r--irc/splatbot/handler.go53
-rw-r--r--irc/splatbot/main.go45
-rw-r--r--irc/splatbot/maps.go30
-rw-r--r--irc/splatbot/stage.go12
6 files changed, 145 insertions, 0 deletions
diff --git a/irc/splatbot/.gitignore b/irc/splatbot/.gitignore
new file mode 100644
index 0000000..d614448
--- /dev/null
+++ b/irc/splatbot/.gitignore
@@ -0,0 +1 @@
+splatbot
diff --git a/irc/splatbot/doc.go b/irc/splatbot/doc.go
new file mode 100644
index 0000000..99770f2
--- /dev/null
+++ b/irc/splatbot/doc.go
@@ -0,0 +1,4 @@
+/*
+Command splatbot is a simple IRC bot that lets you see the latest splatoon maps.
+*/
+package main
diff --git a/irc/splatbot/handler.go b/irc/splatbot/handler.go
new file mode 100644
index 0000000..51ff843
--- /dev/null
+++ b/irc/splatbot/handler.go
@@ -0,0 +1,53 @@
+package main
+
+import (
+ "encoding/json"
+ "io/ioutil"
+ "log"
+ "net/http"
+ "strings"
+
+ "github.com/belak/irc"
+)
+
+func handlePrivmsg(c *irc.Client, e *irc.Event) {
+ if strings.HasPrefix(e.Trailing(), "!splatoon") {
+ splatoonLookup(c, e)
+ }
+}
+
+func splatoonLookup(c *irc.Client, e *irc.Event) {
+ resp, err := http.Get(url)
+ if err != nil {
+ c.Reply(e, "Couldn't look up splatoon maps: %s", err.Error())
+ return
+ }
+
+ body, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ c.Reply(e, "Couldn't look up splatoon maps: %s", err.Error())
+ return
+ }
+
+ defer resp.Body.Close()
+
+ var sd []SplatoonData
+ err = json.Unmarshal(body, &sd)
+ if err != nil {
+ c.Reply(e, "Couldn't look up splatoon maps: %s", err.Error())
+ return
+ }
+
+ data := sd[0]
+
+ stage1 := data.Stages[0]
+ stage2 := data.Stages[1]
+ c.Reply(
+ e,
+ "From %s to %s, the stage rotation is %s and %s",
+ data.DatetimeTermBegin, data.DatetimeTermEnd,
+ englishIfy(stage1), englishIfy(stage2),
+ )
+
+ log.Printf("%s asked me to look up data", e.Identity.Nick)
+}
diff --git a/irc/splatbot/main.go b/irc/splatbot/main.go
new file mode 100644
index 0000000..442af6c
--- /dev/null
+++ b/irc/splatbot/main.go
@@ -0,0 +1,45 @@
+package main
+
+import (
+ "flag"
+ "fmt"
+
+ "github.com/belak/irc"
+)
+
+var (
+ nick = flag.String("nick", "Inkling", "Nickname to use")
+ user = flag.String("user", "xena", "Username to use")
+ channels = flag.String("channels", "#niichan", "Comma-separated list of channels to join")
+ server = flag.String("server", "irc.ponychat.net", "Server to connect to")
+ port = flag.Int("port", 6697, "port to connect to")
+ ssl = flag.Bool("ssl", true, "Use ssl?")
+)
+
+func init() {
+ flag.Parse()
+}
+
+func main() {
+ handler := irc.NewBasicMux()
+
+ client := irc.NewClient(irc.HandlerFunc(handler.HandleEvent), *nick, *user, "SplatBot by Xena", "")
+
+ handler.Event("001", func(c *irc.Client, e *irc.Event) {
+ c.Writef("MODE %s +B", c.CurrentNick())
+ c.Writef("JOIN %s", *channels)
+ })
+
+ handler.Event("PRIVMSG", handlePrivmsg)
+
+ var err error
+
+ if *ssl {
+ err = client.DialTLS(fmt.Sprintf("%s:%d", *server, *port), nil)
+ } else {
+ err = client.Dial(fmt.Sprintf("%s:%d", *server, *port))
+ }
+ if err != nil {
+ panic(err)
+ }
+}
diff --git a/irc/splatbot/maps.go b/irc/splatbot/maps.go
new file mode 100644
index 0000000..030a866
--- /dev/null
+++ b/irc/splatbot/maps.go
@@ -0,0 +1,30 @@
+package main
+
+import "fmt"
+
+const url = "https://s3-ap-northeast-1.amazonaws.com/splatoon-data.nintendo.net/stages_info.json"
+
+var mapNames map[string]string
+
+func init() {
+ mapNames = map[string]string{
+ "eefffc33ee1956b7b70e250d5835aa67be9152d42bc76aa8874987ebdfc19944": "Urchin Underpass",
+ "b8067d2839476ec39072e371b4c59fa85454cdb618515af080ca6080772f3264": "Port Mackerel",
+ "50c01bca5b3117f4f7893df86d2e2d95435dbb1aae1da6831b8e74838859bc7d": "Saltspray Rig",
+ "9a1736540c3fde7e409cb9c7e333441157d88dfe8ce92bc6aafcb9f79c56cb3d": "Blackbelly Skatepark",
+ "d7bf0ca4466e980f994ef7b32faeb71d80611a28c5b9feef84a00e3c4c9d7bc1": "Walleye Warehouse",
+ "8c69b7c9a81369b5cfd22adbf41c13a8df01969ff3d0e531a8bcb042156bc549": "Arowana Mall",
+ "1ac0981d03c18576d9517f40461b66a472168a8f14f6a8714142af9805df7b8c": "Bluefin Depot",
+ "c52a7ab7202a576ee18d94be687d97190e90fdcc25fc4b1591c1a8e0c1c299a5": "Kelp Dome",
+ "6a6c3a958712adedcceb34f719e220ab0d840d8753e5f51b089d363bd1763c91": "Moray Towers",
+ }
+}
+
+func englishIfy(s *Stage) string {
+ name, ok := mapNames[s.ID]
+ if !ok {
+ return fmt.Sprintf("Please tell Xena the name of stage id \"%s\" with jpn name %s", s.ID, s.Name)
+ }
+
+ return name
+}
diff --git a/irc/splatbot/stage.go b/irc/splatbot/stage.go
new file mode 100644
index 0000000..9898f53
--- /dev/null
+++ b/irc/splatbot/stage.go
@@ -0,0 +1,12 @@
+package main
+
+type SplatoonData struct {
+ DatetimeTermBegin string `json:"datetime_term_begin"`
+ DatetimeTermEnd string `json:"datetime_term_end"`
+ Stages []*Stage `json:"stages"`
+}
+
+type Stage struct {
+ ID string `json:"id"`
+ Name string `json:"name"`
+}