hubot-osietekunというhubot scriptを作った。

https://www.npmjs.com/package/hubot-osietekun
https://github.com/shokai/hubot-osietekun

誰に質問するべきか教えてくれる。
新参者に便利だし、他にもchat roomが複数あって見通せない時に誰が詳しいのか探せるので便利そう。


教えて

「hubot 教えて 単語」 で誰が詳しいか教えてくれる。



インストール


npm install hubot-osietekun -save

あとは普通にexternal-script.jsonに書けば読み込まれる。
外部サービスを一切使ってなくて、hubot内だけで完結してる。


実装

hubotが発言を全部kuromojiにかけて誰がどの名詞を使ったかカウントしてる。

形態素解析器kuromojiがnpmで提供されていたので使った。npmの中に辞書も入っていてrequireすればすぐ使えるのがすばらしい。おかげでherokuとかにも簡単にデプロイできる。

ただ一箇所npmjs.orgのドキュメントが間違ってて、build(function(tokenizer){ ~~ })じゃなくてbuild(function(err, tokenizer){ ~~ })だった所でちょっと詰まった。

複数単語のスコアの計算

単純に掛け算している。

複数の単語について質問した場合、例えばreactについて
shokai 5
nikezono 10
zakuni 0

で、coffeeについて
shokai 5
nikezono 2
zakuni 10

という回数だけ発言していた場合、「react coffee」については
shokai 25
nikezono 20
zakuni 0

になるので、それぞれの単語についてバランスよく言及している人のスコアが上がる。どれかがゼロ回の人は0になる。


教えます

しばらく使っていたら、教えたいという人がいたので「hubot 教えます (名詞)」で登録できるようにした。


教えたいと言った人は詳しい人のついでに推薦される。

Javaについて質問したら、keroxpが教えたいと言っていた。


拡張


教えて君の機能を拡張できる。

レスポンスの拡張


Gyazz(増井先生の作ったWiKi)のページを推薦している。これは教えて君の機能には含まれていない。hubot側で教えて君を拡張している。



“osietekun:ready”イベントの後で”response”イベントを登録しておくと拡張できる。
こんな感じ
robot.on 'osietekun:ready', (osietekun) ->

osietekun.on 'response', (msg, res) ->
if res.masters.length < 1
for word in res.words
msg.send "#{word}については http://your-great-wiki-site.com/#{word} を見るといいかも"

scripts/osietekun-gyazz.coffeeの中で書いてて、ページが存在するかとか色々チェックしてからレスポンス返してるので長くなってるけどまあこんな感じ


「教えます」の拡張

他にも、「教えます」も拡張できる。WiKiにページが無い時に書くことを依頼したりできる。


robot.on 'osietekun:ready', (osietekun) ->

osietekun.on 'register:teacher', (msg, query) ->
msg.send "http://your-great-wiki-site.com/#{query.word} に書いてもいいんだよ"