X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Fwow.rb;h=8701c7672a2656df3d3923846bc1658ecf758059;hb=052217de30c59206d7025b582d4604557a747470;hp=4faadaf4576e520617efc005087a22a26dbd12ae;hpb=23f5b9a75731b7c5fcd1c92a77e1cd504abee183;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/wow.rb b/data/rbot/plugins/wow.rb index 4faadaf4..8701c767 100644 --- a/data/rbot/plugins/wow.rb +++ b/data/rbot/plugins/wow.rb @@ -1,11 +1,13 @@ +#-- vim:sw=2:et +#++ # -# World of Warcraft Realm Status plugin for rbot -# by MrChucho (mrchucho@mrchucho.net) -# Copyright (C) 2006 Ralph M. Churchill +# :title: World of Warcraft Realm Status plugin for rbot # -# Requires: insatiable appetite for World of Warcraft +# Author:: MrChucho (mrchucho@mrchucho.net) +# Copyright:: (C) 2006 Ralph M. Churchill # -require 'open-uri' +# Requires:: insatiable appetite for World of Warcraft + require 'rexml/document' class Realm @@ -16,25 +18,6 @@ class Realm self.type = pretty_type(type) self.pop = pretty_pop(pop) end - def Realm.get_realm_status(realm_name) - begin - open("http://www.worldofwarcraft.com/realmstatus/status.xml") do |xmldoc| - realm_list = (REXML::Document.new xmldoc).root - realm_data = realm_list.elements["r[@n=\"#{realm_name}\"]"] - if realm_data and realm_data.attributes.any? then - realm = Realm.new( - realm_data.attributes['n'], - realm_data.attributes['s'].to_i, - realm_data.attributes['t'].to_i, - realm_data.attributes['l'].to_i) - else - "Realm, #{realm_name}, not found." - end - end - rescue => err - "Error retrieving realm status: #{err}" - end - end def to_s "#{name} (#{type}) Status: #{status} Population: #{pop}" end @@ -102,22 +85,43 @@ class RealmPlugin < Plugin def usage(m,params={}) m.reply USAGE end + def get_realm_status(realm_name) + begin + xmldoc = @bot.httputil.get("http://www.worldofwarcraft.com/realmstatus/status.xml", :cache => false) + raise "unable to retrieve realm status" unless xmldoc + realm_list = (REXML::Document.new xmldoc).root + realm_data = realm_list.get_elements("//r[@n=\"#{realm_name}\"]").first + if realm_data and realm_data.attributes.any? then + realm = Realm.new( + realm_data.attributes['n'], + realm_data.attributes['s'].to_i, + realm_data.attributes['t'].to_i, + realm_data.attributes['l'].to_i) + realm.to_s + else + "realm #{realm_name} not found." + end + rescue => err + "error retrieving realm status: #{err}" + end + end def realm(m,params) - if params[:realm_name] and params[:realm_name].any? - realm_name = params[:realm_name].collect{|tok| - tok.capitalize - }.join(' ') - @registry[m.sourcenick] = realm_name - m.reply Realm.get_realm_status(realm_name) + if params[:realm_name] and params[:realm_name].any? + realm_name = params[:realm_name].collect{|tok| + tok.capitalize + }.join(' ') + @registry[m.sourcenick] = realm_name + m.reply get_realm_status(realm_name) + else + if @registry.has_key?(m.sourcenick) + realm_name = @registry[m.sourcenick] + m.reply get_realm_status(realm_name) else - if @registry.has_key?(m.sourcenick) - realm_name = @registry[m.sourcenick] - m.reply Realm.get_realm_status(realm_name) - else - m.reply "I don't know which realm you want.\n#{USAGE}" - end + m.reply "I don't know which realm you want.\n#{USAGE}" end + end end end plugin = RealmPlugin.new -plugin.map 'realm *realm_name', :defaults => {:realm_name => false} +plugin.map 'realm *realm_name', + :defaults => {:realm_name => false}, :thread => true