Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'socket'
- require 'functionality.rb'
- class IRCBot
- include Functionality
- def initialize a="irc.freenode.net", p=6667, n="ruBot", c
- @addr = a
- @port = p
- @nick = n
- @chan = c
- @usrs = {}
- @email = "email@address.com"
- @nickpass = "testing"
- end
- def connect
- @sock = TCPSocket.open(@addr, @port)
- send "NICK #{ @nick }"
- send "USER ruBot 0 * :Ruby Bot"
- send "JOIN #{ @chan }"
- self.identify_nick
- end
- def send s
- puts "--> #{ s }"
- @sock.puts s
- end
- def parse_server_request req
- case req.strip
- when /^PING :(.+)$/i
- puts ">>> SERVER PING"
- send "PONG :#{$1}"
- when /^:(.+)!.*\sPRIVMSG\s#{ @chan }\s:(.+)$/i #IRC Messages
- puts "#{$1}: #{$2}"
- user = $1
- if /^!([a-zA-Z0-9]+):\s(.+)$/i.match($2)
- puts "Received Method Call to: #{$1}, with args: #{$2}"
- arguments = $2.split("!,:")
- arguments.each { |arg| arg.strip! }
- self.__send__($1.to_sym, user, arguments )
- end
- when /^.*319\s.+\s(.+)\s:(?:.+\s)*(@|\+|~)?#{ @chan }.*$/i #IRC WHOIS Channel Section Reply
- puts "#{$1}, #{$2}"
- case $2
- when "@"
- @usrs[$1] = "o"
- when "~"
- @usrs[$1] = "o"
- when "+"
- @usrs[$1] = "v"
- else
- @usrs[$1] = "r"
- end
- when /^.*352.*\s(.+)\s(?:H|G)(r?)\*?(@|\+|~)*d?.*$/i #IRC WHO Reply
- case $3
- when "@"
- @usrs[$1] = "o"
- when "~"
- @usrs[$1] = "o"
- when "+"
- @usrs[$1] = "v"
- else
- @usrs[$1] = "r"
- end
- if $2 == "r" && (@usrs[$1] != "v" || @usrs[$1] != "o")
- send "MODE #{ @chan } +v #{ $1 }"
- end
- when /^:.*\s353\s.*\s(?:=|\*|@)\s#{ @chan }\s:(.+)$/i #IRC NAMES Reply
- users = $1.split(" ")
- users.each { |user|
- case user[0...1]
- when "@"
- @usrs[(user[1..-1])] = "o"
- when "~"
- @usrs[(user[1..-1])] = "o"
- when "+"
- @usrs[(user[1..-1])] = "v"
- else
- @usrs[(user)] = "r"
- end
- }
- when /^:(.+)!.*\sJOIN.*$/i
- puts ">>> USER #{ $1 } JOINED"
- send "WHO #{ $1 }"
- #send "MODE #{ @chan } +v #{ $1 }" #autovoice (unfiltered)
- when /^:(.+)!.*\sPART.*$/i #IRC PART Message
- puts ">>> USER #{ $1 } LEFT"
- @usrs.delete($1)
- when /^:(.+)!.*\sQUIT.*$/i #IRC QUIT Message
- puts ">>> USER #{ $1 } QUIT"
- @usrs.delete($1)
- when /^:.+!.*\sMODE\s#{ @chan }\s(\+|-)(o|v)\s(.+)$/i #IRC MODE Change
- send "WHOIS #{ $3 }"
- when /^:(.+)!.*\sNICK\s:(.+)$/i #IRC NICK Change
- puts ">>>NICK #{$1} --> #{$2}"
- @usrs[$2] = @usrs[$1]
- @usrs.delete($1)
- end
- end
- def enter_main_loop
- while true
- msg = select([@sock, $stdin], nil, nil, nil)
- next unless msg
- for s in msg[0]
- if s == $stdin
- return if $stdin.eof?
- s = $stdin.gets
- send "PRIVMSG #{ @chan } :#{ s }"
- elsif s == @sock
- return if @sock.eof?
- s = @sock.gets
- Thread.new {parse_server_request s}.join
- end
- end
- end
- end
- def close
- send "PART #{ @chan } :ruBot Session closed"
- send "QUIT"
- end
- end
- bot = IRCBot.new("irc.awesomeirc.net", 6667, "asQuirreL_", "#asqbotadmin")
- bot.connect
- begin
- bot.enter_main_loop
- rescue Interrupt
- rescue Exception
- retry
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement