]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - lib/rbot/rfc2812.rb
+ support channel URL and creation time
[user/henk/code/ruby/rbot.git] / lib / rbot / rfc2812.rb
index 0100fc3c522be736689d902fbef3dba5cfacb068..ac44888330d6b10726fa11be5a2eba04ff464d15 100644 (file)
@@ -144,6 +144,12 @@ module Irc
   # "<channel> <mode> <mode params>"
   RPL_CHANNELMODEIS=324
 
+  # "<channel> <unixtime>"
+  RPL_CREATIONTIME=329
+
+  # "<channel> <url>"
+  RPL_CHANNEL_URL=328
+
   # "<channel> :No topic is set"
   RPL_NOTOPIC=331
 
@@ -1122,19 +1128,14 @@ module Irc
           data[:message] = argv[2]
           handle(:badnick, data)
         when RPL_TOPIC
-          data[:channel] = @server.get_channel(argv[1])
+          data[:channel] = @server.channel(argv[1])
           data[:topic] = argv[2]
-
-          if data[:channel]
-            data[:channel].topic.text = data[:topic]
-          else
-            warning "Received topic #{data[:topic].inspect} for channel #{data[:channel].inspect} I was not on"
-          end
+          data[:channel].topic.text = data[:topic]
 
           handle(:topic, data)
         when RPL_TOPIC_INFO
           data[:nick] = @server.user(argv[0])
-          data[:channel] = @server.get_channel(argv[1])
+          data[:channel] = @server.channel(argv[1])
 
           # This must not be an IRC::User because it might not be an actual User,
           # and we risk overwriting valid User data
@@ -1142,12 +1143,8 @@ module Irc
 
           data[:time] = Time.at(argv[3].to_i)
 
-          if data[:channel]
-            data[:channel].topic.set_by = data[:source]
-            data[:channel].topic.set_on = data[:time]
-          else
-            warning "Received topic #{data[:topic].inspect} for channel #{data[:channel].inspect} I was not on"
-          end
+          data[:channel].topic.set_by = data[:source]
+          data[:channel].topic.set_on = data[:time]
 
           handle(:topicinfo, data)
         when RPL_NAMREPLY
@@ -1288,6 +1285,16 @@ module Irc
         when RPL_CHANNELMODEIS
           parse_mode(serverstring, argv[1..-1], data)
           handle(:mode, data)
+        when RPL_CREATIONTIME
+          data[:channel] = argv[1]
+          data[:time] = Time.at(argv[2].to_i)
+          @server.get_channel(data[:channel]).creation_time=data[:time]
+          handle(:creationtime, data)
+        when RPL_CHANNEL_URL
+          data[:channel] = argv[1]
+          data[:url] = argv[2]
+          @server.get_channel(data[:channel]).url=data[:url].dup
+          handle(:channel_url, data)
         else
           warning "Unknown message #{serverstring.inspect}"
           handle(:unknown, data)