Class: Jabber::Framework::Bot

Inherits:
Base
  • Object
show all
Defined in:
lib/vendor/xmpp4r/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

#initialize(jid, password) ⇒ Bot

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/vendor/xmpp4r/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

#accept_subscription_from?(jid) ⇒ Boolean

Front-end for Roster::Helper#add_subscription_request_callback

Can be overwritten, must return true or false

Returns:

  • (Boolean)


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

def accept_subscription_from?(jid)
  true
end

#add_cap(capability) ⇒ Object

Add feature namespace to Capabilities Discovery



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

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

#add_pep_notification(node, &callback) ⇒ Object



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

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

#send_message(to, text) ⇒ Object

Send a simple text chat message



95
96
97
98
99
100
101
# File 'lib/vendor/xmpp4r/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

#send_message_xhtml(to, xhtml_contents, text = nil) ⇒ Object

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/vendor/xmpp4r/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

#set_presence(show = nil, status = nil) ⇒ Object

Set and send a Presence



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

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