mixi engineer blog

*** 引っ越しました。最新の情報はこちら → https://medium.com/mixi-developers *** ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

Find Job !事業部で活躍しているIRCボット(Robotaro_DX)のソースコードを公開しちゃうよ!

こんにちは、求人情報サイト Find Job !の開発を担当しているmasutaroです。

今日は、前回のエントリ「IRCのボットで職場(Find Job !事業部)を楽しく便利に!」でお話していたとおり、Robotaro_DXのソースを晒したいと思います。公開が遅くなった理由は、僕が無精者だからではなく、ソースをさらすのが怖かったからでもありません。みなさんをじらすためです(汗)(汗)(汗);-)

それでは早速ですが、使い方の説明をしたいと思います。こちらからソースコードをダウンロードしてください。

ファイル構成

ダウンロードしたファイルを解凍すると、以下のようなファイル構成になっていると思います。

解凍したディレクトリ 
│ 
├─ robotaro_irc.pl 
│ 
├─ config.yml 
│ 
└─ lib ─ Robotaro ┬─ Hotpepeer.pm 
                     │ 
                     └─ Wheather.pm

・robotaro_irc.pl メインの処理を記述したファイルです。

・config.yml
ボットの接続情報やつぶやく時間、言葉を定義するファイルです。YAMLで書いてあります。

・lib下のモジュールファイル 外部APIを使ってつぶやく処理は一部モジュールに分けて書いています。

実行の準備作業

さて、さっそく実行!といきたいところなのですが、皆さんの環境に合わせて設定ファイルを少し書き換えていただかなくてはなりません。下記の説明のとおりconfig.ymlを書き換えてください。 config.yml の書き換え作業 ボットに関する設定は、以下のような書き方でconfig.ymlに定義されています。

nickname: Robotaro_DX 
server: **** 
password: **** 
port: 6667 
master: **** 
join_channel: #channel1,#channel2,#****,#**** 
task: 
    schedule1: 
        channel: #channel1,#channel2 
        type: string 
        when: 
            hour: 10 
            min: 0 
            sec: 0 
        action: Robotaro_DX起動... 
・ 
・ 
・ 
(以下、scheduleNの設定が続く)

YAMLの設定の意味は以下のとおりです。参考にしながら、各項目を設定していってください。まずは、青字の項目だけ設定すればOKです。

■ 基本設定部(1 〜 6行目まで)

・server:ご利用のIRCサーバ名
・password:パスワード
・port:ポート番号。通常はデフォルトの6667のままでOK
・master:管理者のnickname。
・join_channel:ボットが接続するチャンネル。コンマ区切りで複数指定が可能です。

■ タスク設定部(7行目以降) ・scheduleN:scheduleN (Nは任意の一意の番号)という名前で、スケジュールを設定していきます。 ・channel:つぶやくチャンネルを指定。コンマ区切りで複数指定が可能です。 ・type:"string" か "function" を指定。 ・hour:時間(0-23で指定) ・min:分(0-59で指定) ・sec:秒(0-59で指定) ・wday:曜日(0-6で指定。0が日曜日。省略可能で、省略した場合は毎日実行) ・action:typeで指定したのがstringなら値を文字列としてつぶやきます。functionだったら、値で指定した名前の関数を呼び出します。デフォルトではuranaiとforecastが指定可能です。

Robotaro_DX起動...!!

さて、これでボットを起動するための準備が整いました。robotaro_irc.plを実行してみてください。問題なく起動できるでしょうか?

デフォルトの設定ですと、

・毎日10:00に、#channel1 と #channel2 に「Robotaro_DX起動...」とつぶやく。
・毎日10:05に、#channel1 で占いカウントダウンをする。
・毎日13:00に、#channel1 に「そろそろお昼にしませんか?」とつぶやく。
・毎日18:00に、#channel1 に翌日の天気予報をつぶやく。
・毎日18:15に、#channel1 に「そろそろブラインドを閉めてもらっていいですか?」とつぶやく。
・水曜日の18:30に、#channel1 に「今日はノー残業デーやで。日報書いてや。」とつぶやく。

をするようになっています。上述の設定ファイルの仕様に従って、時間などの指定をいじって遊んでみてください。

つぶやく以外の機能

ボットの起動ができるようになったところで、実はまだ紹介する機能があります。グルメ検索と腹話術の機能です。

グルメ検索
ボットが常駐しているチャンネルにおいて、"@robotaro キーワード(キーワードは半角スペース区切りで複数指定可能)"で発言すると、ボットがHotpepper検索をして渋谷界隈の飲食店を1件ランダム抽出して返してくれます。ランチに行く前などにお使いください。お昼に行くにはちょっと微妙な店がヒットしたりしますが、ノリと勢いで行ってみるのもいいかもしれません。

腹話術(裏技)
緊急(?)の際に、ボットにプライベートで"チャンネル名:しゃべらせたい内容"で話しかけると、指定したチャンネルに対して、指定した文言でボットが発言します。無機質に発言を繰り返すボットに突然人間らしいことをしゃべらせて、周りをあっと言わせてやりましょう。

※ちなみにこの腹話術機能は、設定ファイル(config.yml)のmasterで設定されたnicknameの人にしか反応しないようになっています。ご注意ください。

おわりに

これでボットの使い方の説明は終わりです。次にソースコードの解説にうつり・・と行きたいところですが、ボットの仕組みはダウンロードしたファイルから直接ご覧ください。皆さんに読んでいただきやすいように、コメントを入れつつできるだけ丁寧に書いたつもりです。 ボットを高機能化させたり、他のAPIを使って拡張したりして、ぜひ遊んでみてください:-) ライセンスはGNU Lesser General Public Licenseに基づきます。

利用API 一覧

ボットの機能を開発するにあたって、利用したAPIの一覧です。

・占い:Web ad Fortune (paperboy&co.様 ご提供)
・グルメ検索:ホットペッパー (リクルートWEBサービス様 ご提供)
・天気予報:お天気Webサービス (ライブドア様 ご提供)