summaryrefslogtreecommitdiff
path: root/data/rbot/plugins/wow.rb
blob: 3b73414cd8858ddb10e8466fe348cb7d55932232 (plain)
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}