Review Board でレビューが届いたら IRC に通知して欲しい
参考&パクリ元
経緯
Review Board には通知の仕組みがメールしか無かったので、IRC でも流して欲しかった。
フィード吐いてればそれを IRC ボットに読ませるのだけれど多分ないと思う???
なのでニセメールサーバ立てて、メール着信のタイミングで IRC に接続、NOTICE 後、即死するような BOT を作った。
別に Review Board に限らずメール発信する系なら何でも出来るね。
ソース
# -*- coding: utf-8 -*- require 'rubygems' require 'net/irc' require 'pp' require 'smtpserver' require 'nkf' class ReviewReportBot < Net::IRC::Client def initialize(*args) super @mes = args[2][:mes] @ch = args[2][:ch] end def on_rpl_welcome(m) post JOIN, @ch notice @ch, @mes sleep(3) finish() end def notice(ch, msg) post NOTICE, ch, msg end end config = { :Port => 25, :ServerName => 'メールサーバ名', :RequestTimeout => 120, :LineLengthLimit => 1024 } config[:DataHook] = lambda do |mail, sender, recipients| mes = ''; url = ''; mail.split(/\r\n/).each{|line| if /^Subject: (.*)$/ =~ line subject = NKF::nkf('-wWm', $1) if /^(Re: )?Review Request: (.*)$/ =~ subject rep = !$1.nil? title = $2 if rep mes = "レビュー依頼が更新されました" else mes = "新しいレビュー依頼が届きました" end mes += ": #{title}" end elsif /^X-ReviewRequest-URL: (.*)$/ =~ line url = $1 end } bot = ReviewReportBot.new("IRC接続先", "ポート", { :nick => '_reviewbot_', :user => '_reviewbot_', :real => '_reviewbot_', :mes => "#{mes} <#{url}>", :ch => "#review" }).start end server = SMTPServer.new(config) [:INT, :TERM].each do |signal| Signal.trap(signal) { server.shutdown } end server.start