Changeset 1dfc7df for perl/modules/jabber.pl
- Timestamp:
- Jan 11, 2007, 5:29:25 PM (18 years ago)
- Branches:
- master, barnowl_perlaim, debian, release-1.10, release-1.4, release-1.5, release-1.6, release-1.7, release-1.8, release-1.9
- Children:
- fd5054a
- Parents:
- 31cf416
- git-author:
- Nelson Elhage <nelhage@mit.edu> (01/11/07 17:28:56)
- git-committer:
- Nelson Elhage <nelhage@mit.edu> (01/11/07 17:29:25)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
perl/modules/jabber.pl
r30c735c r1dfc7df 6 6 use Authen::SASL qw(Perl); 7 7 use Net::Jabber; 8 use Net::Jabber::MUC; 8 9 use Net::DNS; 9 10 use Getopt::Long; … … 41 42 } 42 43 my $self = $class->SUPER::new(%args); 43 return $self 44 $self->{_BARNOWL_MUCS} = []; 45 return $self; 46 } 47 48 =head2 MUCJoin 49 50 Extends MUCJoin to keep track of the MUCs we're joined to as 51 Net::Jabber::MUC objects. Takes the same arguments as 52 L<Net::Jabber::MUC/new> and L<Net::Jabber::MUC/Connect> 53 54 =cut 55 56 sub MUCJoin { 57 my $self = shift; 58 my $muc = Net::Jabber::MUC->new(connection => $self, @_); 59 $muc->Join(@_); 60 push @{$self->MUCs}, $muc; 61 } 62 63 =head2 MUCLeave ARGS 64 65 Leave a MUC. The MUC is specified in the same form as L</FindMUC> 66 67 =cut 68 69 sub MUCLeave { 70 my $self = shift; 71 my $muc = $self->FindMUC(@_); 72 return unless $muc; 73 74 $muc->Leave(); 75 76 $self->{_BARNOWL_MUCS} = grep {$_ != $muc} $self->MUCs; 77 } 78 79 =head2 FindMUC ARGS 80 81 Return the Net::Jabber::MUC object representing a specific MUC we're 82 joined to, undef if it doesn't exists. ARGS can be either JID => $JID, 83 or Room => $room, Server => $server. 84 85 =cut 86 87 sub FindMUC { 88 my $self = shift; 89 90 my %args; 91 while($#_ >= 0) { $args{ lc(pop(@_)) } = pop(@_); } 92 93 my $jid; 94 if($args{jid}) { 95 $jid = $args{jid}; 96 } elsif($args{room} && $args{server}) { 97 $jid = Net::Jabber::JID->new(userid => $args{room}, 98 server => $args{server}); 99 } 100 $jid = $jid->GetJID('base') if UNIVERSAL::isa($jid, 'Net::Jabber::JID'); 101 102 foreach my $muc ($self->MUCs) { 103 return $muc if $muc->BaseJID eq $jid; 104 } 105 return undef; 106 } 107 108 =head2 MUCs 109 110 Returns a list (or arrayref in scalar context) of Net::Jabber::MUC 111 objects we believe ourself to be connected to. 112 113 =cut 114 115 sub MUCs { 116 my $self = shift; 117 my $mucs = $self->{_BARNOWL_MUCS}; 118 return wantarray ? @$mucs : $mucs; 44 119 } 45 120 … … 518 593 part => \&jmuc_part, 519 594 invite => \&jmuc_invite, 520 configure => \&jmuc_configure 595 configure => \&jmuc_configure, 596 presence => \&jmuc_presence 521 597 ); 522 598 my $func = $jmuc_commands{$cmd}; … … 560 636 or die("Usage: jmuc join MUC [-p password] [-a account]"); 561 637 562 my $presence = new Net::Jabber::Presence; 563 $presence->SetPresence( to => $muc ); 564 my $x = $presence->NewChild('http://jabber.org/protocol/muc'); 565 $x->AddHistory()->SetMaxChars(0); 566 if ($password) { 567 $x->SetPassword($password); 568 } 569 570 $conn->getConnectionFromJidStr($jid)->Send($presence); 638 $conn->getConnectionFromJidStr($jid)->MUCJoin(Jid => $muc, 639 Password => $password, 640 History => { 641 MaxChars => 0 642 }); 643 return; 571 644 } 572 645 … … 577 650 die("Usage: jmuc part MUC [-a account]") unless $muc; 578 651 579 $conn->getConnectionFromJidStr($jid)-> PresenceSend( to => $muc, type => 'unavailable');652 $conn->getConnectionFromJidStr($jid)->MUCLeave(JID => $muc); 580 653 queue_admin_msg("$jid has left $muc."); 581 654 } … … 612 685 $conn->getConnectionFromJidStr($jid)->Send($iq); 613 686 queue_admin_msg("Accepted default instant configuration for $muc"); 687 } 688 689 sub jmuc_presence { 690 my ( $jid, $muc, @args ) = @_; 691 692 my $m = $conn->getConnectionFromJidStr($jid)->FindMUC(jid => $muc); 693 die("No such muc: $muc") unless $m; 694 695 my @jids = $m->Presence(); 696 BarnOwl::popless_ztext("JIDs present in " . $m->BaseJID . "\n\t" . 697 join("\n\t", map {$_->GetResource}@jids)); 614 698 } 615 699
Note: See TracChangeset
for help on using the changeset viewer.