]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - lib/rbot/botuser.rb
basics: it's @bot.myself, not just myself
[user/henk/code/ruby/rbot.git] / lib / rbot / botuser.rb
index 146912b43587093325e4625fe6ae02c0df73fb4e..83fb26240333a0456a743fe662b3c61f26ebce01 100644 (file)
@@ -19,7 +19,7 @@ require 'set'
 #     class_eval {\r
 #       define_method(m) { |*a|\r
 #         r = super(*a)\r
-#         Irc::Bot::Auth.authmanager.set_changed\r
+#         Irc::Bot::Auth.manager.set_changed\r
 #         r\r
 #       }\r
 #     }\r
@@ -236,7 +236,7 @@ class Bot
       attr_reader :password\r
       attr_reader :netmasks\r
       attr_reader :perm\r
-      # Please remember to #set_changed() the authmanager\r
+      # Please remember to #set_changed() the Auth.manager\r
       # when modifying data\r
       attr_reader :data\r
       attr_writer :login_by_mask\r
@@ -344,13 +344,13 @@ class Bot
       # Reset the login-by-mask option\r
       #\r
       def reset_login_by_mask\r
-        @login_by_mask = Auth.authmanager.bot.config['auth.login_by_mask'] unless defined?(@login_by_mask)\r
+        @login_by_mask = Auth.manager.bot.config['auth.login_by_mask'] unless defined?(@login_by_mask)\r
       end\r
 \r
       # Reset the autologin option\r
       #\r
       def reset_autologin\r
-        @autologin = Auth.authmanager.bot.config['auth.autologin'] unless defined?(@autologin)\r
+        @autologin = Auth.manager.bot.config['auth.autologin'] unless defined?(@autologin)\r
       end\r
 \r
       # Do we allow automatic logging in?\r
@@ -601,10 +601,10 @@ class Bot
     end\r
 \r
 \r
-    # This is the AuthManagerClass singleton, used to manage User/BotUser connections and\r
-    # everything\r
+    # This is the ManagerClass singleton, used to manage\r
+    # Irc::User/Irc::Bot::Auth::BotUser connections and everything\r
     #\r
-    class AuthManagerClass\r
+    class ManagerClass\r
 \r
       include Singleton\r
 \r
@@ -757,13 +757,21 @@ class Bot
       end\r
 \r
       # Creates a new transient BotUser associated with Irc::User _user_,\r
-      # automatically logging him in\r
+      # automatically logging him in. Note that transient botuser creation can\r
+      # fail, typically if we don't have the complete user netmask (e.g. for\r
+      # messages coming in from a linkbot)\r
       #\r
       def create_transient_botuser(user)\r
         ircuser = user.to_irc_user\r
-        bu = BotUser.new(ircuser, :transient => true, :masks => ircuser)\r
-        bu.login(ircuser)\r
-        @transients << bu\r
+        bu = everyone\r
+        begin\r
+          bu = BotUser.new(ircuser, :transient => true, :masks => ircuser)\r
+          bu.login(ircuser)\r
+          @transients << bu\r
+        rescue\r
+          warning "failed to create transient for #{user}"\r
+          error $!\r
+        end\r
         return bu\r
       end\r
 \r
@@ -826,10 +834,10 @@ class Bot
 \r
     end\r
 \r
-    # Returns the only instance of AuthManagerClass\r
+    # Returns the only instance of ManagerClass\r
     #\r
-    def Auth.authmanager\r
-      return AuthManagerClass.instance\r
+    def Auth.manager\r
+      return ManagerClass.instance\r
     end\r
 \r
   end\r
@@ -841,7 +849,7 @@ end
     # associated with the receiver\r
     #\r
     def botuser\r
-      Irc::Bot::Auth.authmanager.irc_to_botuser(self)\r
+      Irc::Bot::Auth.manager.irc_to_botuser(self)\r
     end\r
 \r
     # Bot-specific data can be stored with Irc::Users. This is\r
@@ -867,7 +875,7 @@ end
     def set_bot_data(key,value=nil,&block)\r
       if not block_given?\r
         self.botuser.data[key]=value\r
-        Irc::Bot::Auth.authmanager.set_changed\r
+        Irc::Bot::Auth.manager.set_changed\r
         return value\r
       end\r
       if value and not bot_data.has_key?(key)\r
@@ -877,7 +885,7 @@ end
       begin\r
         r = yield bot_data(key)\r
       ensure\r
-        Irc::Bot::Auth.authmanager.set_changed\r
+        Irc::Bot::Auth.manager.set_changed\r
       end\r
       return r\r
     end\r