]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - lib/rbot/irc.rb
+ support channel URL and creation time
[user/henk/code/ruby/rbot.git] / lib / rbot / irc.rb
index 72579b1967ce6c07b442c5ab559391940cb84d39..23bd9e0da2b922df16ea8b3fdb5104da321fab1e 100644 (file)
@@ -493,8 +493,8 @@ class Regexp
   HEX_DIGITS = /#{HEX_DIGIT}+/
   HEX_OCTET = /#{HEX_DIGIT}#{HEX_DIGIT}?/
   DEC_OCTET = /[01]?\d?\d|2[0-4]\d|25[0-5]/
-  DEC_IP_ADDR = /#{DEC_OCTET}.#{DEC_OCTET}.#{DEC_OCTET}.#{DEC_OCTET}/
-  HEX_IP_ADDR = /#{HEX_OCTET}.#{HEX_OCTET}.#{HEX_OCTET}.#{HEX_OCTET}/
+  DEC_IP_ADDR = /#{DEC_OCTET}\.#{DEC_OCTET}\.#{DEC_OCTET}\.#{DEC_OCTET}/
+  HEX_IP_ADDR = /#{HEX_OCTET}\.#{HEX_OCTET}\.#{HEX_OCTET}\.#{HEX_OCTET}/
   IP_ADDR = /#{DEC_IP_ADDR}|#{HEX_IP_ADDR}/
 
   # IPv6, from Resolv::IPv6, without the \A..\z anchors
@@ -1101,6 +1101,16 @@ module Irc
 
     end
 
+    # Hash of modes. Subclass of Hash that defines any? and all?
+    # to check if boolean modes (Type D) are set
+    class ModeHash < Hash
+      def any?(*ar)
+        !!ar.find { |m| s = m.to_sym ; self[s] && self[s].set? }
+      end
+      def all?(*ar)
+        !ar.find { |m| s = m.to_sym ; !(self[s] && self[s].set?) }
+      end
+    end
 
     # Channel modes of type A manipulate lists
     #
@@ -1289,12 +1299,15 @@ module Irc
     include ServerOrCasemap
     attr_reader :name, :topic, :mode, :users
     alias :to_s :name
+    attr_accessor :creation_time, :url
 
     def inspect
       str = self.__to_s__[0..-2]
       str << " on server #{server}" if server
       str << " @name=#{@name.inspect} @topic=#{@topic.text.inspect}"
       str << " @users=[#{user_nicks.sort.join(', ')}]"
+      str << " (created on #{creation_time})" if creation_time
+      str << " (URL #{url})" if url
       str << ">"
     end
 
@@ -1357,15 +1370,13 @@ module Irc
       }
 
       # Flags
-      @mode = {}
-      class << @mode
-        def any?(*ar)
-          !!ar.find { |m| s = m.to_sym ; self[s] && self[s].set? }
-        end
-        def all?(*ar)
-          !ar.find { |m| s = m.to_sym ; !(self[s] && self[s].set?) }
-        end
-      end
+      @mode = ModeHash.new
+
+      # creation time, only on some networks
+      @creation_time = nil
+
+      # URL, only on some networks
+      @url = nil
     end
 
     # Removes a user from the channel