#
# Requires:: insatiable appetite for World of Warcraft
-require 'open-uri'
require 'rexml/document'
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
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
- Thread.new do
- m.reply Realm.get_realm_status(realm_name)
- end
+ 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]
- Thread.new do
- m.reply Realm.get_realm_status(realm_name)
- end
- 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