]> git.donarmstrong.com Git - infobot.git/commitdiff
- userAdd, if no mask is given, don't add it.
authordms <dms@c11ca15a-4712-0410-83d8-924469b57eb5>
Wed, 30 May 2001 14:20:40 +0000 (14:20 +0000)
committerdms <dms@c11ca15a-4712-0410-83d8-924469b57eb5>
Wed, 30 May 2001 14:20:40 +0000 (14:20 +0000)
- maskHostMask deals with n!u@h properly - hack!
- if there are no +n users, treat bot as ownerless and waiting for an
  owner.
- set moduleAge time for modules.pl and db_mysql.pl
- msg() deals with msgType = chat.
- getHostMask works half-assed
- ".adduser" without a mask - major and ugly hack!
- DCC CHAT now allows non DCC CHAT commands, req by lazarus

git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk/blootbot@504 c11ca15a-4712-0410-83d8-924469b57eb5

src/DynaConfig.pl
src/IRC/Irc.pl
src/IRC/IrcHooks.pl
src/Misc.pl
src/Modules/News.pl
src/Modules/UserDCC.pl
src/Process.pl
src/modules.pl

index 9fa01ddd57fe6ca88eb9ad7a21c1a081c28b4600..fad4ab27d8303da880bd5ead71ce05ce7c730552 100644 (file)
@@ -552,7 +552,11 @@ sub userAdd {
     $utime_userfile = time();
     $ucount_userfile++;
 
-    $users{$nick}{HOSTS}{$mask} = 1;
+    if (defined $mask and $mask !~ /^\s*$/) {
+       &DEBUG("userAdd: mask => $mask");
+       $users{$nick}{HOSTS}{$mask} = 1;
+    }
+
     $users{$nick}{FLAGS}       ||= $users{_default}{FLAGS};
 
     return 1;
index 48a077df741eb978305ee584f8dd52bf5c9d762e..00269c07a9bbfd5acb2f99fb7d2e41a3fa5d4375 100644 (file)
@@ -229,6 +229,13 @@ sub msg {
        return;
     }
 
+    if ($msgType =~ /chat/i) {
+       # todo: warn that we're using msg() to do DCC CHAT?
+       &dccsay($nick, $msg);
+       # todo: make dccsay deal with flood protection?
+       return;
+    }
+
     &status(">$nick< $msg");
 
     if (&whatInterface() =~ /IRC/) {
@@ -253,7 +260,12 @@ sub msg {
            $msgsize    = length $msg;
        }
 
-       $conn->privmsg($nick, $msg);
+       if ($msgType =~ /private/i) {   # hack.
+           $conn->privmsg($nick, $msg);
+
+       } else {
+           &DEBUG("msg: msgType is unknown!");
+       }
     }
 }
 
@@ -853,7 +865,12 @@ sub joinfloodCheck {
 sub getHostMask {
     my($n) = @_;
 
-    &FIXME("getHostMask($n) called...");
+    if (exists $nuh{$n}) {
+       return &makeHostMask($nuh{$n});
+    } else {
+       $cache{on_who_Hack} = 1;
+       &rawout("WHO $n");
+    }
 }
 
 1;
index d7277de99e0a65ced51c6fcf915e92b49b3e3483..ece1314ff9e0158147f5cf163ec66f1ce57e1d80 100644 (file)
@@ -1061,6 +1061,7 @@ sub on_who {
        $cache{nuhInfo}{lc $args[5]}{Nick} = $args[5];
        $cache{nuhInfo}{lc $args[5]}{User} = $args[2];
        $cache{nuhInfo}{lc $args[5]}{Host} = $args[3];
+       $cache{nuhInfo}{lc $args[5]}{NUH}  = "$args[5]!$args[2]\@$args[3]";
        return;
     }
 
index b03bef73ea7ba4da80421f2b1c8020607349dea3..6264b00b872453ce9995d17fa4e38c1694f4b716 100644 (file)
@@ -467,15 +467,21 @@ sub isStale {
 
 # Usage: &makeHostMask($host);
 sub makeHostMask {
-    my ($host) = @_;
+    my ($host) = @_;
+    my $nu     = "";
+
+    if ($host =~ s/^(\S+!\S+\@)//) {
+       &DEBUG("mHM: detected nick!user\@ for host arg; fixing");
+       $nu = $1;
+    }
 
     if ($host =~ /^$mask{ip}$/) {
-       return "$1.$2.$3.*";
+       return $nu."$1.$2.$3.*";
     }
 
     my @array = split(/\./, $host);
-    return $host if (scalar @array <= 3);
-    return "*.".join('.',@{array}[1..$#array]);
+    return $nu.$host if (scalar @array <= 3);
+    return $nu."*.".join('.',@{array}[1..$#array]);
 }
 
 # Usage: &makeRandom(int);
index 64ca9ee76dc733adfab0d9934db010acaa96cbff..a112d09269ee4ad25ed4aed7312b5d679e518304 100644 (file)
@@ -690,14 +690,11 @@ sub set {
 
 sub latest {
     my($tchan, $flag) = @_;
-    &::DEBUG("news: latest(): who => $who, ::who => $::who");
 
     # hack hack hack.
     $chan      ||= $tchan;
     $who       = $::who;
 
-    &::DEBUG("news: latest(): who => $who, ::who => $::who");
-
     # todo: if chan = undefined, guess.
 #    if (!exists $::news{$chan}) {
     if (!exists $::channels{$chan}) {
index 58c67b48ac3b75acf6e3564d57293462b8e80447..d67fa3660a4e94a1db2752e573348fd6f63426ec 100644 (file)
@@ -1264,14 +1264,34 @@ sub userDCC {
        if ($state) {                   # adduser.
            if (scalar @args == 1) {
                $args[1]        = &getHostMask($args[0]);
-               if (!defined $args[1]) {
-                   &ERROR("could not get hostmask?");
-                   return;
-               }
+               &pSReply("Attemping to guess $args[0]'s hostmask...");
+
+               # crude hack... crappy Net::IRC
+               $conn->schedule(5, sub {
+       # hopefully this is right.
+       my $nick = (keys %{ $cache{nuhInfo} })[0];
+       if (!defined $nick) {
+           &pSReply("couldn't get nuhinfo... adding user without a hostmask.");
+           &userAdd($nick);
+           return;
+       }
+
+       my $mask = &makeHostMask( $cache{nuhInfo}{$nick}{NUH} );
+
+       if ( &userAdd($nick, $mask) ) { # success.
+               &pSReply("Added $nick with flags $users{$nick}{FLAGS}");
+               my @hosts = keys %{ $users{$nick}{HOSTS} };
+               &pSReply("hosts: @hosts");
+       }
+});
+               return;
            }
 
+           &DEBUG("args => @args");
            if ( &userAdd(@args) ) {    # success.
-               &pSReply("Added $args[0]...");
+               &pSReply("Added $args[0] with flags $users{$args[0]}{FLAGS}");
+               my @hosts = keys %{ $users{$args[0]}{HOSTS} };
+               &pSReply("hosts: @hosts");
 
            } else {                    # failure.
                &pSReply("User $args[0] already exists");
@@ -1318,6 +1338,19 @@ sub userDCC {
        return;
     }
 
+    # quite a cool hack: reply in DCC CHAT.
+    $msgType = "chat";
+
+    my $done = 0;
+    $done++ if &parseCmdHook("main", $message);
+    $done++ if &parseCmdHook("extra", $message);
+    $done++ unless (&Modules());
+
+    if ($done) {
+       &DEBUG("running non DCC CHAT command inside DCC CHAT!");
+       return;
+    }
+
     return "REPLY";
 }
 
index 81c29a98bb9ea1446f654eb29c768c5e5b5abb2a..4591401acce5208499a28df688f53f830d50b08e 100644 (file)
@@ -134,7 +134,13 @@ sub process {
        }
 
        # todo: use &getUser()?
-       my $first       = (scalar keys %users < 2) ? 1 : 0;
+       my $first       = 1;
+       foreach (keys %users) {
+           if ($users{$_}{FLAGS} =~ /n/) {
+               $first = 0;
+               last;
+           }
+       }
 
        if (!exists $users{$who} and !$first) {
            &pSReply("nick $who is not in user list.");
index 162279d65c6124a9c5e677edfeefe2dab5eb34f5..facd28b44baaec7dedf4032ce471d67f5e8dbfce 100644 (file)
@@ -86,6 +86,8 @@ sub loadCoreModules {
 sub loadDBModules {
     &status("Loading DB modules...");
 
+    $moduleAge{"$bot_src_dir/modules.pl"} = time();
+
     if ($param{'DBType'} =~ /^mysql$/i) {
        eval "use DBI";
        if ($@) {
@@ -96,6 +98,7 @@ sub loadDBModules {
 
        &status("  using MySQL support.");
        require "$bot_src_dir/db_mysql.pl";
+       $moduleAge{"$bot_src_dir/db_mysql.pl"} = time();
 
     } elsif ($param{'DBType'} =~ /^pgsql$/i) {
        eval "use Pg";