]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
refactor: remove global bot instance, closes #42
authorMatthias Hecker <mail@apoc.cc>
Fri, 24 Apr 2020 20:56:04 +0000 (22:56 +0200)
committerMatthias Hecker <mail@apoc.cc>
Fri, 24 Apr 2020 20:56:04 +0000 (22:56 +0200)
data/rbot/plugins/search.rb
lib/rbot/core/filters_ui.rb
lib/rbot/core/utils/utils.rb
lib/rbot/ircbot.rb

index b48e937e6a9ed38d4d35126a2aa104752e530978..b9ebcfa71f315593f020bd85d25e010739185d10 100644 (file)
@@ -168,7 +168,7 @@ class SearchPlugin < Plugin
 
     # If we return a single, full result, change the output to a more compact representation
     if single
-      fp = first_pars > 0 ? " --  #{Utils.get_first_pars(links, first_pars)}" : ""
+      fp = first_pars > 0 ? " --  #{Utils.get_first_pars(@bot, links, first_pars)}" : ""
       m.reply("Result for %{what}: %{string}%{fp}" % {
         :what => what, :string => result_string, :fp => fp
       }, :overlong => :truncate)
@@ -179,7 +179,7 @@ class SearchPlugin < Plugin
 
     return unless first_pars > 0
 
-    Utils.get_first_pars urls, first_pars, :message => m
+    Utils.get_first_pars(@bot, urls, first_pars, :message => m)
   end
 
   def google(m, params)
@@ -232,7 +232,7 @@ class SearchPlugin < Plugin
 
     if params[:lucky]
       m.reply result_string.first
-      Utils.get_first_pars([results.map {|url, title| url}.first], first_pars, :message => m)
+      Utils.get_first_pars(@bot, [results.map {|url, title| url}.first], first_pars, :message => m)
       return
     end
 
@@ -240,7 +240,7 @@ class SearchPlugin < Plugin
 
     return unless first_pars > 0
 
-    Utils.get_first_pars(results.map {|url, title| url}, first_pars, :message => m)
+    Utils.get_first_pars(@bot, results.map {|url, title| url}, first_pars, :message => m)
   end
 
   def google_define(m, what, params)
index 31e35452d3d49929d116cd278d574ed0d12ae87d..47bd9f5cc741cc67118f4695adc68b57e02244c0 100644 (file)
@@ -10,7 +10,7 @@ class FiltersModule < CoreBotModule
   def initialize
     super
     @bot.clear_filters
-    @bot.register_filter(:htmlinfo) { |s| Utils.get_html_info(s.to_s, s) }
+    @bot.register_filter(:htmlinfo) { |s| Utils.get_html_info(@bot, s.to_s, s) }
   end
 
   def help(plugin, topic="")
index 417622e43ea1cf65e13235971d66a228b4f4bcd6..951d0513ddb22974e97580d1b28465abde852998 100644 (file)
@@ -140,22 +140,6 @@ module ::Irc
 
   # Miscellaneous useful functions
   module Utils
-    @@bot = nil unless defined? @@bot
-    @@safe_save_dir = nil unless defined?(@@safe_save_dir)
-
-    # The bot instance
-    def Utils.bot
-      @@bot
-    end
-
-    # Set up some Utils routines which depend on the associated bot.
-    def Utils.bot=(b)
-      debug "initializing utils"
-      @@bot = b
-      @@safe_save_dir = @@bot.path('safe_save')
-    end
-
-
     # Seconds per minute
     SEC_PER_MIN = 60
     # Seconds per hour
@@ -320,21 +304,6 @@ module ::Irc
       return $?.success?
     end
 
-    # Safely (atomically) save to _file_, by passing a tempfile to the block
-    # and then moving the tempfile to its final location when done.
-    #
-    # call-seq: Utils.safe_save(file, &block)
-    #
-    def Utils.safe_save(file)
-      raise 'No safe save directory defined!' if @@safe_save_dir.nil?
-      basename = File.basename(file)
-      temp = Tempfile.new(basename,@@safe_save_dir)
-      temp.binmode
-      yield temp if block_given?
-      temp.close
-      File.rename(temp.path, file)
-    end
-
 
     # Decode HTML entities in the String _str_, using HTMLEntities if the
     # package was found, or UNESCAPE_TABLE otherwise.
@@ -589,16 +558,16 @@ module ::Irc
     # information is retrieved, and special title/summary
     # extraction routines are used if possible.
     #
-    def Utils.get_html_info(doc, opts={})
+    def Utils.get_html_info(bot, doc, opts={})
       case doc
       when String
         Utils.get_string_html_info(doc, opts)
       when Net::HTTPResponse
-        Utils.get_resp_html_info(doc, opts)
+        Utils.get_resp_html_info(bot, doc, opts)
       when URI
         ret = DataStream.new
-        @@bot.httputil.get_response(doc) { |resp|
-          ret.replace Utils.get_resp_html_info(resp, opts)
+        bot.httputil.get_response(doc) { |resp|
+          ret.replace Utils.get_resp_html_info(bot, resp, opts)
         }
         return ret
       else
@@ -615,7 +584,7 @@ module ::Irc
     # Currently, the only accepted options (in _opts_) are
     # uri_fragment:: the URI fragment of the original request
     # full_body::    get the whole body instead of
-    #                @@bot.config['http.info_bytes'] bytes only
+    #                bot.config['http.info_bytes'] bytes only
     #
     # Returns a DataStream with the following keys:
     # text:: the (partial) body
@@ -626,7 +595,7 @@ module ::Irc
     #   a Hash whose keys are lowercase forms of the HTTP
     #   header fields, and whose values are Arrays.
     #
-    def Utils.get_resp_html_info(resp, opts={})
+    def Utils.get_resp_html_info(bot, resp, opts={})
       case resp
       when Net::HTTPSuccess
         loc = URI.parse(resp['x-rbot-location'] || resp['location']) rescue nil
@@ -635,9 +604,9 @@ module ::Irc
         end
         ret = DataStream.new(opts.dup)
         ret[:headers] = resp.to_hash
-        ret[:text] = partial = opts[:full_body] ? resp.body : resp.partial_body(@@bot.config['http.info_bytes'])
+        ret[:text] = partial = opts[:full_body] ? resp.body : resp.partial_body(bot.config['http.info_bytes'])
 
-        filtered = Utils.try_htmlinfo_filters(ret)
+        filtered = Utils.try_htmlinfo_filters(bot, ret)
 
         if filtered
           return filtered
@@ -658,14 +627,14 @@ module ::Irc
     # The input DataStream should have the downloaded HTML as primary key
     # (:text) and possibly a :headers key holding the resonse headers.
     #
-    def Utils.try_htmlinfo_filters(ds)
-      filters = @@bot.filter_names(:htmlinfo)
+    def Utils.try_htmlinfo_filters(bot, ds)
+      filters = bot.filter_names(:htmlinfo)
       return nil if filters.empty?
       cur = nil
       # TODO filter priority
       filters.each { |n|
         debug "testing htmlinfo filter #{n}"
-        cur = @@bot.filter(@@bot.global_filter_name(n, :htmlinfo), ds)
+        cur = bot.filter(bot.global_filter_name(n, :htmlinfo), ds)
         debug "returned #{cur.pretty_inspect}"
         break if cur
       }
@@ -720,7 +689,7 @@ module ::Irc
     # If (optional) _opts_ :message is specified, those paragraphs are
     # echoed as replies to the IRC message passed as _opts_ :message
     #
-    def Utils.get_first_pars(urls, count, opts={})
+    def Utils.get_first_pars(bot, urls, count, opts={})
       idx = 0
       msg = opts[:message]
       retval = Array.new
@@ -729,7 +698,7 @@ module ::Irc
         idx += 1
 
         begin
-          info = Utils.get_html_info(URI.parse(url), opts)
+          info = Utils.get_html_info(bot, URI.parse(url), opts)
 
           par = info[:content]
           retval.push(par)
@@ -762,5 +731,3 @@ module ::Irc
 
   end
 end
-
-Irc::Utils.bot = Irc::Bot::Plugins.manager.bot
index b039e05d02d6dff13a0eb49e1b1678798d565c5b..ecb48449dc284b477bd7cb9379f4eda58ae028bb 100644 (file)
@@ -373,13 +373,6 @@ class Bot
 
     repopulate_botclass_directory
 
-    save_dir = File.join(@botclass, 'safe_save')
-    Dir.mkdir(save_dir) unless File.exist?(save_dir)
-    unless FileTest.directory? save_dir
-      error "safe save location #{save_dir} is not a directory"
-      exit 2
-    end
-
     # Time at which the last PING was sent
     @last_ping = nil
     # Time at which the last line was RECV'd from the server