]> git.donarmstrong.com Git - infobot.git/blobdiff - src/IRC/IrcHooks.pl
A round of fixes:
[infobot.git] / src / IRC / IrcHooks.pl
index a5a81566d902789c4da7b48d0dcd6ceb6b5d80a1..461d9de730b69a5ba45c33c878bc8d6fc60d4b4e 100644 (file)
@@ -65,10 +65,12 @@ sub on_chat {
 
        ### TODO: prevent users without CRYPT chatting.
        if (!defined $crypto) {
-           &DEBUG("chat: no pass required.");
-###        $success++;
+           &DEBUG("todo: dcc close chat");
+           &msg($who, "nope, no guest logins allowed...");
+           return;
+       }
 
-       } elsif (&ckpasswd($msg, $crypto)) {
+       if (&ckpasswd($msg, $crypto)) {
            # stolen from eggdrop.
            $self->privmsg($sock, "Connected to $ident");
            $self->privmsg($sock, "Commands start with '.' (like '.quit' or '.help')");
@@ -133,6 +135,20 @@ sub on_endofmotd {
     # update IRCStats.
     $ircstats{'ConnectTime'}   = time();
     $ircstats{'ConnectCount'}++;
+    $ircstats{'OffTime'}       += time() - $ircstats{'DisconnectTime'}
+                       if (defined $ircstats{'DisconnectTime'});
+
+    # first time run.
+    if (!exists $users{_default}) {
+       &status("First time run... adding _default user.");
+       $users{_default}{FLAGS} = "mrt";
+       $users{_default}{HOSTS} = "*!*@*";
+    }
+
+    if (scalar keys %users < 2) {
+       &status("Ok... now /msg $ident PASS <pass> to get master access through DCC CHAT.");
+    }
+    # end of first time run.
 
     if (&IsChanConf("wingate")) {
        my $file = "$bot_base_dir/$param{'ircUser'}.wingate";
@@ -301,6 +317,7 @@ sub on_disconnect {
     $ircstats{'DisconnectTime'}                = time();
     $ircstats{'DisconnectReason'}      = $what;
     $ircstats{'DisconnectCount'}++;
+    $ircstats{'TotalTime'}     += time() - $ircstats{'ConnectTime'};
 
     # clear any variables on reconnection.
     $nickserv = 0;
@@ -342,6 +359,9 @@ sub on_endofnames {
 
     if (scalar @joinchan) {    # remaining channels to join.
        &joinNextChan();
+    } else {
+       &DEBUG("running ircCheck to get chanserv ops.");
+       &ircCheck();
     }
 
     return unless (&IsChanConf("chanServ_ops") > 0);
@@ -440,13 +460,13 @@ sub on_join {
        my $reason = "no reason";
        foreach ($chan, "*") {
            next unless (exists $bans{$_});
-           next unless (exists $bans{$_}{$mask});
+           next unless (exists $bans{$_}{$ban});
 
-           my @array   = @{ $bans{$_}{$mask} };
-           $reason     ||= $array[4];
+           my @array   = @{ $bans{$_}{$ban} };
+
+           $reason     = $array[4] if ($array[4]);
            last;
        }
-       &DEBUG("on_join: ban: reason => '$reason'.");
 
        &ban($ban, $chan);
        &kick($who, $chan, $reason);
@@ -460,6 +480,12 @@ sub on_join {
                    $user =~ /^r(oo|ew|00)t$/i &&
                    $channels{$chan}{'o'}{$ident});
 
+    ### NEWS:
+    if (&IsChanConf("news") && &IsChanConf("newsKeepRead")) {
+       # todo: what if it hasn't been loaded?
+       &News::latest($chan);
+    }
+
     ### chanlimit check.
     &chanLimitVerify($chan);
 
@@ -535,6 +561,15 @@ sub on_msg {
     ($user,$host) = split(/\@/, $event->userhost);
     $uh                = $event->userhost();
     $nuh       = $nick."!".$uh;
+    $msgtime   = time();
+
+    if ($nick eq $ident) { # hopefully ourselves.
+       if ($msg eq "TEST") {
+           &status("IRCTEST: Yes, we're alive.");
+           delete $cache{connect};
+           return;
+       }
+    }
 
     &hookMsg('private', undef, $nick, $msg);
 }
@@ -601,7 +636,11 @@ sub on_notice {
     if ($nick =~ /^NickServ$/i) {              # nickserv.
        &status("NickServ: <== '$args'");
 
-       if ($args =~ /^This nickname is registered/i) {
+       my $check       = 0;
+       $check++        if ($args =~ /^This nickname is registered/i);
+       $check++        if ($args =~ /nickname.*owned/i);
+
+       if ($check) {
            &status("nickserv told us to register; doing it.");
            if (&IsParam("nickServ_pass")) {
                &status("NickServ: ==> Identifying.");
@@ -700,7 +739,6 @@ sub on_public {
        }
     }
 
-
     $msgtime = time();
     $lastWho{$chan} = $nick;
     ### TODO: use $nick or lc $nick?
@@ -1025,6 +1063,8 @@ sub hookMsg {
                push(@who, grep /^\Q$message\E$/i, keys %{ $flood{$_} });
            }
 
+           return if ($lobotomized);
+
            if (scalar @who) {
                &msg($who, "you already said what ".
                                join(' ', @who)." have said.");
@@ -1161,8 +1201,8 @@ sub chanLimitVerify {
        ### todo: check if we have ops.
        ### todo: if not, check if nickserv/chanserv is avail.
        ### todo: unify code with chanlimitcheck()
-       if ($delta > 3) {
-           &WARN("clc: nowl($nowl) > l($l) - 3");
+       if ($delta > 5) {
+           &status("clc: big change in limit; changing.");
            &rawout("MODE $chan +l ".($nowl+$plus) );
        }
     }