X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2FIRC%2FIrcHooks.pl;h=74087d0b474acd2628a64b30e9b078d5e056dc5d;hb=c68ac9b2d4b88535c1a2cfa695f6c4f683f0373c;hp=b4b31f6d8cc8f0a1e82a5044ec2f2b329251f26e;hpb=34a4d11667b0a734343f82d2adbaac23f738ad18;p=infobot.git diff --git a/src/IRC/IrcHooks.pl b/src/IRC/IrcHooks.pl index b4b31f6..74087d0 100644 --- a/src/IRC/IrcHooks.pl +++ b/src/IRC/IrcHooks.pl @@ -55,6 +55,7 @@ sub on_chat { $orig{message} = $msg; $nuh = $nuh{$who}; $uh = (split /\!/, $nuh)[1]; + $h = (split /\@/, $uh)[1]; $addressed = 1; $msgType = 'chat'; @@ -188,6 +189,9 @@ sub on_endofmotd { @joinchan = &getJoinChans(1); } + # ok, we're free to do whatever we want now. go for it! + $running = 1; + # unfortunately, Net::IRC does not implement this :( # invalid command... what is it? # &rawout("NOTIFY $ident"); @@ -353,18 +357,28 @@ sub on_disconnect { $ircstats{'DisconnectTime'} = time(); $ircstats{'DisconnectReason'} = $what; $ircstats{'DisconnectCount'}++; - $ircstats{'TotalTime'} += time() - $ircstats{'ConnectTime'}; + $ircstats{'TotalTime'} += time() - $ircstats{'ConnectTime'} + if ($ircstats{'ConnectTime'}); # clear any variables on reconnection. $nickserv = 0; + &DEBUG("on_disconnect: 1"); &clearIRCVars(); + &DEBUG("on_disconnect: 2"); + + if (!defined $self) { + &WARN("on_disconnect: self is undefined! WTF"); + &DEBUG("running function irc... lets hope this works."); + &irc(); + return; + } + if (!$self->connect()) { + &DEBUG("on_disconnect: 3"); &WARN("not connected? help me. gonna call ircCheck() in 60s"); &clearIRCVars(); &ScheduleThis(1, "ircCheck"); -# &ScheduleThis(10, "ircCheck"); -# &ScheduleThis(30, "ircCheck"); } } @@ -425,9 +439,10 @@ sub on_invite { ### TODO: join key. if (exists $chanconf{$chan}) { + # it's still buggy :/ if (&validChan($chan)) { &msg($who, "i'm already in \002$chan\002."); - next; +# return; } &status("invited to $b_blue$chan$ob by $b_cyan$nick$ob"); @@ -526,6 +541,7 @@ sub on_join { if (defined( my $whojoin = $cache{join}{$chan} )) { &msg($chan, "Okay, I'm here. (courtesy of $whojoin)"); delete $cache{join}{$chan}; + &joinNextChan(); # hack. } ### TODO: move this to &joinchan()? @@ -614,6 +630,7 @@ sub on_msg { $uh = $event->userhost(); $nuh = $nick."!".$uh; $msgtime = time(); + $h = $host; if ($nick eq $ident) { # hopefully ourselves. if ($msg eq "TEST") { @@ -793,8 +810,14 @@ sub on_ping { sub on_ping_reply { my ($self, $event) = @_; - my $nick = $event->nick; - my $lag = time() - ($event->args)[1]; + my $nick = $event->nick; + my $t = ($event->args)[1]; + if (!defined $t) { + &WARN("on_ping_reply: t == undefined."); + return; + } + + my $lag = time() - $t; &status(">>> ${b_green}CTCP PING$ob reply from $b_cyan$nick$ob: $lag sec."); } @@ -810,6 +833,7 @@ sub on_public { $msgType = "public"; # todo: move this out of hookMsg to here? ($user,$host) = split(/\@/, $uh); + $h = $host; # rare case should this happen - catch it just in case. if ($bot_pid != $$) { @@ -858,7 +882,7 @@ sub on_public { ); - &dbReplace("stats", %hash); + &dbReplace("stats", "nick", %hash); # does not work, atleast with old mysql!!! :( # &dbReplace("stats", (nick => $who, type => $x, -counter => "counter+1") ); } @@ -882,7 +906,7 @@ sub on_quit { ### $chan = $reason; # no. my $count = 0; - foreach (keys %channels) { + foreach (grep !/^_default$/, keys %channels) { # fixes inconsistent chanstats bug #1. if (!&IsNickInChan($nick,$_)) { $count++; @@ -1034,7 +1058,7 @@ sub on_crversion { } if (grep /^\Q$nick\E$/i, @vernick) { - &WARN("nick $nick found in vernick; skipping."); + &WARN("nick $nick found in vernick ($ver); skipping."); return; } push(@vernick, $nick); @@ -1048,18 +1072,25 @@ sub on_crversion { } elsif ($ver =~ /irssi/i) { $ver{irssi}{$nick} = $ver; - } elsif ($ver =~ /epic/i) { + } elsif ($ver =~ /epic|(Third Eye)/i) { $ver{epic}{$nick} = $ver; + } elsif ($ver =~ /ircII|PhoEniX/i) { + $ver{ircII}{$nick} = $ver; + } elsif ($ver =~ /mirc/i) { - &DEBUG("verstats: mirc: $nick => '$ver'."); +# &DEBUG("verstats: mirc: $nick => '$ver'."); $ver{mirc}{$nick} = $ver; +# ok... then we get to the lesser known/used clients. } elsif ($ver =~ /ircle/i) { $ver{ircle}{$nick} = $ver; - } elsif ($ver =~ /ircII/i) { - $ver{ircII}{$nick} = $ver; + } elsif ($ver =~ /chatzilla/i) { + $ver{chatzilla}{$nick} = $ver; + + } elsif ($ver =~ /pirch/i) { + $ver{pirch}{$nick} = $ver; } elsif ($ver =~ /sirc /i) { $ver{sirc}{$nick} = $ver; @@ -1138,7 +1169,8 @@ sub on_chanfull { my ($self, $event) = @_; my @args = $event->args; - &DEBUG("on_chanfull: args => @args"); + &status(">>> chanfull/$b_blue$args[1]$ob"); + &joinNextChan(); } @@ -1146,15 +1178,18 @@ sub on_inviteonly { my ($self, $event) = @_; my @args = $event->args; - &DEBUG("on_inviteonly: args => @args"); + &status(">>> inviteonly/$b_cyan$args[1]$ob"); + &joinNextChan(); } sub on_banned { my ($self, $event) = @_; my @args = $event->args; + my $chan = $args[1]; + + &status(">>> banned/$b_blue$chan$ob $b_cyan$args[0]$ob"); - &DEBUG("on_banned: args => @args"); &joinNextChan(); } @@ -1166,4 +1201,12 @@ sub on_badchankey { &joinNextChan(); } +sub on_useronchan { + my ($self, $event) = @_; + my @args = $event->args; + + &DEBUG("on_useronchan: args => @args"); + &joinNextChan(); +} + 1;