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)
- みんな大好きな突然死のやつ(><)
- [github.com/kyokomi/nepu-bot/plugins/twitter](https://github.com/kyokomi/nepu-bot/tree/master/plugins/twitter)
- Twitter Search APIでネプテューヌの画像を適当に探す
---
# いまのところあるプラグイン(その3)
- [github.com/kyokomi/nepu-bot/plugins/nepubot](https://github.com/kyokomi/nepu-bot/tree/master/plugins/nepubot)
- [「 <会話>」]()で雑談する(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とか対応)
---
# おわり