Class: Jabber::Framework::Bot

Class | Jabber::Framework::Bot
In: | lib/xmpp4r/framework/bot.rb
Parent: | Base

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

- on_message(text)
- on_message_xhtml(html_body, text)

### Methods

accept_subscription_from? add_cap add_pep_notification new send_message send_message_xhtml set_presence

### Public Class methods

new(jid, password)

[Source]

        # File lib/xmpp4r/framework/bot.rb, line 30
    30:       def initialize(jid, password)
    31:         cl = Jabber::Client.new(jid)
    32:         cl.connect
    33:         cl.auth(password)
    34:
    35:         super(cl)
    36:
    37:         roster.add_subscription_request_callback do |item,presence|
    38:           if accept_subscription_from?(presence.from.strip)
    39:             roster.accept_subscription(presence.from.strip)
    40:           else
    41:             roster.decline_subscription(presence.from.strip)
    42:           end
    43:         end
    44:
    45:         @pep_notifications = []
    46:         cl.add_message_callback do |msg|
    47:           if msg.type != :error and msg.body
    48:             if (html = msg.first_element('html')) and respond_to? :on_message_xhtml
    49:               on_message_xhtml(html.body, msg.body)
    50:             elsif respond_to? :on_message
    51:               on_message(msg.body)
    52:             end
    53:           elsif msg.type != :error and (event = msg.first_element('event'))
    54:             event.each_element('items') do |items|
    55:               node = items.attributes['node']
    56:               items.each_element('item') do |item|
    57:                 @pep_notifications.each { |notification_node,callback|
    58:                   if node == notification_node
    59:                     callback.call(msg.from, item)
    60:                   end
    61:                 }
    62:               end
    63:             end
    64:           else
    65:             false
    66:           end
    67:         end
    68:
    69:         add_cap('presence')
    70:         add_cap(Caps::NS_CAPS)
    71:         add_cap('message') if respond_to? :on_message
    72:         add_cap(XHTML::NS_XHTML_IM) if respond_to? :on_message_xhtml
    73:
    74:         @presence_show = nil
    75:         @presence_status = nil
    76:       end

### Public Instance methods

accept_subscription_from?(jid)

Front-end for Roster::Helper#add_subscription_request_callback

Can be overwritten, must return true or false

[Source]

        # File lib/xmpp4r/framework/bot.rb, line 89
    89:       def accept_subscription_from?(jid)
    90:         true
    91:       end

add_cap(capability)

Add feature namespace to Capabilities Discovery

[Source]

        # File lib/xmpp4r/framework/bot.rb, line 80
    80:       def add_cap(capability)
    81:         disco_default.add_feature(capability)
    82:         disco_caps.add_feature(capability)
    83:       end

add_pep_notification(node, &callback)

[Source]

         # File lib/xmpp4r/framework/bot.rb, line 141
    141:       def add_pep_notification(node, &callback)
    142:         add_cap("#{node}+notify")
    143:         @pep_notifications << [node, callback]
    144:       end

send_message(to, text)

Send a simple text chat message

[Source]

         # File lib/xmpp4r/framework/bot.rb, line 95
     95:       def send_message(to, text)
     96:         msg = Message.new
     97:         msg.type = :chat
     98:         msg.to = to
     99:         msg.body = text
    100:         @stream.send(msg)
    101:       end

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

[Source]

         # File lib/xmpp4r/framework/bot.rb, line 106
    106:       def send_message_xhtml(to, xhtml_contents, text=nil)
    107:         msg = Message.new
    108:         msg.type = :chat
    109:         msg.to = to
    110:         html = msg.add(XHTML::HTML.new(xhtml_contents))
    111:         msg.body = text ? text : html.to_text
    112:         @stream.send(msg)
    113:       end

set_presence(show=nil, status=nil)

Set and send a Presence

[Source]

         # File lib/xmpp4r/framework/bot.rb, line 117
    117:       def set_presence(show=nil, status=nil)
    118:         @presence_show = show
    119:         @presence_status = status
    120:         send_presence
    121:       end

[Validate]