]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
ircbot/rfc2812/message: Add banlist message handling
authorAlex Legler <a3li@gentoo.org>
Fri, 27 Nov 2009 12:35:36 +0000 (13:35 +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 1e1106deaebcbfe103df0a522096e81a0a57814e..3313fe8623350e1bdfe008f99ad8aa6398c6ee3b 100644 (file)
@@ -757,6 +757,11 @@ class Bot
       m.users = data[:users]
       @plugins.delegate "names", m
     }
+    @client[:banlist] = proc { |data|
+      m = BanlistMessage.new(self, server, server, data[:channel])
+      m.bans = data[:bans]
+      @plugins.delegate "banlist", m
+    }
     @client[:nosuchtarget] = proc { |data|
       m = NoSuchTargetMessage.new(self, server, server, data[:target], data[:message])
       @plugins.delegate "nosuchtarget", m
index e0cb753c760363d7b99ae7ca381c378637001519..c13e59c1673eafdd8f68394968e449d4947bf057 100644 (file)
@@ -605,6 +605,22 @@ module Irc
     end
   end
 
+  # class to manager Ban list replies
+  class BanlistMessage < BasicUserMessage
+    # the bans
+    attr_accessor :bans
+
+    def initialize(bot, server, source, target, message="")
+      super(bot, server, source, target, message)
+      @bans = []
+    end
+
+    def inspect
+      fields = ' bans=' << bans.inspect
+      super(fields)
+    end
+  end
+
   class QuitMessage < BasicUserMessage
     attr_accessor :was_on
     def initialize(bot, server, source, target, message="")
index 0b7e07868d9e7c438c8b9178a395df2482183e23..bbc91bdf67cb19efb5e653565d0822d21f3c22bd 100644 (file)
@@ -967,6 +967,9 @@ module Irc
       # This is used by some messages to build lists of users that
       # will be delegated when the ENDOF... message is received
       @tmpusers = []
+
+      # Same as above, just for bans
+      @tmpbans = []
     end
 
     # Clear the server and reset the user
@@ -1180,6 +1183,17 @@ module Irc
           data[:users] = @tmpusers
           handle(:names, data)
           @tmpusers = Array.new
+        when RPL_BANLIST
+          data[:channel] = @server.channel(argv[1])
+          data[:mask] = argv[2]
+          data[:by] = argv[3]
+          data[:at] = argv[4]
+          @tmpbans << data
+        when RPL_ENDOFBANLIST
+          data[:channel] = @server.channel(argv[1])
+          data[:bans] = @tmpbans
+          handle(:banlist, data)
+          @tmpbans = Array.new
         when RPL_LUSERCLIENT
           # ":There are <integer> users and <integer>
           # services on <integer> servers"