Ircname => $param{'ircName'},
);
$args{'LocalAddr'} = $param{'ircHost'} if ($param{'ircHost'});
+ $args{'Password'} = $param{'ircPasswd'} if ($param{'ircPasswd'});
$conn = $irc->newconn(%args);
if (!defined $conn) {
- &ERROR("irc: conn was not created!defined!!!");
+ &ERROR("internal: perl IRC connection object does not exist.");
return 1;
}
$conn->add_handler('nick', \&on_nick);
$conn->add_handler('quit', \&on_quit);
$conn->add_handler('notice', \&on_notice);
- $conn->add_handler('whoisuser', \&on_whoisuser);
+ $conn->add_handler('whoischannels', \&on_whoischannels);
+ $conn->add_handler('useronchannel', \&on_useronchannel);
+ $conn->add_handler('whois', \&on_whois);
$conn->add_handler('other', \&on_other);
$conn->add_global_handler('disconnect', \&on_disconnect);
$conn->add_global_handler([251,252,253,254,255], \&on_init);
### $conn->add_global_handler([251,252,253,254,255,302], \&on_init);
$conn->add_global_handler(315, \&on_endofwho);
+ $conn->add_global_handler(422, \&on_endofwho); # nomotd.
$conn->add_global_handler(324, \&on_modeis);
$conn->add_global_handler(333, \&on_topicinfo);
$conn->add_global_handler(352, \&on_who);
$conn->add_global_handler(473, \&on_inviteonly);
$conn->add_global_handler(474, \&on_banned);
$conn->add_global_handler(475, \&on_badchankey);
+ $conn->add_global_handler(443, \&on_useronchan);
# end of handler stuff.
$msgsize = length $msg;
}
- if ($msgType =~ /private/i) { # hack.
- $conn->privmsg($nick, $msg);
-
- } else {
- &DEBUG("msg: msgType is unknown!");
- }
+ $conn->privmsg($nick, $msg);
}
}
$chan = lc $1;
}
- &status("joining $b_blue$chan$ob");
-
+ # hopefully validChan is right.
if (&validChan($chan)) {
&status("join: already on $chan");
} else {
+ &status("joining $b_blue$chan$ob");
if (!$conn->join($chan)) {
&DEBUG("joinchan: join failed. trying connect!");
+ &clearIRCVars();
$conn->connect();
}
}
next if ($chan eq "");
$chan =~ tr/A-Z/a-z/; # lowercase.
+ if ($chan !~ /^$mask{chan}$/) {
+ &WARN("part: chan is invalid ($chan)");
+ next;
+ }
+
&status("parting $chan");
if (!&validChan($chan)) {
&WARN("part: not on $chan; doing anyway");
my $rate = sprintf("%.1f", $delta / @c);
delete $cache{joinTime};
- &DEBUG("time taken to join all chans: $timestr; rate: $rate sec/join");
+ &status("time taken to join all chans: $timestr; rate: $rate sec/join");
}
# chanserv check: global channels, in case we missed one.
# Usage: &validChan($chan);
sub validChan {
+ # todo: use $c instead?
my ($chan) = @_;
+ if (!defined $chan or $chan =~ /^\s*$/) {
+ return 0;
+ }
+
if (lc $chan ne $chan) {
&WARN("validChan: lc chan != chan. ($chan); fixing.");
$chan =~ tr/A-Z/a-z/;
}
- if (exists $channels{$chan}) {
+ # it's possible that this check creates the hash if empty.
+ if (defined $channels{$chan} or exists $channels{$chan}) {
+ if ($chan eq "_default") {
+# &WARN("validC: chan cannot be _default! returning 0!");
+ return 0;
+ }
+
return 1;
} else {
return 0;
}
sub clearIRCVars {
-# &DEBUG("clearIRCVars() called!");
+ &DEBUG("clearIRCVars() called!");
undef %channels;
undef %floodjoin;
### Clean it up.
my $delete = 0;
+ my $time = time();
foreach $chan (keys %floodjoin) {
foreach $who (keys %{ $floodjoin{$chan} }) {
- my $time = time() - $floodjoin{$chan}{$who}{Time};
- next unless ($time > 10);
+ my $t = $floodjoin{$chan}{$who}{Time};
+ next unless (defined $t);
+
+ my $delta = $time - $t;
+ next unless ($delta > 10);
+
delete $floodjoin{$chan}{$who};
$delete++;
}