マイクラマルチサーバーの入退室をSlackに通知する
もっと頑張ればLightweightになる気がしているんですが、妥協で運用しているのでなかなか手間がかかる方法になっています。
本記事の内容は非推奨とします。
新しく書いたこちらの記事をご参照ください。
sashimi4.hatenablog.com
どうも、おさしみです。 今回は、下記記事のおまけで、タイトルの通り、やっていきたいと思います。 sashimi4.hatenablog.com
※ 前回とは違い、もはやエンジニアでないと理解できない内容になっていると思います。 ご参考までに(強め)。
手順(ざっくり)
- Rubyをインストール
2.3を使用します。 私はanyenvからのrbenvでインストールしました。
# ruby -v ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
- Guard(Ruby gem)をインストール
$ gem install guard-rspec --no-ri --no-doc $ gem install guard-shell --no-ri --no-doc
と言った感じでインストールします。
- Guardfileを設置
マイクラのサーバーのログが溜まる場所と同ディレクトリに設置します。
$ cat Guardfile guard :shell do ll = '' watch(/latest.log/) {|m| # regexp joined|left|drown|slain ll = `tail -n 1 #{m[0]}` if ll.include?('joined') || ll.include?('left') message = ':white_check_mark: ' + ll.gsub(/(\r\n|\r|\n|\f)/,"") if ll.include?('joined') message = ':black_square_for_stop: ' + ll.gsub(/(\r\n|\r|\n|\f)/,"") if ll.include?('left') message = "[マイクラ鯖の通知だよ!] #{message}" channel = '#minecraft' username = 'Minecraft' icon = ':minecraft:' token = 'SLACK_INCOMING_WEBHOOK_TOKEN' cmd = %Q{curl -X POST --data-urlencode 'payload={"channel": \"#{channel}\", "username": \"#{username}\", "text": \"#{message}\", "icon_emoji": \"#{icon}\"}' https://hooks.slack.com/services/#{token}} `#{cmd}` unless message.nil? end } end
こんな感じのファイルを設置します。
SLACK_INCOMING_WEBHOOK_TOKEN
の部分は、ご自分のSlackチームでIncoming-Webhookを追加・設定し、トークンで置き換えてください。
- Guardを実行
$ guard -p -l 5
といった感じで実行します。 screenセッション上などで実行すると良いと思います。
以上で設定が完了するはずです。
結果
マイクラへjoin/leftすると、このように通知がされるはずです!
余談
Guardはファイルを監視し、差分を検知した時に任意のスクリプトを実行できます。 通常は、RSpecなどのテストを駆動するために用いるんですが…こういう使い方もできなくはないです。 まあこのためだけにRubyやらなにやらをセットアップするのは微妙ですね…。 CRONでもwatchでもなんでも良いんですけどね…。
はい、ざっくりですが、以上です。 何かあればコメントで。批判は頂けません><。