# File rbot/keywords.rb, line 119 def scan # first scan for old DBHash files, and convert them Dir["#{@bot.botclass}/keywords/*"].each {|f| next unless f =~ /\.db$/ puts "upgrading keyword db #{f} (rbot 0.9.5 or prior) database format" newname = f.gsub(/\.db$/, ".kdb") old = BDB::Hash.open f, nil, "r+", 0600, "set_pagesize" => 1024, "set_cachesize" => [0, 32 * 1024, 0] new = BDB::CIBtree.open newname, nil, BDB::CREATE | BDB::EXCL | BDB::TRUNCATE, 0600, "set_pagesize" => 1024, "set_cachesize" => [0, 32 * 1024, 0] old.each {|k,v| new[k] = v } old.close new.close File.delete(f) } # then scan for current DBTree files, and load them Dir["#{@bot.botclass}/keywords/*"].each {|f| next unless f =~ /\.kdb$/ hsh = DBTree.new @bot, f, true key = File.basename(f).gsub(/\.kdb$/, "") debug "keywords module: loading DBTree file #{f}, key #{key}" @statickeywords[key] = hsh } # then scan for non DB files, and convert/import them and delete Dir["#{@bot.botclass}/keywords/*"].each {|f| next if f =~ /\.kdb$/ puts "auto converting keywords from #{f}" key = File.basename(f) unless @statickeywords.has_key?(key) @statickeywords[key] = DBHash.new @bot, "#{f}.db", true end IO.foreach(f) {|line| if(line =~ /^(.*?)\s*<?=(is|are)?=?>\s*(.*)$/) lhs = $1 mhs = $2 rhs = $3 # support infobot style factfiles, by fixing them up here rhs.gsub!(/\$who/, "<who>") mhs = "is" unless mhs rhs = Keyword.escape rhs values = rhs.split("<=or=>") @statickeywords[key][lhs] = Keyword.new(mhs, values).dump end } File.delete(f) @statickeywords[key].flush } end