package AnyEvent::XMPP::Ext::MUC::Message; use strict; use AnyEvent::XMPP::Namespaces qw/xmpp_ns/; use AnyEvent::XMPP::Util qw/bare_jid res_jid/; use AnyEvent::XMPP::IM::Message; our @ISA = qw/AnyEvent::XMPP::IM::Message/; =head1 NAME AnyEvent::XMPP::Ext::MUC::Message - A room message =head1 SYNOPSIS =head1 DESCRIPTION This message represents a message from a MUC room. It is derived from L. (You can use the methods from that class to access it for example). Also the methods like eg. C return a L. =head1 METHODS =over 4 =item B This constructor takes the same arguments that the constructor for L takes. =cut sub new { my $this = shift; my $class = ref($this) || $this; my $self = $class->SUPER::new (@_); $self->{connection} = $self->{room}->{connection}; $self } sub from_node { my ($self, $node) = @_; $self->SUPER::from_node ($node); } =item B Returns the chatroom in which' context this message was sent. =cut sub room { $_[0]->{room} } =item B This method send this message. If C<$room> is defined it will set the connection of this message object before it is send. =cut sub send { my ($self, $room) = @_; if ($room) { $self->{room} = $room; $self->{connection} = $self->{room}->{connection}; } my @add; push @add, (subject => $self->{subjects}) if %{$self->{subjects} || {}}; push @add, (thread => $self->thread) if $self->thread; push @add, (from => $self->from) if defined $self->from; $self->{connection}->send_message ( $self->to, $self->type, undef, body => $self->{bodies}, @add ); } =item B This method returns a new instance of L. The destination address, connection and type of the returned message object will be set. If C<$msg> is defined and an instance of L the destination address, connection and type of C<$msg> will be changed and this method will not return a new instance of L. If C<$self> is a message of type 'groupchat' the C attribute will be set to the bare JID of the room for the reply. =cut sub make_reply { my ($self, $msg) = @_; unless ($msg) { $msg = $self->new (room => $self->room); } $msg->{connection} = $self->{connection}; $msg->{room} = $self->{room}; if ($self->type eq 'groupchat') { $msg->to (bare_jid $self->from); } else { $msg->to ($self->from); } $msg->type ($self->type); $msg } =item B This method returns the nickname of the source of this message. =cut sub from_nick { my ($self) = @_; res_jid ($self->from) } =item B This method returns true when the message was not directed to the room, but privately to you. =cut sub is_private { my ($self) = @_; $self->type ne 'groupchat' } =back =head1 AUTHOR Robin Redeker, C<< >>, JID: C<< >> =head1 COPYRIGHT & LICENSE Copyright 2007, 2008 Robin Redeker, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1;