use vars qw($b_blue $ob);
use vars qw(@ircServers);
-#use open ':utf8';
-#use open ':std';
-
$nickserv = 0;
# It's probably closer to 510, but let's be cautious until we calculate it extensively.
# JUST IN CASE. irq was complaining about this.
if ( $lastrun == time() ) {
- &DEBUG("ircloop: hrm... lastrun == time()");
+ &DEBUG('ircloop: hrm... lastrun == time()');
$error++;
sleep 10;
next;
}
if ( !defined $host ) {
- &DEBUG("ircloop: ircServers[x] = NULL.");
+ &DEBUG('ircloop: ircServers[x] = NULL.');
$lastrun = time();
next;
}
$error++;
if ( $error % 3 == 0 and $error != 0 ) {
- &status("IRC: Could not connect.");
- &status("IRC: ");
+ &status('IRC: Could not connect.');
+ &status('IRC: ');
next;
}
if ( $error >= 3 * 2 ) {
- &status("IRC: cannot connect to any IRC servers; stopping.");
+ &status('IRC: cannot connect to any IRC servers; stopping.');
&shutdown();
exit 1;
}
}
- &status("IRC: ok, done one cycle of IRC servers; trying again.");
+ &status('IRC: ok, done one cycle of IRC servers; trying again.');
&loadIRCServers();
goto loop;
my %args = (
Nick => $param{'ircNick'},
- Server => $server,
+ Server => $resolve,
Port => $port,
Ircname => $param{'ircName'},
);
$args{'LocalAddr'} = $param{'ircHost'} if ( $param{'ircHost'} );
$args{'Password'} = $param{'ircPasswd'} if ( $param{'ircPasswd'} );
- foreach my $mynick ( split ',', $param{'ircNick'} ) {
- &status(
-"Connecting to port $port of server $server ($resolve) as $mynick ..."
- );
- $args{'Nick'} = $mynick;
- $conns{$mynick} = $irc->newconn(%args);
- if ( !defined $conns{$mynick} ) {
- &ERROR("IRC: connection failed.");
- &ERROR(
-"add \"set ircHost 0.0.0.0\" to your config. If that does not work"
- );
- &ERROR(
-"Please check /etc/hosts to see if you have a localhost line like:"
- );
- &ERROR("127.0.0.1 localhost localhost");
- &ERROR(
- "If this is still a problem, please contact the maintainer.");
- }
- $conns{$mynick}->maxlinelen($maxlinelen);
-
- # handler stuff.
- $conns{$mynick}->add_global_handler( 'caction', \&on_action );
- $conns{$mynick}->add_global_handler( 'cdcc', \&on_dcc );
- $conns{$mynick}->add_global_handler( 'cping', \&on_ping );
- $conns{$mynick}->add_global_handler( 'crping', \&on_ping_reply );
- $conns{$mynick}->add_global_handler( 'cversion', \&on_version );
- $conns{$mynick}->add_global_handler( 'crversion', \&on_crversion );
- $conns{$mynick}->add_global_handler( 'dcc_open', \&on_dcc_open );
- $conns{$mynick}->add_global_handler( 'dcc_close', \&on_dcc_close );
- $conns{$mynick}->add_global_handler( 'chat', \&on_chat );
- $conns{$mynick}->add_global_handler( 'msg', \&on_msg );
- $conns{$mynick}->add_global_handler( 'public', \&on_public );
- $conns{$mynick}->add_global_handler( 'join', \&on_join );
- $conns{$mynick}->add_global_handler( 'part', \&on_part );
- $conns{$mynick}->add_global_handler( 'topic', \&on_topic );
- $conns{$mynick}->add_global_handler( 'invite', \&on_invite );
- $conns{$mynick}->add_global_handler( 'kick', \&on_kick );
- $conns{$mynick}->add_global_handler( 'mode', \&on_mode );
- $conns{$mynick}->add_global_handler( 'nick', \&on_nick );
- $conns{$mynick}->add_global_handler( 'quit', \&on_quit );
- $conns{$mynick}->add_global_handler( 'notice', \&on_notice );
- $conns{$mynick}
- ->add_global_handler( 'whoischannels', \&on_whoischannels );
- $conns{$mynick}
- ->add_global_handler( 'useronchannel', \&on_useronchannel );
- $conns{$mynick}->add_global_handler( 'whois', \&on_whois );
- $conns{$mynick}->add_global_handler( 'other', \&on_other );
- $conns{$mynick}->add_global_handler( 'disconnect', \&on_disconnect );
- $conns{$mynick}
- ->add_global_handler( [ 251, 252, 253, 254, 255 ], \&on_init );
-
- # $conns{$mynick}->add_global_handler(302, \&on_init); # userhost
- $conns{$mynick}->add_global_handler( 303, \&on_ison ); # notify.
- $conns{$mynick}->add_global_handler( 315, \&on_endofwho );
- $conns{$mynick}->add_global_handler( 422, \&on_endofwho ); # nomotd.
- $conns{$mynick}->add_global_handler( 324, \&on_modeis );
- $conns{$mynick}->add_global_handler( 333, \&on_topicinfo );
- $conns{$mynick}->add_global_handler( 352, \&on_who );
- $conns{$mynick}->add_global_handler( 353, \&on_names );
- $conns{$mynick}->add_global_handler( 366, \&on_endofnames );
- $conns{$mynick}->add_global_handler( 376, \&on_endofmotd )
- ; # on_connect.
- $conns{$mynick}->add_global_handler( 433, \&on_nick_taken );
- $conns{$mynick}->add_global_handler( 439, \&on_targettoofast );
-
- # for proper joinnextChan behaviour
- $conns{$mynick}->add_global_handler( 471, \&on_chanfull );
- $conns{$mynick}->add_global_handler( 473, \&on_inviteonly );
- $conns{$mynick}->add_global_handler( 474, \&on_banned );
- $conns{$mynick}->add_global_handler( 475, \&on_badchankey );
- $conns{$mynick}->add_global_handler( 443, \&on_useronchan );
-
- # end of handler stuff.
+ foreach my $mynick ( sort split ',', $param{'ircNick'} ) {
+ if (!defined $conns{$mynick}) {
+ &status("Connecting to port $port of server $server ($resolve) as $mynick ...");
+ $args{'Nick'} = $mynick;
+ $args{'Username'} = $mynick;
+ $conns{$mynick} = $irc->newconn(%args);
+ # FIXME: connections should happen in the background and get retried per nick
+ #sleep(10.0);
+ if ( !defined $param{'ircHost'} and !defined $conns{$mynick} ) {
+ &ERROR("IRC: $mynick @ $server connection failed.");
+ &ERROR("add \"set ircHost 0.0.0.0\" to your config. If that does not work");
+ &ERROR('Please check /etc/hosts to see if you have a localhost line like:');
+ &ERROR('127.0.0.1 localhost localhost');
+ &ERROR('If this is still a problem, please contact the maintainer.');
+ }
+ if (defined $conns{$mynick}) {
+ # explicit binmode for socket as "use open" does not seem to work here
+ #binmode $conns{$mynick}->{_socket}, ":utf8";
+ #binmode $conns{$mynick}->{_socket}, ":encoding(UTF-8)";
+ # TODO: need to input bytes, but output utf8
+ binmode $conns{$mynick}->{_socket}, ":bytes";
+ binmode $conns{$mynick}->socket, ":bytes";
+
+ $conns{$mynick}->maxlinelen($maxlinelen);
+
+ # handler stuff.
+ $conns{$mynick}->add_global_handler( 'caction', \&on_action );
+ $conns{$mynick}->add_global_handler( 'cdcc', \&on_dcc );
+ $conns{$mynick}->add_global_handler( 'cping', \&on_ping );
+ $conns{$mynick}->add_global_handler( 'crping', \&on_ping_reply );
+ $conns{$mynick}->add_global_handler( 'cversion', \&on_version );
+ $conns{$mynick}->add_global_handler( 'crversion', \&on_crversion );
+ $conns{$mynick}->add_global_handler( 'dcc_open', \&on_dcc_open );
+ $conns{$mynick}->add_global_handler( 'dcc_close', \&on_dcc_close );
+ $conns{$mynick}->add_global_handler( 'chat', \&on_chat );
+ $conns{$mynick}->add_global_handler( 'msg', \&on_msg );
+ $conns{$mynick}->add_global_handler( 'public', \&on_public );
+ $conns{$mynick}->add_global_handler( 'join', \&on_join );
+ $conns{$mynick}->add_global_handler( 'part', \&on_part );
+ $conns{$mynick}->add_global_handler( 'topic', \&on_topic );
+ $conns{$mynick}->add_global_handler( 'invite', \&on_invite );
+ $conns{$mynick}->add_global_handler( 'kick', \&on_kick );
+ $conns{$mynick}->add_global_handler( 'mode', \&on_mode );
+ $conns{$mynick}->add_global_handler( 'nick', \&on_nick );
+ $conns{$mynick}->add_global_handler( 'quit', \&on_quit );
+ $conns{$mynick}->add_global_handler( 'notice', \&on_notice );
+ $conns{$mynick}->add_global_handler( 'whoischannels', \&on_whoischannels );
+ $conns{$mynick}->add_global_handler( 'useronchannel', \&on_useronchannel );
+ $conns{$mynick}->add_global_handler( 'whois', \&on_whois );
+ $conns{$mynick}->add_global_handler( 'other', \&on_other );
+ $conns{$mynick}->add_global_handler( 'disconnect', \&on_disconnect );
+ $conns{$mynick}->add_global_handler( [ 251, 252, 253, 254, 255 ], \&on_init );
+
+ # $conns{$mynick}->add_global_handler(302, \&on_init); # userhost
+ $conns{$mynick}->add_global_handler( 303, \&on_ison ); # notify.
+ $conns{$mynick}->add_global_handler( 315, \&on_endofwho );
+ $conns{$mynick}->add_global_handler( 422, \&on_endofwho ); # nomotd.
+ $conns{$mynick}->add_global_handler( 324, \&on_modeis );
+ $conns{$mynick}->add_global_handler( 333, \&on_topicinfo );
+ $conns{$mynick}->add_global_handler( 352, \&on_who );
+ $conns{$mynick}->add_global_handler( 353, \&on_names );
+ $conns{$mynick}->add_global_handler( 366, \&on_endofnames );
+ $conns{$mynick}->add_global_handler( "001", \&on_connected )
+ ; # on_connect.
+ $conns{$mynick}->add_global_handler( 433, \&on_nick_taken );
+ $conns{$mynick}->add_global_handler( 439, \&on_targettoofast );
+
+ # for proper joinnextChan behaviour
+ $conns{$mynick}->add_global_handler( 471, \&on_chanfull );
+ $conns{$mynick}->add_global_handler( 473, \&on_inviteonly );
+ $conns{$mynick}->add_global_handler( 474, \&on_banned );
+ $conns{$mynick}->add_global_handler( 475, \&on_badchankey );
+ $conns{$mynick}->add_global_handler( 443, \&on_useronchan );
+
+ # end of handler stuff.
+ }
+ }
}
&clearIRCVars();
# should likely listen on a tcp port instead
#$irc->addfh(STDIN, \&on_stdin, 'r');
- &status("starting main loop");
+ &status('starting main loop');
$irc->start;
}
}
if ( &getChanConf( 'silent', $talkchannel )
- and not( &IsFlag("s") and &verifyUser( $who, $nuh{ lc $who } ) ) )
+ and not( &IsFlag('s') and &verifyUser( $who, $nuh{ lc $who } ) ) )
{
&DEBUG("say: silent in $talkchannel, not saying $msg");
return;
sub msg {
my ( $nick, $msg ) = @_;
if ( !defined $nick ) {
- &ERROR("msg: nick == NULL.");
+ &ERROR('msg: nick == NULL.');
return;
}
# some say() end up here (eg +help)
if ( &getChanConf( 'silent', $nick )
- and not( &IsFlag("s") and &verifyUser( $who, $nuh{ lc $who } ) ) )
+ and not( &IsFlag('s') and &verifyUser( $who, $nuh{ lc $who } ) ) )
{
&DEBUG("msg: silent in $nick, not saying $msg");
return;
my $mynick = $conn->nick();
my ( $target, $txt ) = @_;
if ( !defined $txt ) {
- &WARN("action: txt == NULL.");
+ &WARN('action: txt == NULL.');
return;
}
if ( &getChanConf( 'silent', $target )
- and not( &IsFlag("s") and &verifyUser( $who, $nuh{ lc $who } ) ) )
+ and not( &IsFlag('s') and &verifyUser( $who, $nuh{ lc $who } ) ) )
{
&DEBUG("action: silent in $target, not doing $txt");
return;
}
if ( length $txt > 480 ) {
- &status("action: txt too long; truncating.");
+ &status('action: txt too long; truncating.');
chop($txt) while ( length $txt > 480 );
}
sub notice {
my ( $target, $txt ) = @_;
if ( !defined $txt ) {
- &WARN("notice: txt == NULL.");
+ &WARN('notice: txt == NULL.');
return;
}
my ($reply) = @_;
if ( !defined $reply or $reply =~ /^\s*$/ ) {
- &DEBUG("performReply: reply == NULL.");
+ &DEBUG('performReply: reply == NULL.');
return;
}
my ( $who, $reply ) = @_;
if ( !defined $reply or $reply =~ /^\s*$/ ) {
- &WARN("dccsay: reply == NULL.");
+ &WARN('dccsay: reply == NULL.');
return;
}
my ( $chan, $key ) = @_;
$key ||= &getChanConf( 'chankey', $chan );
$key ||= '';
+ my $mynick = $conn->nick();
# forgot for about 2 years to implement channel keys when moving
# over to Net::IRC...
}
#} else {
- &status("joining $b_blue$chan $key$ob");
+ &status("$mynick joining $b_blue$chan $key$ob");
return if ( $conn->join( $chan, $key ) );
return if ( &validChan($chan) );
- &DEBUG("joinchan: join failed. trying connect!");
+ &DEBUG('joinchan: join failed. trying connect!');
&clearIRCVars();
$conn->connect();
sub mode {
my ( $chan, @modes ) = @_;
- my $modes = join( " ", @modes );
+ my $modes = join( ' ', @modes );
if ( &validChan($chan) == 0 ) {
&ERROR("mode: invalid chan => '$chan'.");
sub quit {
my ($quitmsg) = @_;
if ( defined $conn ) {
- &status( "QUIT " . $conn->nick() . " has quit IRC ($quitmsg)" );
+ &status( 'QUIT ' . $conn->nick() . " has quit IRC ($quitmsg)" );
$conn->quit($quitmsg);
}
else {
- &WARN("quit: could not quit!");
+ &WARN('quit: could not quit!');
}
}
my $mynick = $conn->nick();
if ( !defined $newnick ) {
- &ERROR("nick: nick == NULL.");
+ &ERROR('nick: nick == NULL.');
return;
}
if ( !defined $mynick ) {
- &WARN("nick: mynick == NULL.");
+ &WARN('nick: mynick == NULL.');
return;
}
if ($bad) {
&WARN( "Nick: not going to try to change from $mynick to $newnick. ["
. scalar(gmtime)
- . "]" );
+ . ']' );
# hrm... over time we lose track of our own nick.
#return;
# Usage: &joinNextChan();
sub joinNextChan {
my $joined = 0;
- foreach ( sort keys %conns ) {
- $conn = $conns{$_};
- my $mynick = $conn->nick();
- my @join = getJoinChans(1);
+ if (defined $conn) {
+ my $mynick = $conn->nick();
+ my @join = getJoinChans(1);
- if ( scalar @join ) {
- my $chan = shift @join;
- &joinchan($chan);
+ if ( scalar @join ) {
+ my $chan = shift @join;
+ &joinchan($chan);
- if ( my $i = scalar @join ) {
- &status("joinNextChan: $mynick $i chans to join.");
- }
- $joined = 1;
- }
+ if ( my $i = scalar @join ) {
+ &status("joinNextChan: $mynick $i chans to join.");
+ }
+ $joined = 1;
+ }
}
return if $joined;
my $timestr = &Time2String($delta);
# FIXME: @join should be @in instead (hacked to 10)
- #my $rate = sprintf("%.1f", $delta / @in);
- my $rate = sprintf( "%.1f", $delta / 10 );
+ #my $rate = sprintf('%.1f', $delta / @in);
+ my $rate = sprintf( '%.1f', $delta / 10 );
delete $cache{joinTime};
&status("time taken to join all chans: $timestr; rate: $rate sec/join");
$chan =~ tr/A-Z/a-z/; # not lowercase unfortunately.
if ( $chan =~ /^$/ ) {
- &DEBUG("INIC: chan == NULL.");
+ &DEBUG('INIC: chan == NULL.');
return 0;
}
else {
foreach ( keys %channels ) {
next unless (/[A-Z]/);
- &DEBUG("iNIC: hash channels contains mixed cased chan!!!");
+ &DEBUG('iNIC: hash channels contains mixed cased chan!!!');
}
return 0;
}
if ( defined $channels{$chan} or exists $channels{$chan} ) {
if ( $chan =~ /^_?default$/ ) {
- # &WARN("validC: chan cannot be _default! returning 0!");
+ # &WARN('validC: chan cannot be _default! returning 0!');
return 0;
}
my @skip;
my @join;
- # Display "Chans:" only if more than $show seconds since last display
+ # Display 'Chans:' only if more than $show seconds since last display
if ( time() - $lastChansTime > $show ) {
$lastChansTime = time();
- }
- else {
- $show = 0; # Don't display since < 15min since last
+ } else {
+ # Don't display since < 15min since last
+ $show = 0;
}
# can't join any if not connected
$chanconf{$_}{autojoin} = $val;
}
$skip++ if ( lc $val ne lc $nick );
- }
- else {
+ } else {
$skip++;
}
if ($skip) {
push( @skip, $_ );
- }
- else {
+ } else {
if ( defined $channels{$_} or exists $channels{$_} ) {
push( @in, $_ );
- }
- else {
+ } else {
push( @join, $_ );
}
}
}
my $str;
- $str .= ' in:' . join( ',', sort @in ) if scalar @in;
- $str .= ' skip:' . join( ',', sort @skip ) if scalar @skip;
$str .= ' join:' . join( ',', sort @join ) if scalar @join;
+ $str .= ' in:' . join( ',', sort @in ) if scalar @in;
+ $str .= ' skip:' . scalar @skip if scalar @skip;
&status("Chans: ($nick)$str") if ($show);
sub closeDCC {
- # &DEBUG("closeDCC called.");
+ # &DEBUG('closeDCC called.');
my $type;
foreach $type ( keys %dcc ) {