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
|
#-- 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
m.reply Realm.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
end
end
end
plugin = RealmPlugin.new
plugin.map 'realm *realm_name',
:defaults => {:realm_name => false}, :thread => true
|