kinoppyd.dev

blog

products

accounts & contact

Mobbのマッチングにどれもヒットしなかった場合のフック

posted at 2018-12-20 17:02:18 +0900 by kinoppyd

このエントリは、 Mobb/Repp Advent Calendar の二十日目です

どれにもマッチしなかった

これは次のバージョンで実装される機能の話です。

Mobbはonキーワードでマッチングを登録し、サービスからの入力に対して一致チェックを行い、一致すればブロックを実行します。しかし、どこにもマッチしなかった入力は虚空に消えていきます。

Webフレームワークの場合、どこにもマッチしなかった場合には404が帰ります。そのため、404のページにはなにを表示するかといった設定ができます。しかし、チャットBotはWebのようにリクエストとレスポンスが対象的な世界ではないので、特にそういうものはありません。

しかしその一方で、どこにもマッチしなかった入力に対してなにか処理をしたいという需要はあると思います。それは、マッチングの対象ではない要素に対してなにかをしたい場合であったり(フィルタを使うという手もありますが)、すべての入力に対して一律なにか処理をしたりという場合です。

require 'mobb'

on 'Hi' do
  'Yo'
end

on_unregistered do
  # デバッグメッセージ
  puts "#{@env.body} は登録されているパターンにマッチしませんでした"
end

on_unregistered キーワードは、すべてのマッチング処理の最後にチェックされ、どこにも一致しているものがない場合は必ずこのブロックを実行するというものです。うえのbotでは、マッチングのデバッグを行うために、一致しなかったすべての処理を出力しています。