- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
perl/modules/IRC/lib/BarnOwl/Module/IRC.pm
r9620c8d r5c6d661 20 20 use BarnOwl::Module::IRC::Completion; 21 21 22 use Net::IRC;22 use AnyEvent::IRC; 23 23 use Getopt::Long; 24 24 use Encode; … … 30 30 # Hash alias -> BarnOwl::Module::IRC::Connection object 31 31 our %ircnets; 32 our %channels;33 our %reconnect;34 32 35 33 sub startup { … … 70 68 71 69 register_commands(); 72 register_handlers();73 70 BarnOwl::filter(qw{irc type ^IRC$ or ( type ^admin$ and adminheader ^IRC$ )}); 74 71 } … … 76 73 sub shutdown { 77 74 for my $conn (values %ircnets) { 78 $conn->conn->disconnect( );75 $conn->conn->disconnect('Quitting'); 79 76 } 80 77 } … … 98 95 $list .= "\n"; 99 96 100 for my $chan (keys %channels) { 101 next unless grep $_ eq $conn, @{$channels{$chan}}; 97 for my $chan (keys %{$conn->conn->{channel_list}}) { 102 98 $list .= " $chan\n"; 103 99 } … … 105 101 106 102 return $list; 107 }108 109 #sub mainloop_hook {110 # return unless defined $irc;111 # eval {112 # $irc->do_one_loop();113 # };114 # return;115 #}116 117 sub OwlProcess {118 return unless defined $irc;119 eval {120 $irc->do_one_loop();121 };122 return;123 }124 125 126 sub register_handlers {127 if(!$irc) {128 $irc = Net::IRC->new;129 $irc->timeout(0);130 }131 103 } 132 104 … … 406 378 } 407 379 408 my $conn = BarnOwl::Module::IRC::Connection->new($irc, $alias, 409 Nick => $nick, 410 Server => $host, 411 Port => $port, 412 Username => $username, 413 Ircname => $ircname, 414 Port => $port, 415 Password => $password, 416 SSL => $ssl 417 ); 418 419 if ($conn->conn->connected) { 420 $conn->connected("Connected to $alias as $nick"); 421 } else { 422 die("IRC::Connection->connect failed: $!"); 423 } 424 380 my $conn = BarnOwl::Module::IRC::Connection->new($alias, $host, $port, { 381 nick => $nick, 382 user => $username, 383 real => $ircname, 384 password => $password, 385 SSL => $ssl, 386 timeout => sub {0} 387 }); 388 $ircnets{$alias} = $conn; 425 389 return; 426 390 } … … 429 393 my $cmd = shift; 430 394 my $conn = shift; 431 if ($conn->conn->connected) { 432 $conn->conn->disconnect; 433 } elsif ($reconnect{$conn->alias}) { 395 if ($conn->conn->{socket}) { 396 $conn->did_quit(1); 397 $conn->conn->disconnect("Goodbye!"); 398 } elsif ($conn->{reconnect_timer}) { 434 399 BarnOwl::admin_message('IRC', 435 400 "[" . $conn->alias . "] Reconnect cancelled"); 436 401 $conn->cancel_reconnect; 402 delete $ircnets{$conn->alias}; 437 403 } 438 404 } … … 463 429 for my $body (@msgs) { 464 430 if ($body =~ /^\/me (.*)/) { 465 $conn-> conn->me($to, Encode::encode('utf-8', $1));431 $conn->me($to, Encode::encode('utf-8', $1)); 466 432 $body = '* '.$conn->nick.' '.$1; 467 433 } else { 468 $conn->conn-> privmsg($to, Encode::encode('utf-8', $body));434 $conn->conn->send_msg('privmsg', $to, Encode::encode('utf-8', $body)); 469 435 } 470 436 my $msg = BarnOwl::Message->new( … … 491 457 my $target = shift; 492 458 $target ||= shift; 493 $conn->conn-> mode($target, @_);459 $conn->conn->send_msg(mode => $target, @_); 494 460 return; 495 461 } … … 499 465 my $conn = shift; 500 466 my $chan = shift or die("Usage: $cmd channel\n"); 501 $channels{$chan} ||= []; 502 push @{$channels{$chan}}, $conn; 503 $conn->conn->join($chan, @_); 467 $conn->conn->send_msg(join => $chan, @_); 504 468 return; 505 469 } … … 509 473 my $conn = shift; 510 474 my $chan = shift; 511 $channels{$chan} = [grep {$_ ne $conn} @{$channels{$chan} || []}]; 512 $conn->conn->part($chan); 475 $conn->conn->send_msg(part => $chan); 513 476 return; 514 477 } … … 518 481 my $conn = shift; 519 482 my $nick = shift or die("Usage: $cmd <new nick>\n"); 520 $conn->conn-> nick($nick);483 $conn->conn->send_msg(nick => $nick); 521 484 return; 522 485 } … … 527 490 my $chan = shift; 528 491 $conn->names_tmp([]); 529 $conn->conn-> names($chan);492 $conn->conn->send_msg(names => $chan); 530 493 return; 531 494 } … … 535 498 my $conn = shift; 536 499 my $who = shift || die("Usage: $cmd <user>\n"); 537 $conn->conn-> whois($who);500 $conn->conn->send_msg(whois => $who); 538 501 return; 539 502 } … … 542 505 my $cmd = shift; 543 506 my $conn = shift; 544 $conn->conn-> motd;507 $conn->conn->send_msg('motd'); 545 508 return; 546 509 } … … 560 523 my $conn = shift; 561 524 my $who = shift || die("Usage: $cmd <user>\n"); 562 BarnOwl::error("WHO $cmd $conn $who"); 563 $conn->conn->who($who); 525 $conn->conn->send_msg(who => $who); 564 526 return; 565 527 } … … 569 531 my $conn = shift; 570 532 my $type = shift || die("Usage: $cmd <chiklmouy> [server] \n"); 571 $conn->conn->s tats($type, @_);533 $conn->conn->send_msg(stats => $type, @_); 572 534 return; 573 535 } … … 577 539 my $conn = shift; 578 540 my $chan = shift; 579 $conn->conn-> topic($chan, @_ ? join(" ", @_) : undef);541 $conn->conn->send_msg(topic => $chan, @_ ? join(" ", @_) : undef); 580 542 return; 581 543 } … … 584 546 my $cmd = shift; 585 547 my $conn = shift; 586 $conn->conn->s l(join(" ", @_));548 $conn->conn->send_msg(@_); 587 549 return; 588 550 } … … 591 553 ########################### Utilities/Helpers ################################## 592 554 ################################################################################ 555 556 sub find_channel { 557 my $channel = shift; 558 my @found; 559 for my $conn (values %ircnets) { 560 if($conn->conn->{channel_list}{lc $channel}) { 561 push @found, $conn; 562 } 563 } 564 return $found[0] if(scalar @found == 1); 565 } 593 566 594 567 sub mk_irc_command { … … 614 587 $channel = $ARGV[0]; 615 588 if(defined($channel) && $channel =~ /^#/) { 616 if( $channels{$channel} && @{$channels{$channel}} == 1) {589 if(my $c = find_channel($channel)) { 617 590 shift @ARGV; 618 $conn = $channels{$channel}[0] unless $conn;591 $conn ||= $c; 619 592 } 620 593 } elsif ($m && $m->type eq 'IRC' && !$m->is_private) { … … 654 627 my $allow_disconnected = shift; 655 628 656 return $ircnets{$key} if exists $ircnets{$key}; 657 return $reconnect{$key} if $allow_disconnected && exists $reconnect{$key}; 658 die("No such ircnet: $key\n") 629 my $conn = $ircnets{$key}; 630 die("No such ircnet: $key\n") unless $conn; 631 if ($conn->conn->{registered} || $allow_disconnected) { 632 return $conn; 633 } 634 die("[@{[$conn->alias]}] Not currently connected."); 659 635 } 660 636
Note: See TracChangeset
for help on using the changeset viewer.