require "socket" server = "irc.rizon.net" port = "6667" nick = "Ruby IRC Bot" channel = "#0x40" s = TCPSocket.open(server, port) s.print("USER Testing", 0) s.print("NICK #{nick}", 0) s.print("JOIN #{channel}", 0)
Этот бот IRC не подключается к IRC-серверу. Что я делаю не так?
Не удалось с этим сообщением:
:irc.shakeababy.net 461 * USER :Not enough parameters
так что измени свой код. Например, этот работает:
require "socket" server = "irc.rizon.net" port = "6667" nick = "Ruby IRC Bot" channel = "#0x40" s = TCPSocket.open(server, port) print("addr: ", s.addr.join(":"), "\n") print("peer: ", s.peeraddr.join(":"), "\n") s.puts "USER testing 0 * Testing" s.puts "NICK #{nick}" s.puts "JOIN #{channel}" s.puts "PRIVMSG #{channel} :Hello from IRB Bot" until s.eof? do msg = s.gets puts msg end
Подробнее о пользователе USER см. http://en.wikipedia.org/wiki/List_of_Internet_Relay_Chat_commands#USER
Вход "USER" формируется как:
"USER misc misc misc :misc\r\n"
Итак:
s.print("USER #{nick} #{nick} #{nick} :#{nick}\r\n", 0)
должно работать. Есть и другие способы сделать это, но это самый быстрый способ, которым я мог придумать.
Я написал крошечный IRC-каркас, который вы можете использовать (для справки): http://github.com/radar/summer.