それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

IRCのログ集めにボット作った。

仕事場と教授とのやりとりに、IRCが活用されている。IRCは手軽で便利なのだけれど。

無線LANイーモバイルなど不安定な通信環境下だと、ログが流れてしまう。会話が途切れる。
大事な会話や、呼び出しに気づかなくて迷惑をかけるので、IRCのログ収拾し、OpenPNEのトピックに投げることにした。

IRCに常駐し発言を受信したらPNEに投げる。

irc_bot.rb
#!/usr/bin/env ruby
$KCODE = "u"
IRC_ENCODING='iso-2022-jp'

require 'rubygems'
require 'mechanize'
require 'net/irc'
require 'pp'
require 'kconv'

class EchoBot < Net::IRC::Client
	def initialize ( *args)
			super 
	end
    def post_to_pne message
        #IRCのポストをOpenPNEに投げる。
    	cli = WWW::Mechanize.new
    	cli.get('http://pne.example.com/')
    	form = cli.page.forms[0]
    	form.fields[0].value='takuyat@gmail'
    	form.fields[1].value='*****'
    	form.submit
        cli.get('http://pne.example.com/communityTopic/14') 
        form = cli.page.forms[1]
        form.fields[1].value= message
        form.submit
        cli.get('http://pne.example.com/member/logout')
    end
	def on_rpl_welcome(m)
			#WELCOMメッセージ受信後
			post JOIN , '#room-takuya'
	end
	def on_privmsg(m)
		post_to_pne m.prefix.split('!').first+":\t"+m[1].to_s.toutf8
	end
end

EchoBot.new ("irc.example.com","6667",{
		:nick => "sns_logger",
		:user => "sns_logger",
		:real => "log to sns"
}).start

起動

takuya@host: nohup ruby irc_bot.rb &

常駐にはdaemontool や screenを用いても良い。

今後の課題

  • PNEのトピックへのコメントの上限数は考慮してない。
  • OpenPNEのVer3.1にCommunityTopicプラグインを入れただけの状態で使っている。
  • ページ内のフォームの個数が変わると動作しない。