]> git.donarmstrong.com Git - infobot.git/blobdiff - src/IRC/IrcHooks.pl
ws
[infobot.git] / src / IRC / IrcHooks.pl
index 8f6d0214ea99a1e124fa6ed3a923dbe2b382f8bb..9c9d87c06f70531924671117d36234add002135f 100644 (file)
@@ -5,8 +5,6 @@
 #        NOTE: Based on code by Kevin Lenzo & Patrick Cole  (c) 1997
 #
 
-# use strict;  # TODO
-
 # GENERIC. TO COPY.
 sub on_generic {
     my ($self, $event) = @_;
@@ -91,7 +89,7 @@ sub on_chat {
            &DEBUG("chat: sock => '$sock'.");
 ###        $sock->close();
            delete $dcc{'CHAT'}{$nick};
-           &DEBUG("chat: after closing sock. FIXME");
+           &FIXME("chat: after closing sock.");
            ### BUG: close seizes bot. why?
        }
 
@@ -138,6 +136,7 @@ sub on_ison {
     my ($self, $event) = @_;
     my $x1 = ($event->args)[0];
     my $x2 = ($event->args)[1];
+    $x2 =~ s/\s$//;
 
 #    &nick( $param{'ircNick'} );
 
@@ -148,11 +147,12 @@ sub on_endofmotd {
     my ($self) = @_;
 
     # update IRCStats.
-    $ident     ||= $param{'ircNick'};  # hack.
+    $ident = $param{'ircNick'};
     $ircstats{'ConnectTime'}   = time();
     $ircstats{'ConnectCount'}++;
-    $ircstats{'OffTime'}       += time() - $ircstats{'DisconnectTime'}
-                       if (defined $ircstats{'DisconnectTime'});
+    if (defined $ircstats{'DisconnectTime'}) {
+       $ircstats{'OffTime'}    += time() - $ircstats{'DisconnectTime'};
+    }
 
     # first time run.
     if (!exists $users{_default}) {
@@ -327,7 +327,7 @@ sub on_dcc_open_chat {
     my(undef, $nick, $sock) = @_;
 
     if ($nuh{$nick} eq "GETTING-NOW") {
-       &DEBUG("getting nuh for $nick failed. FIXME.");
+       &FIXME("getting nuh for $nick failed.");
        return;
     }
 
@@ -374,9 +374,7 @@ sub on_disconnect {
     # 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");
@@ -476,7 +474,7 @@ sub on_join {
     }
 
     $chanstats{$chan}{'Join'}++;
-    $userstats{lc $who}{'Join'} = time() if (&IsChanConf("seenStats"));
+    $userstats{lc $who}{'Join'} = time() if (&IsChanConf("seenStats") > 0);
     $cache{maxpeeps}{$chan}    = $i if ($i > $j);
 
     &joinfloodCheck($who, $chan, $event->userhost);
@@ -570,7 +568,7 @@ sub on_join {
     ### ROOTWARN:
     &rootWarn($who,$user,$host,$chan) if (
                &IsChanConf("rootWarn") &&
-               $user =~ /^r(oo|ew|00)t$/i
+               $user =~ /^~?r(oo|ew|00)t$/i
     );
 
     ### NEWS:
@@ -582,6 +580,11 @@ sub on_join {
        }
     }
 
+    ### botmail:
+    if (&IsChanConf("botmail")) {
+       &botmail::check(lc $who);
+    }
+
     ### wingate:
     &wingateCheck();
 }
@@ -674,7 +677,7 @@ sub on_names {
 
 sub on_nick {
     my ($self, $event) = @_;
-    my $nick = $event->nick();
+    my $nick   = $event->nick();
     my $newnick = ($event->args)[0];
 
     if (exists $netsplit{lc $newnick}) {
@@ -711,8 +714,15 @@ sub on_nick {
 
 sub on_nick_taken {
     my ($self) = @_;
-    my $nick   = $self->nick;
-    my $newnick = $nick."-";
+    my $nick   = $self->nick();
+    my $newnick = $nick.int(rand 10);
+
+    if ($nick eq $ident) {
+       &DEBUG("on_nick_tane: nick eq ident... wtf?");
+       return;
+    }
+
+    &DEBUG("on_nick_taken: ident => $ident");
 
     &status("nick taken ($nick); preparing nick change.");
 
@@ -804,11 +814,10 @@ sub on_part {
     $chanstats{$chan}{'Part'}++;
     &delUserInfo($nick,$chan);
     if ($nick eq $ident) {
-       &DEBUG("on_part: ok, I left $chan... clearChanVars...");
        &clearChanVars($chan);
     }
 
-    if (!&IsNickInAnyChan($nick) and &IsChanConf("seenStats")) {
+    if (!&IsNickInAnyChan($nick) and &IsChanConf("seenStats") > 0) {
        delete $userstats{lc $nick};
     }
 
@@ -859,48 +868,45 @@ sub on_public {
     $msgtime           = time();
     $lastWho{$chan}    = $nick;
     ### TODO: use $nick or lc $nick?
-    if (&IsChanConf("seenStats")) {
+    if (&IsChanConf("seenStats") > 0) {
        $userstats{lc $nick}{'Count'}++;
        $userstats{lc $nick}{'Time'} = time();
     }
 
-    # would this slow things down?
-    if ($_ = &getChanConf("ircTextCounters")) {
-       my $time = time();
-
-       foreach (split /[\s]+/) {
-           my $x = $_;
-
-           # either full word or ends with a space, etc...
-           next unless ($msg =~ /^\Q$x\E[\$\s!.]/i);
+    # cache it.
+    my $time   = time();
+    if (!$cache{ircTextCounters}) {
+       &DEBUG("caching ircTextCounters for first time.");
+       my @str = split(/\s+/, &getChanConf("ircTextCounters"));
+       for (@str) { $_ = quotemeta($_); }
+       $cache{ircTextCounters} = join('|', @str);
+    }
 
-           &VERB("textcounters: $x matched for $who",2);
-           my $c = $chan || "PRIVATE";
+    my $str = $cache{ircTextCounters};
+    if ($str && $msg =~ /^($str)[\s!\.]?$/i) {
+       my $x = $1;
 
-           my ($v,$t) = &dbGet("stats", "counter,time",
-                       "nick=". &dbQuote($who)
-                       ." AND type=".&dbQuote($x)
-                       ." AND channel=".&dbQuote($c)
-           );
-           $v++;
+       &VERB("textcounters: $x matched for $who",2);
+       my $c = $chan || "PRIVATE";
 
-           # don't allow ppl to cheat the stats :-)
-           next unless (defined $t);
-           next unless ($time - $t > 10);
+       # better to do "counter=counter+1".
+       # but that will avoid time check.
+       my ($v,$t) = &sqlSelect("stats", "counter,time", {
+                       nick    => $who,
+                       type    => $x,
+                       channel => $c,
+       } );
+       $v++;
 
-           my %hash = (
+       # don't allow ppl to cheat the stats :-)
+       if (defined $t && $time - $t > 60) {
+           &sqlReplace("stats", {
                nick    => $who,
                type    => $x,
                channel => $c,
-
                time    => $time,
                counter => $v,
-           );
-               
-
-           &dbReplace("stats", "nick", %hash);
-           # does not work, atleast with old mysql!!! :(
-#          &dbReplace("stats", (nick => $who, type => $x, -counter => "counter+1") );
+           } );
        }
     }
 
@@ -950,7 +956,7 @@ sub on_quit {
 
        $netsplit{lc $nick} = time();
        if (!exists $netsplitservers{$1}{$2}) {
-           &status("netsplit detected between $1 and $2 at [".scalar(localtime)."]");
+           &status("netsplit detected between $1 and $2 at [".scalar(gmtime)."]");
            $netsplitservers{$1}{$2} = time();
        }
     }
@@ -971,14 +977,14 @@ sub on_quit {
        # well.. it's good but weird that this has happened - lets just
        # be quiet about it.
     }
-    delete $userstats{lc $nick} if (&IsChanConf("seenStats"));
+    delete $userstats{lc $nick} if (&IsChanConf("seenStats") > 0);
     delete $chanstats{lc $nick};
     ###
 
     # does this work?
     if ($nick !~ /^\Q$ident\E$/ and $nick =~ /^\Q$param{'ircNick'}\E$/i) {
        &status("nickchange: own nickname became free; changing.");
-       &nick($param{'ircNick'});
+       &nick( $param{'ircNick'} );
     }
 }
 
@@ -1053,7 +1059,7 @@ sub on_topicinfo {
 
     my $timestr;
     if (time() - $time > 60*60*24) {
-       $timestr        = "at ". localtime $time;
+       $timestr        = "at ". gmtime $time;
     } else {
        $timestr        = &Time2String(time() - $time) ." ago";
     }