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('jdev@conference.jabber.org/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.
-
#kick(recipients, reason) ⇒ Object
Administratively remove one or more users from the 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, #configure, #exit, #from_room?, #get_room_configuration, #join, #nick, #nick=, #owner?, #room, #send, #send_affiliations, #submit_room_configuration
Constructor Details
permalink #initialize(stream) ⇒ SimpleMUCClient
Initialize a SimpleMUCClient
- stream
- Stream
-
to operate on
- jid
- JID
-
room@component/nick
- password
- String
-
Optional password
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 80 81 82 83 84 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 40 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
permalink #invite(recipients) ⇒ Object
Request the MUC to invite users to this room
Sample usage:
my_muc.invite( {'wiccarocks@shakespeare.lit/laptop' => 'This coven needs both wiccarocks and hag66.',
'hag66@shakespeare.lit' => 'This coven needs both hag66 and wiccarocks.'} )
- recipients
- Hash
-
of [JID] => [String] Reason
157 158 159 160 161 162 163 164 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 157 def invite(recipients) msg = Message.new x = msg.add(XMUCUser.new) recipients.each { |jid,reason| x.add(XMUCUserInvite.new(jid, reason)) } send(msg) end |
permalink #kick(recipients, reason) ⇒ Object
Administratively remove one or more users from the room.
Will wait for response, possibly raising ServerError
Sample usage:
my_muc.kick 'pistol', 'Avaunt, you cullion!'
my_muc.kick(['Bill', 'Linus'], 'Stop flaming')
- recipients
- Array
-
of, or single [String]: Nicks
- reason
- String
-
Kick reason
177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 177 def kick(recipients, reason) recipients = [recipients] unless recipients.kind_of? Array items = recipients.collect { |recipient| item = IqQueryMUCAdminItem.new item.nick = recipient item.role = :none item.reason = reason item } send_affiliations(items) end |
permalink #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
229 230 231 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 229 def on_join(&block) @join_block = block end |
permalink #on_leave(&block) ⇒ Object
Block to be called when somebody leaves the room
- block
-
Takes two arguments: time, nickname
236 237 238 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 236 def on_leave(&block) @leave_block = block end |
permalink #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
203 204 205 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 203 def (&block) @message_block = block end |
permalink #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
211 212 213 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 211 def (&block) @private_message_block = block end |
permalink #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
195 196 197 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 195 def (&block) @room_message_block = block end |
permalink #on_self_leave(&block) ⇒ Object
Block to be called when you leave the room
Deactivation occurs afterwards.
- block
-
Takes one argument: time
245 246 247 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 245 def on_self_leave(&block) @self_leave_block = block end |
permalink #on_subject(&block) ⇒ Object
Block to be invoked when somebody sets a new room subject
- block
-
Takes three arguments: time, nickname, new subject
218 219 220 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 218 def on_subject(&block) @subject_block = block end |
permalink #say(text, to = nil) ⇒ Object
Send a simple text message
- text
- String
-
Message body
- to
- String
-
Optional nick if directed to specific user
146 147 148 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 146 def say(text, to=nil) send(Message.new(nil, text), to) end |
permalink #subject ⇒ Object
Room subject/topic
- result
- String
-
The subject
126 127 128 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 126 def subject @subject end |
permalink #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
136 137 138 139 140 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 136 def subject=(s) msg = Message.new msg.subject = s send(msg) end |