こんにちは、ムックです。

BOTといえば、node.jsのHubotのようなbotフレームワークがありますが、今回は、Go言語のIRC-BOTライブラリを使って以下の機能を持つIRC-BOTを実装したいと思います。

  • 順番を決めるようなダイス機能
  • メンバーの中からランダムで一人選ぶ機能
  • MTG、提出物などのリマインダ機能

IRC-BOT
http://waterpigs.co.uk/articles/a-simple-go-irc-bot/

時刻処理
https://godoc.org/github.com/robfig/cron

ライブラリを利用させてもらいました。

IRC-BOTの生成

まずは、IRC-BOTの生成

1行目、ニックネーム、名前の指定。
2,3行目、SSL接続を利用する場合はUseTLSをtrueに、configに任意の設定をします。
4行目、パスワードを指定。
最後に、Connectでホスト名、ポートを指定でします。

続きを読む

コールバック処理

AddCallbackで、トリガーとなるメッセージと第二引数に実行される関数を記述します。
上記では、RPL_WELCOMEを受け取ったらJOIN処理を行っています。

irc.Eventは以下の様な構造になります。

Welcomeメッセージ

e *irc.Eventを使って、ニックネームを取得しています。
4-6行目は入室しているメンバーを保持しておくものです。

順番を決めるようなダイス機能

ものすごくシンプルです。
AddCallbackでPRIVMSGを受け取り、特定文字列”:dice”だった場合ランダムで0-99の数を返します。
プレゼン発表の順番やなにかの当番の順番など決めたりできます。

メンバーの中からランダムで一人選ぶ機能

入室時に保持したメンバーのマップからランダムで1人選びます。
Go言語のマップはアクセスするたびに取り出す順番が変わりますが偏りがあるためここでもrandを使います。
こちらは、メンバーの中から1人決めたいとき、議事録当番なんかを決めたりできます。

MTG、提出物などのリマインダ機能

cronライブラリで実行時刻を設定しNotice通知させます。
cronライブラリはとても良く出来ていて標準のcron表記も出来ますが
毎n時n分、毎月などは”@hourly”、”@every 1h30m”のような指定も出来ます。

出力結果

1人botと戯れる…。
irc-bot

終わりに

ただGo言語を使いたい!と練習がてら書いてみました。
業務では、ほぼ100%PHPなのですが時間を見つけてGo言語も使っていきたいです。
Goルーチンを使った並列処理を使ってなにか作りたいです。

あわせて読みたい記事