]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
ircbot: Delegate ERR_NOSUCHNICK and ERR_NOSUCHCHANNEL events to plugins
authorAlex Legler <a3li@gentoo.org>
Wed, 11 Nov 2009 21:37:07 +0000 (22:37 +0100)
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Mon, 21 Dec 2009 10:05:30 +0000 (11:05 +0100)
lib/rbot/ircbot.rb
lib/rbot/message.rb
lib/rbot/rfc2812.rb

index 6f7bed7de8e194c012d61fc1a58ed38dfec780ae..1e1106deaebcbfe103df0a522096e81a0a57814e 100644 (file)
@@ -757,6 +757,10 @@ class Bot
       m.users = data[:users]
       @plugins.delegate "names", m
     }
+    @client[:nosuchtarget] = proc { |data|
+      m = NoSuchTargetMessage.new(self, server, server, data[:target], data[:message])
+      @plugins.delegate "nosuchtarget", m
+    }
     @client[:error] = proc { |data|
       raise ServerError, data[:message]
     }
index 64c4b6bbd95e94aed368e5290cdfc44440078ac7..e0cb753c760363d7b99ae7ca381c378637001519 100644 (file)
@@ -661,6 +661,18 @@ module Irc
   class PartMessage < JoinMessage
   end
 
+  # class to handle ERR_NOSUCHNICK and ERR_NOSUCHCHANNEL
+  class NoSuchTargetMessage < BasicUserMessage
+    # the channel or nick that was not found
+    attr_reader :target
+
+    def initialize(bot, server, source, target, message='')
+      super(bot, server, source, target, message)
+
+      @target = target
+    end
+  end
+
   class UnknownMessage < BasicUserMessage
   end
 end
index ee0d08d605d40781c40b0e3e656d4d82a0a68e43..0b7e07868d9e7c438c8b9178a395df2482183e23 100644 (file)
@@ -1344,17 +1344,19 @@ module Irc
           data[:channel].url=data[:url].dup
           handle(:channel_url, data)
         when ERR_NOSUCHNICK
-          data[:nick] = argv[1]
-          if user = @server.get_user(data[:nick])
+          data[:target] = argv[1]
+          data[:message] = argv[2]
+          handle(:nosuchtarget, data)
+          if user = @server.get_user(data[:target])
             @server.delete_user(user)
           end
-          handle(:nosuchnick, data)
         when ERR_NOSUCHCHANNEL
-          data[:channel] = argv[1]
-          if channel = @server.get_channel(data[:channel])
+          data[:target] = argv[1]
+          data[:message] = argv[2]
+          handle(:nosuchtarget, data)
+          if channel = @server.get_channel(data[:target])
             @server.delete_channel(channel)
           end
-          handle(:nosuchchannel, data)
         else
           warning "Unknown message #{serverstring.inspect}"
           handle(:unknown, data)