1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#-- vim:sw=2:et
#++
#
# :title: World of Warcraft Realm Status plugin for rbot
#
# Author:: MrChucho (mrchucho@mrchucho.net)
# Copyright:: (C) 2006 Ralph M. Churchill
#
# Requires:: insatiable appetite for World of Warcraft
require 'open-uri'
require 'rexml/document'
class Realm
attr_accessor :name,:status,:type,:pop
def initialize(name,status,type,pop)
self.name = pretty_realm(name)
self.status = pretty_status(status)
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
# just a longer, tabluar format
# might be good if displaying multiple realms
def _to_s
sprintf("%-8s %-20s %-8s %-9s\n%-11s %-22s %-8s %-9s",
"Status","Realm","Type","Population",
status,name,type,pop)
end
private
def pretty_status(status)
case status
when 1
"3Up"
when 2
"5Down"
end
end
def pretty_pop(pop)
case pop
when 1
"3Low"
when 2
"7Medium"
when 3
"4High"
when 4
"5Max(Queued)"
end
end
def pretty_realm(realm)
"#{realm}"
end
def pretty_type(type)
case type
when 0
'RP-PVP'
when 1
'Normal'
when 2
'PVP'
when 3
'RP'
end
end
end
class RealmPlugin < Plugin
USAGE="realm <realm> => determine the status of a Warcraft realm"
def initialize
super
class << @registry
def store(val)
val
end
def restore(val)
val
end
end
end
def help(plugin,topic="")
USAGE
end
def usage(m,params={})
m.reply USAGE
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
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
end
end
end
plugin = RealmPlugin.new
plugin.map 'realm *realm_name', :defaults => {:realm_name => false}
|