Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 17th, 2012  |  syntax: None  |  size: 1.10 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. require "socket"
  2.  
  3. class IRCBot
  4.   def initialize(options={})
  5.     @server, @port, @channel, @nick, @password = options[:server], options[:port] || 6667, options[:channel], options[:nick], options[:password]
  6.     @socket = TCPSocket.open(@server, @port)
  7.    
  8.     start
  9.   end
  10.  
  11.   def connect
  12.     ircsend("USER #{@nick} #{@nick} #{@nick} :#{@nick}")
  13.     ircsend("NICK #{@nick}")
  14.     #ircsend("NS ID #{@password}") if password?
  15.     ircsend("JOIN #{@channel}")
  16.   end
  17.  
  18.   def handle(s)
  19.     puts s
  20.  
  21.     case s
  22.       when /^PING\s(?<host>.+)/
  23.         ircsend("PONG #{host}")
  24.     end
  25.   end
  26.  
  27.   def ircsend(s)
  28.     @socket.print("#{s}\r\n")
  29.     puts "*** #{s}"
  30.   end
  31.  
  32.   def password?
  33.     @password
  34.   end
  35.  
  36.   def start
  37.     connect
  38.  
  39.     loop do
  40.       ready = IO.select([@socket], nil, nil, 10)
  41.       next unless ready
  42.      
  43.       ready.first.each do |s|
  44.         handle(@socket.gets.chomp) if @socket == s
  45.         return if @socket.eof?
  46.       end
  47.     end
  48.   end
  49. end
  50.  
  51. IRCBot.new(
  52.   server: "irc.freenode.net",
  53.   nick: "Jimmy`",
  54.   password: "watwat",
  55.   channel: "#craiggles"
  56. )