#!/usr/bin/rubyrequire "socket"#bara ren data$SAFE=1#En IRC Classclass IRC def initialize(server, port, nick, channel) @server = server @port = port @nick = nick @channel = channel end def send(s) #Skicka ett mess till irc servern och skriv det på skärmen puts "--> #{s}" @irc.send "#{s}\n", 0 end def connect() #anslut till servern @irc = TCPSocket.open(@server, @port) send "User Weaselbot :Mr Weasel" send "NICK #{@nick}" send "JOIN #{@channel}" end def evaluate(s) #se till att vi har ett giltigt uttryck och om vi har så använder vi det if s =~ /^[-+*\/\d\s\eE.()]*$/ then begin s.untaint return eval(s).to_s rescue Exception => detail puts detail.message() end end return "Error" end def handle_server_input(s) #case på saker som skickas från servern och vi svarar på dem case s.strip when /^PING :(.+)$/i puts "[ Server ping, answering with PONG ]" send "PONG :#{$1}" else puts s end end def main_loop() #ska köras tills vi disconnectar while true ready = select([@irc, $stdin], nil, nil, nil) next if !ready for s in ready[0] if s == $stdin then return if $stdin.eof s = $stdin.gets send s elsif s == @irc then return if @irc.eof s = @irc.gets handle_server_input(s) end end end endend#slut på klassen IRCirc = IRC.new('irc.freenode.net',6667,'weaseldrone','#le_test')irc.connect()begin irc.main_loop()rescue Interruptrescue Exception => detail puts detail.message() print detail.backtrace.join("\n") retryend