Go製の拡張可能なSlack bot

42a3fcdaaa492f3e1cf0fe7e6bbf4251?s=47 kyokomi
June 21, 2015

Go製の拡張可能なSlack bot

footer: @k_yokomi, 2015/06/21 「Go Conference 2015 summer」
slidenumbers: true

# Go製の拡張可能なSlack bot
### Go Conference 2015 summer

---

![right autoplay 300% mute icont19.png](https://qiita-image-store.s3.amazonaws.com/0/40887/42180ccd-23f8-cdb3-0dc2-531c9681dfc4.png)

# 自己紹介

- Twitter: @k_yokomi (きょこみ)[^※1]
- 仕事はGoでバックエンド書いてます
- 個人でCocos2d-xでゲーム作ったりもしてます(今年こそリリースする...)
- GoでWebサービス作ってリリースもしました([MeetApp](http://kyokomi.hatenablog.com/entry/2015/05/18/233657))

[^※1]: アイコンは月姫の琥珀さんです。([眠りの園](http://nemurinosono.jorougumo.com/index.html)様 提供)

---

# [https://github.com/kyokomi/slackbot](https://github.com/kyokomi/slackbot)

- SlackのWebSocket版(RTM)のbot
- もちろんGoで実装した
- [x/net/context]()ベースで機能拡張が簡単
- プラグインつくってmainでimportするだけでOK

---

# デモ

---

# 他にも作ったプラグインを紹介
## (デモで見せたものも混ざってます)

---

# いまのところあるプラグイン(その1)

- [github.com/kyokomi/slackbot/plugins/echo](github.com/kyokomi/slackbot/tree/master/plugins/echo)
- すべての会話をechoします
- [github.com/kyokomi/slackbot/plugins/cron](https://github.com/kyokomi/slackbot/tree/master/plugins/cron)
- cron形式でタスク設定できる( [cron add 30 * * * * * ふむ]() )
- [github.com/kyokomi/slackbot/plugins/lgtm](https://github.com/kyokomi/slackbot/tree/master/plugins/lgtm)
- LGTM画像をランダムで表示する

---

# いまのところあるプラグイン(その2)

- [github.com/kyokomi/slackbot/plugins/naruhodo](https://github.com/kyokomi/slackbot/tree/master/plugins/naruhodo)
- 「なるほど」キーワードに反応して「なるほどですぞ!」
- [github.com/kyokomi/slackbot/plugins/suddendeath](https://github.com/kyokomi/slackbot/tree/master/plugins/suddendeath)
- みんな大好きな突然死のやつ(> 」]()で雑談する(docomo雑談API)
- [「 おしえて 」]()で答えてくれる
(docomo知識Q&A API)
- [1/5くらいの確率]()で会話に強引に割り込んでくる
- [「 静かに」]()キーワードで5分黙る

---

# プラグイン開発しやすいように
## ツール作りました

---

# slackbotcmd

### インストール
### [go get github.com/kyokomi/slackbot/cmd/slackbotcmd]()
### 実行
### [$ slackbotcmd new ]()

---

![fit slackbotcmd_sample.png](https://qiita-image-store.s3.amazonaws.com/0/40887/58c9159b-f35a-3fc0-cdd5-331802ee0bca.png "slackbotcmd_sample.png")

---

## あとはTODO: のところを実装するだけ
## 簡単!!

![fit slackbotcmd_sample.png](https://qiita-image-store.s3.amazonaws.com/0/40887/58c9159b-f35a-3fc0-cdd5-331802ee0bca.png "slackbotcmd_sample.png")

---

![fit main_example.png](https://qiita-image-store.s3.amazonaws.com/0/40887/14ae482c-a3f8-5da4-2af6-6825d9cc171b.png "main_example.png")

---

## _ importしたらinit()が呼ばれて
## plugin追加される

![fit main_example.png](https://qiita-image-store.s3.amazonaws.com/0/40887/14ae482c-a3f8-5da4-2af6-6825d9cc171b.png "main_example.png")

---

# 開発で利用したライブラリ

- [github.com/nlopes/slack](https://github.com/nlopes/slack)
- slackライブラリ(公式ではないけどかなりサポートしてる)
- [github.com/robfig/cron](https://github.com/robfig/cron)
- cronライブラリ(StopとStartの制御は注意)
- [github.com/kyokomi/go-docomo/docomo](https://github.com/kyokomi/go-docomo/tree/master/docomo)
- docomoのAPIライブラリ(雑談、知識Q&Aとか対応)

---

# おわり

42a3fcdaaa492f3e1cf0fe7e6bbf4251?s=128

kyokomi

June 21, 2015
Tweet