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
-
#ban(recipients, reason) ⇒ Object
Administratively ban one or more user jids from the room.
-
#demote(recipients) ⇒ Object
Demote one or more users in the room to participant.
-
#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.
-
#promote(recipients) ⇒ Object
Promote one or more users in the room to moderator.
-
#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.
-
#unban(recipients) ⇒ Object
Unban one or more user jids for the room.
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
#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
#ban(recipients, reason) ⇒ Object
Administratively ban one or more user jids from the room.
Will wait for response, possibly raising ServerError
Sample usage:
my_muc.ban '[email protected]', 'Avaunt, you cullion!'
- recipients
- Array
-
of, or single [String]: JIDs
- reason
- String
-
Ban reason
199 200 201 202 203 204 205 206 207 208 209 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 199 def ban(recipients, reason) recipients = [recipients] unless recipients.kind_of? Array items = recipients.collect { |recipient| item = IqQueryMUCAdminItem.new item.jid = recipient item.affiliation = :outcast item.reason = reason item } send_affiliations(items) end |
#demote(recipients) ⇒ Object
Demote one or more users in the room to participant.
Will wait for response, possibly raising ServerError
Sample usage:
my_muc.demote 'pistol'
- recipients
- Array
-
of, or single [String]: Nicks
260 261 262 263 264 265 266 267 268 269 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 260 def demote(recipients) recipients = [recipients] unless recipients.kind_of? Array items = recipients.collect { |recipient| item = IqQueryMUCAdminItem.new item.nick = recipient item.role = :participant item } send_affiliations(items) end |
#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
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 |
#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 |
#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
311 312 313 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 311 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
318 319 320 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 318 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
285 286 287 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 285 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
293 294 295 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 293 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
277 278 279 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 277 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
327 328 329 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 327 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
300 301 302 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 300 def on_subject(&block) @subject_block = block end |
#promote(recipients) ⇒ Object
Promote one or more users in the room to moderator.
Will wait for response, possibly raising ServerError
Sample usage:
my_muc.promote 'pistol'
- recipients
- Array
-
of, or single [String]: Nicks
240 241 242 243 244 245 246 247 248 249 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 240 def promote(recipients) recipients = [recipients] unless recipients.kind_of? Array items = recipients.collect { |recipient| item = IqQueryMUCAdminItem.new item.nick = recipient item.role = :moderator item } send_affiliations(items) end |
#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 |
#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 |
#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 |
#unban(recipients) ⇒ Object
Unban one or more user jids for the room.
Will wait for response, possibly raising ServerError
Sample usage:
my_muc.unban '[email protected]'
- recipients
- Array
-
of, or single [String]: JIDs
220 221 222 223 224 225 226 227 228 229 |
# File 'lib/xmpp4r/muc/helper/simplemucclient.rb', line 220 def unban(recipients) recipients = [recipients] unless recipients.kind_of? Array items = recipients.collect { |recipient| item = IqQueryMUCAdminItem.new item.jid = recipient item.affiliation = :none item } send_affiliations(items) end |