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)

Returns a new instance of Bot



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

Returns:

  • (Boolean)


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