]> git.donarmstrong.com Git - infobot.git/commitdiff
- IsHostMatch: check for NULL.
authordms <dms@c11ca15a-4712-0410-83d8-924469b57eb5>
Sat, 5 Jan 2002 14:08:47 +0000 (14:08 +0000)
committerdms <dms@c11ca15a-4712-0410-83d8-924469b57eb5>
Sat, 5 Jan 2002 14:08:47 +0000 (14:08 +0000)
- forget: reduced by half-tab formatting.
- forget: added isau (is_author)
- forget: limitage is now a scale of 0->$limit (1->100%)
- unforget: moved !$result check after $check check.
- unforget: confirm whether it was recovered or not.
- debiancheck: moved back to miscCheck2

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

src/Factoids/Core.pl
src/IRC/Schedulers.pl
src/Misc.pl

index 067e49428e3c8d399f71737093c265c6c6d99d78..41ed537399d9de603c3aabbf2b66a14621eec15c 100644 (file)
@@ -145,128 +145,136 @@ sub FactoidStuff {
        $faqtoid =~ tr/A-Z/a-z/;
        my $result = &getFactoid($faqtoid);
 
-       if (defined $result) {
-           my $author  = &getFactInfo($faqtoid, "created_by");
-           my $count   = &getFactInfo($faqtoid, "requested_count") || 0;
-           my $limit   = &getChanConfDefault(
+       # if it doesn't exist, well... it doesn't!
+       if (!defined $result) {
+           &performReply("i didn't have anything called '$faqtoid'");
+           return;
+       }
+
+       my $author      = &getFactInfo($faqtoid, "created_by");
+       my $count       = &getFactInfo($faqtoid, "requested_count") || 0;
+       my $limit       = &getChanConfDefault(
                                "factoidPreventForgetLimit", 100, $chan);
-           my $limitage = &getChanConfDefault(
+       my $limitage    = &getChanConfDefault(
                                "factoidPreventForgetLimitTime", 180, $chan);
-           my $age     = time() - &getFactInfo($faqtoid, "created_time");
+       my $t           = &getFactInfo($faqtoid, "created_time") || 0;
+       my $age         = time() - $t;
 
-           if (IsFlag("r") ne "r") {
-               &msg($who, "you don't have access to remove factoids");
-               return;
-           }
+       # lets scale limitage from 1 (nearly 0) to $limit (full time).
+       $limitage       = $limitage*($count+1)/$limit if ($count < $limit);
+       # isauthor and isop.
+       my $isau        = (defined $author and &IsHostMatch($author) == 2) ? 1 : 0;
+       my $isop        = (&IsFlag("o") eq "o") ? 1 : 0;
 
-           return 'locked factoid' if (&IsLocked($faqtoid) == 1);
-           my $isop = (&IsFlag("o") eq "o") ? 1 : 0;
+       if (IsFlag("r") ne "r") {
+           &msg($who, "you don't have access to remove factoids");
+           return;
+       }
 
-           ### lets go do some checking.
+       return 'locked factoid' if (&IsLocked($faqtoid) == 1);
 
-           # factoidPreventForgetLimitTime:
-           if (!$isop and $age/(60*60*24) > $limitage) {
-               &msg($who, "cannot remove factoid since it is protected by Time.");
-               return;
-           }
+       ###
+       ### lets go do some checking.
+       ###
 
-           # factoidPreventForgetLimit:
-           if (!$isop and $limit and $count > $limit) {
-               &msg($who, "will not delete '$faqtoid', count > limit ($count > $limit)");
-               return;
-           }
+       # factoidPreventForgetLimitTime:
+       if (!($isop or $isau) and $age/(60*60*24) > $limitage) {
+           &msg($who, "cannot remove factoid '$faqtoid' since it is protected by Time.");
+           return;
+       }
 
-           # this may eat some memory.
-           # prevent deletion if other factoids redirect to it.
-           # todo: use hash instead of array.
-           my @list;
-           if (&getChanConf("factoidPreventForgetRedirect")) {
-               &status("Factoids/Core: forget: checking for redirect factoids");
-               @list = &searchTable("factoids", "factoid_key",
-                               "factoid_value", "^<REPLY> see ");
-           }
+       # factoidPreventForgetLimit:
+       if (!($isop or $isau) and $limit and $count > $limit) {
+           &msg($who, "will not delete '$faqtoid', count > limit ($count > $limit)");
+           return;
+       }
 
-           my $match = 0;
-           for (@list) {
-               my $f = $_;
-               my $v = &getFactInfo($f, "factoid_value");
-               my $fsafe = quotemeta($faqtoid);
-               next unless ($v =~ /^<REPLY> ?see( also)? $fsafe\.?$/i);
+       # this may eat some memory.
+       # prevent deletion if other factoids redirect to it.
+       # todo: use hash instead of array.
+       my @list;
+       if (&getChanConf("factoidPreventForgetRedirect")) {
+           &status("Factoids/Core: forget: checking for redirect factoids");
+           @list = &searchTable("factoids", "factoid_key",
+                       "factoid_value", "^<REPLY> see ");
+       }
 
-               &DEBUG("Factoids/Core: match! ($f || $faqtoid)");
+       my $match = 0;
+       for (@list) {
+           my $f = $_;
+           my $v = &getFactInfo($f, "factoid_value");
+           my $fsafe = quotemeta($faqtoid);
+           next unless ($v =~ /^<REPLY> ?see( also)? $fsafe\.?$/i);
 
-               $match++;
-           }
-           # todo: warn for op aswell, but allow force delete.
-           if (!$isop and $match) {
-               &msg($who, "uhm, other (redirection) factoids depend on this one.");
-               return;
-           }
+           &DEBUG("Factoids/Core: match! ($f || $faqtoid)");
 
-           # minimize abuse.
-           my $faqauth = &getFactInfo($faqtoid, "created_by");
-           if (!$isop and &IsHostMatch($faqauth) != 2) {
-               $cache{forget}{$h}++;
+           $match++;
+       }
+       # todo: warn for op aswell, but allow force delete.
+       if (!$isop and $match) {
+           &msg($who, "uhm, other (redirection) factoids depend on this one.");
+           return;
+       }
 
-               # warn.
-               if ($cache{forget}{$h} > 3) {
-                   &msg($who, "Stop abusing forget!");
-               }
+       # minimize abuse.
+       if (!$isop and &IsHostMatch($author) != 2) {
+           $cache{forget}{$h}++;
 
-               # ignore.
-               # todo: make forget limit configurable.
-               # todo: make forget ignore time configurable.
-               if ($cache{forget}{$h} > 5) {
-                   &ignoreAdd(&makeHostMask($nuh), "*", 3*24*60*60, "abuse of forget");
-                   &msg($who, "forget: Suck it!");
-               }
+           # warn.
+           if ($cache{forget}{$h} > 3) {
+               &msg($who, "Stop abusing forget!");
            }
 
-           # lets do it!
+           # ignore.
+           # todo: make forget limit configurable.
+           # todo: make forget ignore time configurable.
+           if ($cache{forget}{$h} > 5) {
+               &ignoreAdd(&makeHostMask($nuh), "*", 3*24*60*60, "abuse of forget");
+               &msg($who, "forget: Suck it!");
+           }
+       }
 
-           if (&IsParam("factoidDeleteDelay") or &IsChanConf("factoidDeleteDelay")) {
-               if (!$isop and $faqtoid =~ / #DEL#$/) {
-                   &msg($who, "cannot delete it ($faqtoid).");
-                   return;
-               }
+       # lets do it!
 
-               &status("forgot (safe delete): '$faqtoid' - ". scalar(localtime));
-               ### TODO: check if the "backup" exists and overwrite it
-               my $check = &getFactoid("$faqtoid #DEL#");
+       if (&IsParam("factoidDeleteDelay") or &IsChanConf("factoidDeleteDelay")) {
+           if (!($isop or $isau) and $faqtoid =~ / #DEL#$/) {
+               &msg($who, "cannot delete it ($faqtoid).");
+               return;
+           }
 
-               if (!defined $check or $check =~ /^\s*$/) {
-                   if ($faqtoid !~ / #DEL#$/) {
-                       my $new = $faqtoid." #DEL#";
+           &status("forgot (safe delete): '$faqtoid' - ". scalar(localtime));
+           ### TODO: check if the "backup" exists and overwrite it
+           my $check = &getFactoid("$faqtoid #DEL#");
 
-                       my $backup = &getFactoid($new);
-                       if ($backup) {
-                           &DEBUG("forget: not overwriting backup: $faqtoid");
-                       } else {
-                           &status("forget: backing up '$faqtoid'");
-                           &setFactInfo($faqtoid, "factoid_key", $new);
-                           &setFactInfo($new, "modified_by", $who);
-                           &setFactInfo($new, "modified_time", time());
-                       }
+           if (!defined $check or $check =~ /^\s*$/) {
+               if ($faqtoid !~ / #DEL#$/) {
+                   my $new = $faqtoid." #DEL#";
 
+                   my $backup = &getFactoid($new);
+                   if ($backup) {
+                       &DEBUG("forget: not overwriting backup: $faqtoid");
                    } else {
-                       &status("forget: not backing up $faqtoid.");
+                       &status("forget: backing up '$faqtoid'");
+                       &setFactInfo($faqtoid, "factoid_key", $new);
+                       &setFactInfo($new, "modified_by", $who);
+                       &setFactInfo($new, "modified_time", time());
                    }
 
                } else {
-                   &status("forget: not overwriting backup!");
+                   &status("forget: not backing up $faqtoid.");
                }
-           }
 
-           &status("forget: <$who> '$faqtoid' =is=> '$result'");
-           &delFactoid($faqtoid);
+           } else {
+               &status("forget: not overwriting backup!");
+           }
+       }
 
-           &performReply("i forgot $faqtoid");
+       &status("forget: <$who> '$faqtoid' =is=> '$result'");
+       &delFactoid($faqtoid);
 
-           $count{'Update'}++;
+       &performReply("i forgot $faqtoid");
 
-       } else {
-           &performReply("i didn't have anything called '$faqtoid'");
-       }
+       $count{'Update'}++;
 
        return;
     }
@@ -293,25 +301,28 @@ sub FactoidStuff {
        my $result = &getFactoid($faqtoid." #DEL#");
        my $check  = &getFactoid($faqtoid);
 
-       if (!defined $result) {
-           &performReply("that factoid was not backedup :/");
-           return;
-       }
-
        if (defined $check) {
            &performReply("cannot undeleted '$faqtoid' because it already exists!");
            return;
        }
 
-       &setFactInfo($faqtoid." #DEL#", "factoid_key", $faqtoid);
-
-       ### delete info. modified_ isn't really used.
-       &setFactInfo($faqtoid, "modified_by",  "");
-       &setFactInfo($faqtoid, "modified_time", 0);
+       if (!defined $result) {
+           &performReply("that factoid was not backedup :/");
+           return;
+       }
 
-       &performReply("Successfully recovered '$faqtoid'.  Have fun now.");
+       &setFactInfo($faqtoid." #DEL#", "factoid_key",   $faqtoid);
+#      &setFactInfo($faqtoid, "modified_by",   "");
+#      &setFactInfo($faqtoid, "modified_time", 0);
 
-       $count{'Undelete'}++;
+       $check  = &getFactoid($faqtoid);
+       # todo: check if $faqtoid." #DEL#" exists?
+       if (defined $check) {
+           &performReply("Successfully recovered '$faqtoid'.  Have fun now.");
+           $count{'Undelete'}++;
+       } else {
+           &performReply("did not recover '$faqtoid'.  What happened?");
+       }
 
        return;
     }
index c325ab32e22afa416fa8c60ccc43a7dc8ff66678..2077d48a7765766bc9aebffe571c5a77c4ec715d 100644 (file)
@@ -787,17 +787,6 @@ sub miscCheck {
        return if ($_[0] eq "2");       # defer.
     }
 
-    # debian check.
-    opendir(DEBIAN, "$bot_state_dir/debian");
-    foreach ( grep /gz$/, readdir(DEBIAN) ) {
-       my $exit = CORE::system("gzip -t $bot_state_dir/debian/$_");
-       next unless ($exit);
-
-       &status("debian: unlinking file => $_");
-       unlink "$bot_state_dir/debian/$_";
-    }
-    closedir DEBIAN;
-
     # SHM check.
     my @ipcs;
     if ( -x "/usr/bin/ipcs") {
@@ -851,6 +840,17 @@ sub miscCheck2 {
        return if ($_[0] eq "2");       # defer.
     }
 
+    # debian check.
+    opendir(DEBIAN, "$bot_state_dir/debian");
+    foreach ( grep /gz$/, readdir(DEBIAN) ) {
+       my $exit = CORE::system("gzip -t $bot_state_dir/debian/$_");
+       next unless ($exit);
+
+       &status("debian: unlinking file => $_");
+       unlink "$bot_state_dir/debian/$_";
+    }
+    closedir DEBIAN;
+
     # compress logs that should have been compressed.
     # todo: use strftime?
     my ($day,$month,$year) = (localtime(time()))[3,4,5];
index 5e9bf14579e37cca3dbe4e7ead99a0ad1c823c4e..9379d7b10dae4e2fda048cfd3e6d580d213a63fc 100644 (file)
@@ -416,7 +416,10 @@ sub IsHostMatch {
        $local{'host'} = &makeHostMask(lc $3);
     }
 
-    if ($thisnuh =~ /^(\S+)!(\S+)@(\S+)/) {
+    if (!defined $thisnuh) {
+       &WARN("IHM: thisnuh == NULL.");
+       return 0;
+    } elsif ($thisnuh =~ /^(\S+)!(\S+)@(\S+)/) {
        $this{'nick'} = lc $1;
        $this{'user'} = lc $2;
        $this{'host'} = &makeHostMask(lc $3);