Help us understand the problem. What is going on with this article?

Hubotで「どのコマンドにも一致しない」ときの処理

More than 5 years have passed since last update.

この記事は Hubot Advent Calendar 2014 の17日目です.

Hubotで「どのコマンドにも一致しないときは雑談」というのをやりたかったので,実装してみました.
5日目の「Hubotでdocomo「雑談対話」APIを使う - “敬称”をHubotコマンドに | 半月記」をベースにしています.

コマンド一覧を取得

robot.helpCommands()でコマンドの一覧を取得できます.
ただしCommands:コメントから生成されてるので,説明なども含まれており,整形する必要があります.
また,全てのscriptでCommands:を書いておかないと,漏れが発生してしまいます.

cmds = []
for help in robot.helpCommands()
  cmd = help.split(' ')[1]
  cmds.push cmd if cmds.indexOf(cmd) is -1

これで,cmdsに重複なくコマンドの一覧を格納できます.
Hubococmdsを出力した結果は,こんな感じ.

[ 'anime',
  'date',
  'hello',
  'help',
  'member',
  'omikuzi',
  'semi',
  'thesis',
  'time',
  'version' ]

「どのコマンドにも一致しない」判定

実際にscriptを書く場合は,先程のcmdsを使って以下のように書きます.

robot.respond /(.+)$/i, (msg) ->
  cmd = msg.match[1].split(' ')[0]
  return unless cmds.indexOf(cmd) is -1

  # どのコマンドにも一致しない場合の処理

cmds取得の効率化

cmdsの取得処理をrobot.respondの下に書くと,チャットする度に実行されてしまいます.
そこで,module.exportsの下に書き,起動時に1回だけ実行するようにします.

ここで注意することは,このscriptを最後に読み込む,ということです.
読み込み途中で実行すると,そこまでのコマンドしか格納されません.
ファイル名をz_hogehoge.coffeeなどにして,最後に読み込まれるようにします.

雑談script

「どのコマンドにも一致しない場合は雑談する」scriptです.
docomoの雑談対話APIを使用しています.

参考記事に追加で,placenicknameを指定するようにしました.

まとめ

Hubotで「どのコマンドにも一致しない」処理の書き方でした.
今回は雑談をさせていますが,他にも色々出来るんじゃないかなと思います.

hiconyan
大手町でクラウドエンジニアしてます。うどん大学院 情報系出身。趣味は料理と映画、カメラ。
https://hiconyan.page/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした