Elixir製Hubot風BotフレームワークのHedwigでSlack Botを作る
Hubotに飽きたので、HedwigというElixir製のFWでbotを作ってみようと思い立ちました。
Hedwig
Adapter baseのHubotっぽいBotフレームワークです。Elixirです。
公式のAdapterでSlack対応してます。
Setup
mixでprojectを適当に作ります。supervisor (--sup
)つきで。
$ mix new hoge --sup $ cd hoge $ vi mix.exs # 以下の設定を記述 $ mix deps.get
mix.exs
ファイルの設定
... def applications do [applications: [:hedwig]] end ... defp deps do [{:hedwig, github: "hedwig-im/hedwig"}] end ...
Bot作成
以下のコマンドでインタラクティブにBotの設定ができます。AdapterとBot名を決めるだけです。
$ mix hedwig.gen.robot
lib/hoge.ex
内でsupervision treeにbotを登録します。
worker(Xxxx.Robot, [])
以上です。
Botの起動
mix run --no-halt
で起動できます。今回のbot名は Neko
にしてます。
❯ mix run --no-halt Compiling 2 files (.ex) Generated foobot app Hedwig Console - press Ctrl+C to exit. The console adapter is useful for quickly verifying how your bot will respond based on the current installed responders ### ここからコンソール shotat> Neko ping Neko> shotat: pong shotat> Neko help Neko> Neko help - Displays all of the help commands that Neko knows about. Neko help <query> - Displays all help commands that match <query>. Neko: ping - Responds with 'pong'
Responderの登録
ここからが本番です。pingとhelpだけできても意味がないので、諸々追加していきましょう。
以下のようなファイルを <app>/lib/responders/hello.ex
に作ります。
defmodule Foobot.Responders.Hello do # Foobotはアプリ名 @moduledoc false use Hedwig.Responder @greet [ "Hello", "ねむい", "にゃー" ] @usage """ hello """ hear ~r/hello/i, msg do send msg, random(@greet) end respond ~r/yo/i, msg do reply msg, random(@greet) end end
hear, respondでワードを拾って、send, replyで返事をします。それぞれメンションの有無で2パターンあります。9割くらいHubotと同じですね。
randomも最初から使えます。
あとは作ったresponderをconfigファイルに登録します。
config :foobot, Foobot.Robot, adapter: Hedwig.Adapters.Console, name: "Neko", aka: "cat", <= alias responders: [ {Hedwig.Responders.Help, []}, {Hedwig.Responders.Ping, []}, {Foobot.Responders.Hello, []} # <= new! ] ...
akaにbotの別名も登録できます。Neko a.k.a. cat。
もう一度動かす
こんな感じになります。
shotat> cat yo Neko> shotat: にゃー shotat> Hello Neko> Hello
Slackで動かす場合
Adapterを設定すればいけます。deps
mix.exs
に以下を設定
def application do [applications: [:hedwig_slack]] end def deps do [{:hedwig_slack, github: "hedwig-im/hedwig_slack"}] end
設定例
config :foobot, Foobot.Robot, adapter: Hedwig.Adapters.Slack, # <= adapterはSlack name: "shotat-machine", aka: "<@UXXXXXXX>", # <= debug logからuser id確認 token: "xxxxxxxxxxx", # <= tokenは適当に rooms: [], responders: [ {Hedwig.Responders.Help, []}, {Foobot.Responders.Hello, []}, {Hedwig.Responders.Ping, []} ]
これでslackで動きました。
注意点として、aka欄にuser idを設定しないとメンションに反応してくれません。 user idはdebugコンソールに出てくるので、それを設定しておきましょう(他に調べる方法もある気もしますが。。。)。
まとめ
Hubotに飽きたらHedwigに乗り換えましょう。楽しいElixir。
- 作者: Dave Thomas,笹田耕一,鳥井雪
- 出版社/メーカー: オーム社
- 発売日: 2016/08/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る