Class: Jabber::MUC::SimpleMUCClient
- Defined in:
- lib/xmpp4r/muc/helper/simplemucclient.rb
Overview
This class attempts to implement a lot of complexity of the Multi-User Chat protocol. If you want to implement JEP0045 yourself, use Jabber::MUC::MUCClient for some minor abstraction.
Minor flexibility penalty: the on_* callbacks are no CallbackLists and may therefore only used once. A second invocation will overwrite the previous set up block.
Hint: the parameter time may be nil if the server didn’t send it.
Example usage:
my_muc = Jabber::MUC::SimpleMUCClient.new(my_client)
my_muc. { |time,nick,text|
puts (time || Time.new).strftime('%I:%M') + " <#{nick}> #{text}"
}
my_muc.join(Jabber::JID.new('[email protected]/XMPP4R-Bot'))
Please take a look at Jabber::MUC::MUCClient for derived methods, such as MUCClient#join, MUCClient#exit, …
Instance Attribute Summary
Attributes inherited from MUCClient
Instance Method Summary collapse
-
#initialize(stream) ⇒ SimpleMUCClient
constructor
- Initialize a SimpleMUCClient stream
- Stream
- to operate on jid
- JID
- room@component/nick password
- String
-
Optional password.
-
#invite(recipients) ⇒ Object
Request the MUC to invite users to this room.
-
#on_join(&block) ⇒ Object
Block to be called when somebody enters the room.
-
#on_leave(&block) ⇒ Object
- Block to be called when somebody leaves the room block
-
Takes two arguments: time, nickname.
-
#on_message(&block) ⇒ Object
- Block to be invoked when a message from a participant to the whole room arrives block
-
Takes three arguments: time, sender nickname, text.
-
#on_private_message(&block) ⇒ Object
Block to be invoked when a private message from a participant to you arrives.
-
#on_room_message(&block) ⇒ Object
Block to be invoked when a message from the room arrives.
-
#on_self_leave(&block) ⇒ Object
Block to be called when you leave the room.
-
#on_subject(&block) ⇒ Object
- Block to be invoked when somebody sets a new room subject block
-
Takes three arguments: time, nickname, new subject.
-
#say(text, to = nil) ⇒ Object
- Send a simple text message text
- String
- Message body to
- String
-
Optional nick if directed to specific user.
-
#subject ⇒ Object
- Room subject/topic result
- String
-
The subject.
-
#subject=(s) ⇒ Object
Change the room’s subject/topic.
Methods inherited from MUCClient
#active?, #add_join_callback, #add_leave_callback, #add_message_callback, #add_presence_callback, #add_private_message_callback, #exit, #from_room?, #join, #nick, #nick=, #room, #send
Constructor Details
#initialize(stream) ⇒ SimpleMUCClient
Initialize a SimpleMUCClient
- stream
- Stream
-
to operate on
- jid
- JID
-
room@component/nick
- password
- String
-
Optional password
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 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 35 def initialize(stream) super @room_message_block = nil @message_block = nil @private_message_block = nil @subject_block = nil @subject = nil @join_block = nil add_join_callback(999) { |pres| # Presence time time = nil pres.each_element('x') { |x| if x.kind_of?(Delay::XDelay) time = x.stamp end } # Invoke... @join_block.call(time, pres.from.resource) if @join_block false } @leave_block = nil @self_leave_block = nil add_leave_callback(999) { |pres| # Presence time time = nil pres.each_element('x') { |x| if x.kind_of?(Delay::XDelay) time = x.stamp end } # Invoke... if pres.from == jid @self_leave_block.call(time) if @self_leave_block else @leave_block.call(time, pres.from.resource) if @leave_block end false } end |
Instance Method Details
#invite(recipients) ⇒ Object
Request the MUC to invite users to this room
Sample usage:
my_muc.invite( {'[email protected]/laptop' => 'This coven needs both wiccarocks and hag66.',
'[email protected]' => 'This coven needs both hag66 and wiccarocks.'} )
- recipients
- Hash
-
of [JID] => [String] Reason
152 153 154 155 156 157 158 159 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 152 def invite(recipients) msg = Message.new x = msg.add(XMucUser.new) recipients.each { |jid,reason| x.add(XMucUserInvite.new(jid, reason)) } send(msg) end |
#on_join(&block) ⇒ Object
Block to be called when somebody enters the room
If there is a non-nil time passed to the block, chances are great that this is initial presence from a participant after you have joined the room.
- block
-
Takes two arguments: time, nickname
201 202 203 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 201 def on_join(&block) @join_block = block end |
#on_leave(&block) ⇒ Object
Block to be called when somebody leaves the room
- block
-
Takes two arguments: time, nickname
208 209 210 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 208 def on_leave(&block) @leave_block = block end |
#on_message(&block) ⇒ Object
Block to be invoked when a message from a participant to the whole room arrives
- block
-
Takes three arguments: time, sender nickname, text
175 176 177 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 175 def (&block) @message_block = block end |
#on_private_message(&block) ⇒ Object
Block to be invoked when a private message from a participant to you arrives.
- block
-
Takes three arguments: time, sender nickname, text
183 184 185 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 183 def (&block) @private_message_block = block end |
#on_room_message(&block) ⇒ Object
Block to be invoked when a message from the room arrives
Example:
Astro has joined this session
- block
-
Takes two arguments: time, text
167 168 169 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 167 def (&block) @room_message_block = block end |
#on_self_leave(&block) ⇒ Object
Block to be called when you leave the room
Deactivation occurs afterwards.
- block
-
Takes one argument: time
217 218 219 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 217 def on_self_leave(&block) @self_leave_block = block end |
#on_subject(&block) ⇒ Object
Block to be invoked when somebody sets a new room subject
- block
-
Takes three arguments: time, nickname, new subject
190 191 192 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 190 def on_subject(&block) @subject_block = block end |
#say(text, to = nil) ⇒ Object
Send a simple text message
- text
- String
-
Message body
- to
- String
-
Optional nick if directed to specific user
141 142 143 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 141 def say(text, to=nil) send(Message.new(nil, text), to) end |
#subject ⇒ Object
Room subject/topic
- result
- String
-
The subject
121 122 123 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 121 def subject @subject end |
#subject=(s) ⇒ Object
Change the room’s subject/topic
This will not be reflected by SimpleMUCClient#subject immediately, wait for SimpleMUCClient#on_subject
- s
- String
-
New subject
131 132 133 134 135 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 131 def subject=(s) msg = Message.new msg.subject = s send(msg) end |