X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=blootbot%2Fsrc%2FFactoids%2FCore.pl;h=a43a3d6e7eee63cfe840c2bc22e745d2dbbcc2a2;hb=16c36ddd8e8e1f0c2e6add8e2ddc52005f5e7198;hp=59932d054f7ea74bafdc58aac49da649284df1be;hpb=fccc6f70793939f2a8da7c8cc68454df81f8b842;p=infobot.git diff --git a/blootbot/src/Factoids/Core.pl b/blootbot/src/Factoids/Core.pl index 59932d0..a43a3d6 100644 --- a/blootbot/src/Factoids/Core.pl +++ b/blootbot/src/Factoids/Core.pl @@ -18,7 +18,7 @@ sub validFactoid { for (lc $lhs) { # allow the following only if they have been made on purpose. - if ($rhs ne "" and $rhs !~ /^ are" if ($mhs eq "are"); - &setFactInfo($lhs, "factoid_value", $rhs); + # 'are' hack :) + $rhs = " are" if ($mhs eq 'are'); + &setFactInfo($lhs, 'factoid_value', $rhs); } return 'INFOBOT REPLY'; @@ -141,8 +140,8 @@ sub FactoidStuff { return 'forget: no addr' unless ($addressed); my $faqtoid = $message; - if ($faqtoid eq "") { - &help("forget"); + if ($faqtoid eq '') { + &help('forget'); return; } @@ -151,28 +150,27 @@ sub FactoidStuff { # if it doesn't exist, well... it doesn't! if (!defined $result) { - &performReply("i didn't have anything called '$faqtoid'"); + &performReply("i didn't have anything called '$faqtoid' to forget"); return; } - my $author = &getFactInfo($faqtoid, "created_by"); - my $count = &getFactInfo($faqtoid, "requested_count") || 0; + # TODO: squeeze 3 getFactInfo calls into one? + my $author = &getFactInfo($faqtoid, 'created_by'); + my $count = &getFactInfo($faqtoid, 'requested_count') || 0; # don't delete if requested $limit times - my $limit = &getChanConfDefault( - "factoidPreventForgetLimit", 100, $chan); + my $limit = &getChanConfDefault('factoidPreventForgetLimit', 100, $chan); # don't delete if older than $limitage seconds (modified by requests below) - my $limitage = &getChanConfDefault( - "factoidPreventForgetLimitTime", 7 * 24 * 60 * 60, $chan); - my $t = &getFactInfo($faqtoid, "created_time") || 0; + my $limitage = &getChanConfDefault('factoidPreventForgetLimitTime', 7 * 24 * 60 * 60, $chan); + my $t = &getFactInfo($faqtoid, 'created_time') || 0; my $age = time() - $t; # 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; + my $isop = (&IsFlag('o') eq 'o') ? 1 : 0; - if (IsFlag("r") ne "r" && !$isop) { + if (IsFlag('r') ne 'r' && !$isop) { &msg($who, "you don't have access to remove factoids"); return; } @@ -198,18 +196,18 @@ sub FactoidStuff { # this may eat some memory. # prevent deletion if other factoids redirect to it. - # todo: use hash instead of array. + # TODO: use hash instead of array. my @list; - if (&getChanConf("factoidPreventForgetRedirect")) { + if (&getChanConf('factoidPreventForgetRedirect')) { &status("Factoids/Core: forget: checking for redirect factoids"); - @list = &searchTable("factoids", "factoid_key", - "factoid_value", "^ see "); + @list = &searchTable('factoids', 'factoid_key', + 'factoid_value', "^ see "); } my $match = 0; for (@list) { my $f = $_; - my $v = &getFactInfo($f, "factoid_value"); + my $v = &getFactInfo($f, 'factoid_value'); my $fsafe = quotemeta($faqtoid); next unless ($v =~ /^ ?see( also)? $fsafe\.?$/i); @@ -217,7 +215,7 @@ sub FactoidStuff { $match++; } - # todo: warn for op aswell, but allow force delete. + # TODO: warn for op aswell, but allow force delete. if (!$isop and $match) { &msg($who, "uhm, other (redirection) factoids depend on this one."); return; @@ -233,24 +231,24 @@ sub FactoidStuff { } # ignore. - # todo: make forget limit configurable. - # todo: make forget ignore time configurable. + # 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!"); + &ignoreAdd(&makeHostMask($nuh), '*', 3*24*60, "abuse of forget"); + &msg($who, "forget: Ignoring you for abuse!"); } } # lets do it! - if (&IsParam("factoidDeleteDelay") or &IsChanConf("factoidDeleteDelay")) { + if (&IsParam('factoidDeleteDelay') or &IsChanConf('factoidDeleteDelay') > 0) { if (!($isop or $isau) and $faqtoid =~ / #DEL#$/) { &msg($who, "cannot delete it ($faqtoid)."); return; } &status("forgot (safe delete): '$faqtoid' - ". scalar(gmtime)); - ### TODO: check if the "backup" exists and overwrite it + ### TODO: check if the 'backup' exists and overwrite it my $check = &getFactoid("$faqtoid #DEL#"); if (!defined $check or $check =~ /^\s*$/) { @@ -262,9 +260,9 @@ sub FactoidStuff { &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()); + &setFactInfo($faqtoid, 'factoid_key', $new); + &setFactInfo($new, 'modified_by', $who); + &setFactInfo($new, 'modified_time', time()); } } else { @@ -291,16 +289,16 @@ sub FactoidStuff { return 'unforget: no addr' unless ($addressed); my $i = 0; - $i++ if (&IsParam("factoidDeleteDelay")); - $i++ if (&IsChanConf("factoidDeleteDelay")); + $i++ if (&IsParam('factoidDeleteDelay')); + $i++ if (&IsChanConf('factoidDeleteDelay') > 0); if (!$i) { &performReply("safe delete has been disable so what is there to undelete?"); return; } my $faqtoid = $message; - if ($faqtoid eq "") { - &help("undelete"); + if ($faqtoid eq '') { + &help('unforget'); return; } @@ -318,12 +316,12 @@ sub FactoidStuff { return; } - &setFactInfo($faqtoid." #DEL#", "factoid_key", $faqtoid); -# &setFactInfo($faqtoid, "modified_by", ""); -# &setFactInfo($faqtoid, "modified_time", 0); + &setFactInfo($faqtoid." #DEL#", 'factoid_key', $faqtoid); +# &setFactInfo($faqtoid, 'modified_by', ''); +# &setFactInfo($faqtoid, 'modified_time', 0); $check = &getFactoid($faqtoid); - # todo: check if $faqtoid." #DEL#" exists? + # TODO: check if $faqtoid." #DEL#" exists? if (defined $check) { &performReply("Successfully recovered '$faqtoid'. Have fun now."); $count{'Undelete'}++; @@ -341,19 +339,19 @@ sub FactoidStuff { my $function = lc $1; my $faqtoid = lc $4; - if ($faqtoid eq "") { + if ($faqtoid eq '') { &help($function); return; } - if (&getFactoid($faqtoid) eq "") { + if (&getFactoid($faqtoid) eq '') { &msg($who, "factoid \002$faqtoid\002 does not exist"); return; } - if ($function eq "lock") { + if ($function eq 'lock') { # strongly requested by #debian on 19991028. -xk - if (1 and $faqtoid !~ /^\Q$who\E$/i and &IsFlag("o") ne "o") { + if (1 and $faqtoid !~ /^\Q$who\E$/i and &IsFlag('o') ne 'o') { &msg($who,"sorry, locking cannot be used since it can be abused unneccesarily."); &status("Replace 1 with 0 in Process.pl#~324 for locking support."); return; @@ -371,35 +369,35 @@ sub FactoidStuff { if ($message =~ s/^rename(\s+|$)//) { return 'rename: no addr' unless ($addressed); - if ($message eq "") { - &help("rename"); + if ($message eq '') { + &help('rename'); return; } if ($message =~ /^'(.*)'\s+'(.*)'$/) { - my($from,$to) = (lc $1, lc $2); + my ($from,$to) = (lc $1, lc $2); my $result = &getFactoid($from); - if (defined $result) { - my $author = &getFactInfo($from, "created_by"); + if (!defined $result) { + &performReply("i didn't have anything called '$from' to rename"); + return; + } - if (0 and !&IsFlag("m") or $author !~ /^\Q$who\E\!/i) { - &msg($who, "It's not yours to modify."); - return; - } + # who == nick!user@host. + if (&IsFlag('m') ne 'm' and $author !~ /^\Q$who\E\!/i) { + &msg($who, "factoid '$from' is not yours to modify."); + return; + } - if ($_ = &getFactoid($to)) { - &performReply("destination factoid already exists."); - return; - } + if ($_ = &getFactoid($to)) { + &performReply("destination factoid already exists."); + return; + } - &setFactInfo($from,"factoid_key",$to); + &setFactInfo($from,'factoid_key',$to); - &status("rename: <$who> '$from' is now '$to'"); - &performReply("i renamed '$from' to '$to'"); - } else { - &performReply("i didn't have anything called '$from'"); - } + &status("rename: <$who> '$from' is now '$to'"); + &performReply("i renamed '$from' to '$to'"); } else { &msg($who,"error: wrong format. ask me about 'help rename'."); } @@ -423,29 +421,34 @@ sub FactoidStuff { return 'subst: locked' if (&IsLocked($faqtoid) == 1); my $was = $result; - if (($flags eq "g" && $result =~ s/\Q$op/$np/gi) || $result =~ s/\Q$op/$np/i) { + if (($flags eq 'g' && $result =~ s/\Q$op/$np/gi) || $result =~ s/\Q$op/$np/i) { # excessive length. if (length $result > $param{'maxDataSize'}) { &performReply("that's too long"); return; } + # empty + if (length $result == 0) { + &performReply("factoid would be empty. use forget?"); + return; + } # min length. - my $faqauth = &getFactInfo($faqtoid, "created_by"); + my $faqauth = &getFactInfo($faqtoid, 'created_by'); if ((length $result)*2 < length $was and - &IsFlag("o") ne "o" and - &IsHostMask($faqauth) != 2 + &IsFlag('o') ne 'o' and + &IsHostMatch($faqauth) != 2 ) { &performReply("too drastic change of factoid."); } - &setFactInfo($faqtoid, "factoid_value", $result); + &setFactInfo($faqtoid, 'factoid_value', $result); &status("update: '$faqtoid' =is=> '$result'; was '$was'"); - &performReply("OK"); + &performReply('OK'); } else { &performReply("that doesn't contain '$op'"); } } else { - &performReply("i didn't have anything called '$faqtoid'"); + &performReply("i didn't have anything called '$faqtoid' to modify"); } return; @@ -457,7 +460,7 @@ sub FactoidStuff { # fix the string. s/^hey([, ]+)where/where/i; s/\s+\?$/?/; - s/whois/who is/ig; + s/^whois /who is /i; # Must match ^, else factoids with "whois" anywhere break s/where can i find/where is/i; s/how about/where is/i; s/ da / the /ig; @@ -494,11 +497,11 @@ sub FactoidStuff { if (defined $result and $result !~ /^0?$/) { # question. &status("question: <$who> $message"); $count{'Question'}++; - } elsif (&IsChanConf("perlMath") > 0 and $addressed) { # perl math. - &loadMyModule("perlMath"); + } elsif (&IsChanConf('Math') > 0 and $addressed) { # perl math. + &loadMyModule('Math'); my $newresult = &perlMath(); - if (defined $newresult and $newresult ne "") { + if (defined $newresult and $newresult ne '') { $cmdstats{'Maths'}++; $result = $newresult; &status("math: <$who> $message => $result"); @@ -511,7 +514,7 @@ sub FactoidStuff { } # why would a friendly bot get passed here? - if (&IsParam("friendlyBots")) { + if (&IsParam('friendlyBots')) { return if (grep lc($_) eq lc($who), split(/\s+/, $param{'friendlyBots'})); }