TwitterもMSNもIRCにまとめちゃう

TwitterMSNメッセンジャーをターミナルで使いたいなぁ->ターミナルで使えるチャットソフトといえばIRC->TwitterMSNメッセンジャーゲートウェイを使おう、というわけで色々試してみた。

この図のように

サーバはMac miniなので、tig.rbとかはlaunchdで動かすようにした。

tig.rb

tig.rb (twitter irc gareway) - 冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。 - subtech
これが一番大変だった。launchdで動かすと何故か動かない。
launchdだと$HOMEがnilになるのが原因っぽい。適当に修正する。

*** net-irc/examples/tig.rb.old     2008-07-17 23:28:02.000000000 +0900
--- net-irc/examples/tig.rb  2008-07-19 11:45:30.000000000 +0900
***************
*** 152,158 ****
                @groups     = {}
                @channels   = [] # joined channels (groups)
                @user_agent = "#{self.class}/#{server_version} (tig.rb)"
!               @config     = Pathname.new(ENV["HOME"]) + ".tig"
                @map        = nil
                load_config
        end
--- 152,159 ----
                @groups     = {}
                @channels   = [] # joined channels (groups)
                @user_agent = "#{self.class}/#{server_version} (tig.rb)"
!               @config     = Pathname.new(ENV["HOME"] || '~mzp') + ".tig"
                @map        = nil
                load_config
        end

あと、いくつかのIRCクライアントだと上手く接続できない。どうも改行コードが違うらしい。適当に修正する。

*** lib/net/irc/server.rb       2008-07-17 23:28:01.000000000 +0900
--- lib/net/irc/server.rb      2008-07-19 12:48:31.000000000 +0900
***************
*** 90,97 ****
                        on_connected
                        while l = @socket.gets
                                begin
                                       @log.debug "RECEIVE: #{l.chomp}"
!                                       m = Message.parse(l)
                                        next if on_message(m) === true
  
                                        name = "on_#{(COMMANDS[m.command.upcase] || m.command).downcase}"
--- 90,98 ----
                        on_connected
                        while l = @socket.gets
                                begin
                                        @log.debug "RECEIVE: #{l.chomp}"
!                                       m = Message.parse(l.chomp+"\r\n")
                                        next if on_message(m) === true
  
                                        name

あと、launchdの設定ファイルはこうなる。

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version='1.0'>
  <dict>
    <key>Label</key><string>tig</string>
    <key>ProgramArguments</key>
    <array>
      <string>/opt/local/bin/ruby</string>
      <string>/opt/net-irc/tig.rb</string>
      <string>--log=/var/log/tig</string>
      <string>--host=example.com</string>
    </array>
    <key>OnDemand</key><false/>
  </dict>
</plist>

BiltBee

おおむねindex.rb [nofuture.tv]に書いてある通りでいい。ただ、Macではxinetdは使わないので、launchdの設定で対応する。

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
   http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version='1.0'>
  <dict>
    <key>Label</key><string>BitlBee</string>
    <key>ProgramArguments</key>
    <array>
      <string>/opt/local/sbin/bitlbee</string>
    </array>
    <key>inetdCompatibility</key>
    <dict>
      <key>Wait</key><false />
    </dict>

    <key>Sockets</key>
    <dict>
      <key>Listeners</key>
      <dict>
	<key>SocNodeName</key>
	<string>example.com</string>
	<key>SockServiceName</key>
	<string>16650</string>
      </dict>
    </dict>
  </dict>
</plist>

Tiearra

Tiarra : Archiveに書いてある通り。Log::ChannelとLog::Recentを有効にするのがお勧め。
launchdのplistは次の通り。tiarraを置いてあるディレクトリが、作業ディレクトリになるようにする。

cat /Library/LaunchDaemons/tiarra.plist
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version='1.0'>
  <dict>
    <key>Label</key><string>tiarra</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/bin/perl</string>
      <string>/opt/tiarra/tiarra</string>
    </array>
    <key>OnDemand</key><false/>
    <key>WorkingDirectory</key><string>/opt/tiarra/</string>
    <key>StandardOutPath</key><string>/var/log/tiarra</string>
    <key>StandardErrorPath</key><string>/var/log/tiarra.error</string>
  </dict>
</plist>

クライアント

MacならConversationLinuxならxchatかircIIがお勧め。