IRCSocket という gem があったので試してみた。
gem install irc-socket
IRC の仕様は RFC を見ながら理解していく。
RFC1459 Internet Relay Chat Protocol
rom_irc.rb
require 'irc-socket'
server, port, nick, user = ARGV
irc = IRCSocket.new( server, port )
irc.connect
if irc.connected?
irc.pass "hoge" # need to send PASS before you send NICK/USER
irc.nick nick
irc.user user, 0, "*", "Mr.${user}"
irc.join "#hoge"
while line=irc.read
puts line
end
end
IRCSocket のドキュメントにある例では PASS の送信が端折られているが、これが無いと接続を切られる。
ひとまず、上記のプログラムで、チャンネル #hoge のログが出るようになる。
ruby rom_irc.rb irc.example.com 6667 yancya yancya
しかし、このままだと、NICK や USER や JOIN に対するエラーリプライへの対応が全く出来ていない。
例えば、設定しようとしたニックネームがすでに使われている場合などにはそのまま接続が切れる。
あと、サーバーから PING メッセージが来たときに、速やかに PONG メッセージを返さないと接続を切られるので、対応が必要。