Hi, Direct (private) messages to other occupants of a chat room aren't currently handled by the MUC code. The below patch fixes this. The relevant sections of xep-0045 are 7.8 and 7.9.
Thanks, Hans Index: DJabberd-MUC/lib/DJabberd/Plugin/MUC/Room.pm =================================================================== --- DJabberd-MUC/lib/DJabberd/Plugin/MUC/Room.pm (revision 867) +++ DJabberd-MUC/lib/DJabberd/Plugin/MUC/Room.pm (working copy) @@ -92,11 +92,30 @@ $logger->error("User @{[$stanza->from]} is not a member of room $self->{name}; dropping message."); return; } + $message_template->set_from("$self->{nam...@$self->{domain}/$nickname"); - foreach my $member (keys %{$self->{members}}) { - my $message = $message_template->clone; - $message->set_to($self->{members}->{$member}); - $message->deliver($self->{vhost}); + my $message_type = $stanza->attr( '{}type' ); + # if message type = chat then it's to an individual. if type = groupchat + # it's in the main room. + if ( $message_type eq 'groupchat' ) { + foreach my $member (keys %{$self->{members}}) { + my $message = $message_template->clone; + $message->set_to($self->{members}->{$member}); + $message->deliver($self->{vhost}); + } + } elsif ( $message_type eq 'chat' ) { + if ( $stanza->to =~ m/\/(.*)?$/ ) { + my $message = $message_template->clone; + my $to_jid = $self->{members}->{$1}; + $message->set_to($to_jid); + $message->deliver($self->{vhost}); + } else { + $logger->error("Direct message received without recipient nick."); + return; + } + } else { + $logger->error("Unknown message type $message_type for MUC message"); + return; } }