]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - lib/rbot/rfc2812.rb
rss plugin: watching now relies on an ID built from title, link and description to...
[user/henk/code/ruby/rbot.git] / lib / rbot / rfc2812.rb
index bec3d322c706065e043127d92606f48443d7f179..5174203f590fd901384c82b4219e70058735f4c6 100644 (file)
@@ -942,10 +942,10 @@ module Irc
             warning "Server thinks client (#{@user.inspect}) has a different nick"
             @user.nick = data[:target]
           end
-          if argv[1] =~ /(\S+)(?:!(\S+?))?@(\S+)/
+          if argv[1] =~ /([^@!\s]+)(?:!([^@!\s]+?))?@(\S+)/
             nick = $1
             user = $2
-            host = $2
+            host = $3
             warning "Welcome message nick mismatch (#{nick} vs #{data[:target]})" if nick != data[:target]
             @user.user = user if user
             @user.host = host if host
@@ -1001,11 +1001,15 @@ module Irc
         when RPL_TOPIC_INFO
           data[:nick] = @server.user(argv[0])
           data[:channel] = @server.get_channel(argv[1])
-          data[:source] = @server.user(argv[2])
+
+          # This must not be an IRC::User because it might not be an actual User,
+          # and we risk overwriting valid User data
+          data[:source] = argv[2].to_irc_netmask(:server => @server)
+
           data[:time] = Time.at(argv[3].to_i)
 
           if data[:channel]
-            data[:channel].topic.set_by = data[:nick]
+            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"