Class: Jabber::Framework::Bot

Inherits:
Base
  • Object
show all
Defined in:
lib/xmpp4r/framework/bot.rb

Overview

Abstract handler methods that may be implemented by a deriving class:

  • on_message(text)

  • on_message_xhtml(html_body, text)

Instance Attribute Summary

Attributes inherited from Base

#stream

Instance Method Summary (collapse)

Methods inherited from Base

helper, #on_unhandled_iq

Constructor Details

- (Bot) initialize(jid, password)



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
# File 'lib/xmpp4r/framework/bot.rb', line 30

def initialize(jid, password)
  cl = Jabber::Client.new(jid)
  cl.connect
  cl.auth(password)

  super(cl)

  roster.add_subscription_request_callback do |item,presence|
    if accept_subscription_from?(presence.from.strip)
      roster.accept_subscription(presence.from.strip)
    else
      roster.decline_subscription(presence.from.strip)
    end
  end

  @pep_notifications = []
  cl.add_message_callback do |msg|
    if msg.type != :error and msg.body
      if (html = msg.first_element('html')) and respond_to? :on_message_xhtml
        on_message_xhtml(html.body, msg.body)
      elsif respond_to? :on_message
        on_message(msg.body)
      end
    elsif msg.type != :error and (event = msg.first_element('event'))
      event.each_element('items') do |items|
        node = items.attributes['node']
        items.each_element('item') do |item|
          @pep_notifications.each { |notification_node,callback|
            if node == notification_node
              callback.call(msg.from, item)
            end
          }
        end
      end
    else
      false
    end
  end

  add_cap('presence')
  add_cap(Caps::NS_CAPS)
  add_cap('message') if respond_to? :on_message
  add_cap(XHTML::NS_XHTML_IM) if respond_to? :on_message_xhtml

  @presence_show = nil
  @presence_status = nil
end

Instance Method Details

- (Boolean) accept_subscription_from?(jid)

Front-end for Roster::Helper#add_subscription_request_callback

Can be overwritten, must return true or false



89
90
91
# File 'lib/xmpp4r/framework/bot.rb', line 89

def accept_subscription_from?(jid)
  true
end

- (Object) add_cap(capability)

Add feature namespace to Capabilities Discovery



80
81
82
83
# File 'lib/xmpp4r/framework/bot.rb', line 80

def add_cap(capability)
  disco_default.add_feature(capability)
  disco_caps.add_feature(capability)
end

- (Object) add_pep_notification(node, &callback)



141
142
143
144
# File 'lib/xmpp4r/framework/bot.rb', line 141

def add_pep_notification(node, &callback)
  add_cap("#{node}+notify")
  @pep_notifications << [node, callback]
end

- (Object) send_message(to, text)

Send a simple text chat message



95
96
97
98
99
100
101
# File 'lib/xmpp4r/framework/bot.rb', line 95

def send_message(to, text)
  msg = Message.new
  msg.type = :chat
  msg.to = to
  msg.body = text
  @stream.send(msg)
end

- (Object) send_message_xhtml(to, xhtml_contents, text = nil)

Send an XHTML chat message

text

String

alternate plain text body, generated from xhtml_contents if nil



106
107
108
109
110
111
112
113
# File 'lib/xmpp4r/framework/bot.rb', line 106

def send_message_xhtml(to, xhtml_contents, text=nil)
  msg = Message.new
  msg.type = :chat
  msg.to = to
  html = msg.add(XHTML::HTML.new(xhtml_contents))
  msg.body = text ? text : html.to_text
  @stream.send(msg)
end

- (Object) set_presence(show = nil, status = nil)

Set and send a Presence



117
118
119
120
121
# File 'lib/xmpp4r/framework/bot.rb', line 117

def set_presence(show=nil, status=nil)
  @presence_show = show
  @presence_status = status
  send_presence
end