]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
New IRC Framework: bot now keeps track of his nick correctly across disconnects
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Tue, 20 Feb 2007 08:46:00 +0000 (08:46 +0000)
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Tue, 20 Feb 2007 08:46:00 +0000 (08:46 +0000)
lib/rbot/ircbot.rb
lib/rbot/rfc2812.rb

index bc6cf76093b08b29369e5d09d431a61519618ea8..57dd892794e97abcb71a368540f94a3204347577 100644 (file)
@@ -534,6 +534,8 @@ class Bot
       @last_ping = nil
     }
     @client[:nick] = proc {|data|
+      # debug "Message source is #{data[:source].inspect}"
+      # debug "Bot is #{myself.inspect}"
       source = data[:source]
       old = data[:oldnick]
       new = data[:newnick]
@@ -753,18 +755,13 @@ class Bot
         exit 2
       end
 
-      stop_server_pings
-      server.clear
-      if @socket.connected?
-        @socket.clearq
-        @socket.shutdown
-      end
+      disconnect
 
-      log "disconnected"
+      log "\n\nDisconnected\n\n"
 
       quit if $interrupted > 0
 
-      log "waiting to reconnect"
+      log "\n\nWaiting to reconnect\n\n"
       sleep @config['server.reconnect_wait']
     end
   end
@@ -961,6 +958,26 @@ class Bot
     sendq "TOPIC #{where} :#{topic}", where, 2
   end
 
+  def disconnect(message = nil)
+    message = @lang.get("quit") if (message.nil? || message.empty?)
+    if @socket.connected?
+      debug "Clearing socket"
+      @socket.clearq
+      debug "Sending quit message"
+      @socket.emergency_puts "QUIT :#{message}"
+      debug "Flushing socket"
+      @socket.flush
+      debug "Shutting down socket"
+      @socket.shutdown
+    end
+    debug "Logging quits"
+    server.channels.each { |ch|
+      irclog "@ quit (#{message})", ch
+    }
+    stop_server_pings
+    @client.reset
+  end
+
   # disconnect from the server and cleanup all plugins and modules
   def shutdown(message = nil)
     @quit_mutex.synchronize do
@@ -973,21 +990,7 @@ class Bot
       # rescue => e
       #   debug "failed to restore signals: #{e.inspect}\nProbably running on windows?"
       # end
-      message = @lang.get("quit") if (message.nil? || message.empty?)
-      if @socket.connected?
-        debug "Clearing socket"
-        @socket.clearq
-        debug "Sending quit message"
-        @socket.emergency_puts "QUIT :#{message}"
-        debug "Flushing socket"
-        @socket.flush
-        debug "Shutting down socket"
-        @socket.shutdown
-      end
-      debug "Logging quits"
-      server.channels.each { |ch|
-        irclog "@ quit (#{message})", ch
-      }
+      disconnect
       debug "Saving"
       save
       debug "Cleaning up"
index 1a5adb846edf3419487d21489ed55fd0bcc6c3e0..5dec464c1525013d0908f19619c31ed28ecaeeb2 100644 (file)
@@ -821,7 +821,7 @@ module Irc
     # create a new Client instance
     def initialize
       @server = Server.new         # The Server
-      @user = @server.user("")   # The User representing the client on this Server
+      @user = @server.user("")     # The User representing the client on this Server
 
       @handlers = Hash.new
 
@@ -830,6 +830,12 @@ module Irc
       @tmpusers = []
     end
 
+    # clear the server and reset the User
+    def reset
+      @server.clear
+      @user = @server.user("")
+    end
+
     # key::   server event to handle
     # value:: proc object called when event occurs
     # set a handler for a server event