robotオブジェクト - lua

:hear()

robot:hear(pattern, proc)

引数


:respond()

robot:respond(pattern, proc)

注意:LINEではメンションの概念がないためrobot:hearrobot:respond差はありません。

引数


:wait_message()

robot:wait_message()

動作例

コーヒー注文ボットを作成したとします。
コーヒー注文ボットは、コーヒーという言葉に反応してコーヒーの種別を聞くとします。
AさんBさんが入っているチャネルルームにコーヒー注文ボットを入れたとき、次のような動作になります。

Slackの場合

A: コーヒーくれ
ボット: ブレンドにしますかラテにしますか
-- robot:wait_message()でAさんの返事をまつ
B: ブレンドで
-- ここでボットは反応しないボットはAさんの返事をまっている
A: ラテで
-- robot:wait_message()がAさんの発言を返す
ボット: ラテですねかしこまりました

LINEの場合

A: コーヒーくれ
ボット: ブレンドにしますかラテにしますか
-- LINEでは発言者の識別ができないのでrobot:wait_message()は誰の発言だろうが拾ってしまう
B: ブレンドで
-- robot:wait_message()がBさんの発言を返す
ボット: ブレンドですねかしこまりました
A: ラテで
-- ボットの動作は完了しており後の祭り

:ask()

robot:ask(res, questions)

引数

型の種類

type パターン 返り値
text .* string
number \d+(\.\d*)? number(実数)
integer \d+ number(整数)
postal_code \d{3}-\d{4}|\d{7} string
year (\d{4})年? number
date (\d+)年(\d+)月(\d+)日|(\d+)/(\d+)/(\d+), 昨日, 今日, 明日 number(UNIX時間)
time (\d+)時(\d+)分|(\d+):(\d+) number (HHMMの4桁数字)
telephone \d+-\d+-\d+ string

dateについて

dateを指定した際の返り値は、発言内容のテキストの日付のUTCの0:00の時刻をUNIX時間を返します。
例えば、2016年1月31日という発言があった場合、UTCで2016/1/31 0:00のUNIX時間1454198400という値を返します。

現在のところタイムゾーンの設定がないため、今日昨日のような相対的な日付指定を行った場合、UTCで日付が判断されます。
このため、日本では午前9時以前に「今日」と発言しても、発言した時点の前日の日付と解釈されてしまいます。
ボットのタイムゾーンは将来的に制御可能になる予定です。

バリデーション関数

質問項目のvalidatorプロパティに関数を設定することで、独自のバリデーションを追加することができます。
validatorが呼ばれるタイミングは、発言がtypeのパターンにマッチするか確認された後です。

validatorは次のような形式です。

function my_validator(val) -- valは`type`ごとの返り値が渡される
    if val < 100 then
        -- invalidな場合resultプロパティにfalseをmessageプロパティにメッセージを設定してreturnする
        return { result = false, message = "too short" }
    else
        -- validな場合resutプロパティにtrueを設定してreturnする
        return { result = true }
    end
end

validatorresult=falseなテーブルを返したとき、ボットはmessageプロパティで設定した文字列を発言し、ユーザに対して再度同じ質問を聞き返します。

返り値


:log()

-- ログレベルを指定しないパターン
robot:log(message)

-- ログレベルを指定するパターン
robot:log(log_level, message)

引数

ログレベル

ログレベルは以下の6段階を使用可能です。

レベル 説明
log_level.fatal 致命的なエラー。プログラムの異常終了を伴うようなもの
log_level.error エラー。予期しないその他の実行時エラー
log_level.warn 警告。廃要素となったAPIの使用、APIの不適切な使用、エラーに近い事象など、実行時に生じた異常とは言い切れないが正常とも異なる何らかの予期しない問題
log_level.info 情報。実行時の何らかの注目すべき事象(開始や終了など)。コンソール等に即時出力することを想定
log_level.debug デバッグ用の情報。システムの動作状況に関する詳細な情報
log_level.trace トレース情報。更に詳細な情報

ログレベルの設計はlog4jのログレベルを踏襲しています。


.messageRoom()

robot.messageRoom(room, message)

引数


.newCronJob()

robot.newCronJob(cronTime, action, timeZone)

UNXのcronというスケジュール処理を行うツールをまねた機能です。
cronTimeで決められた時間にactionを繰り返し実行するよう設定します。

引数

注意事項

newCronJob()によって作られるcronジョブは、ボットのプロセスが終了するまで有効です。
プロセスは定期的に再起動してしまうので、cronジョブを永続的に有効にするためには、スクリプトのロード時にnewCronJob()が呼ばれるようにしておいてください。