X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2FFactoids%2FReply.pl;h=fb69ebffed122dbe3f0c020bf3e1ae44fa732101;hb=1926520ab4d05a779e2b66ef0a4272861186783f;hp=5c472fc5b87f257090670bcfb9888aee7da6042a;hpb=65a936279f6b34da2bae1091908c14e73ecd457d;p=infobot.git diff --git a/src/Factoids/Reply.pl b/src/Factoids/Reply.pl index 5c472fc..fb69ebf 100644 --- a/src/Factoids/Reply.pl +++ b/src/Factoids/Reply.pl @@ -10,7 +10,8 @@ # rhs - factoid message. ## -if (&IsParam("useStrict")) { use strict; } +# use strict; # TODO +use POSIX qw(strftime); use vars qw($msgType $uh $lastWho $ident); use vars qw(%lang %lastWho); @@ -18,7 +19,7 @@ use vars qw(%lang %lastWho); sub getReply { my($message) = @_; my($lhs,$mhs,$rhs); - my($result,$reply); + my($reply, $count, $fauthor, $result, $factoid, $search, @searches); $orig{message} = $message; if (!defined $message or $message =~ /^\s*$/) { @@ -28,12 +29,36 @@ sub getReply { $message =~ tr/A-Z/a-z/; - if ($result = &getFactoid($message)) { + @searches = split(/\s+/, &getChanConfDefault('factoidSearch', '_default', $chan)); + &::DEBUG("factoidSearch: $chan is: " . join(':', @searches)); + # requesting the _default one, ignore factoidSearch + if ($message =~ /^_default\s+/) { + @searches = ('_default'); + $message =~ s/^_default\s+//; + } + + # check for factoids with each prefix + foreach $search (@searches) { + if ($search eq '$chan') { + $factoid = "$chan $message"; + } elsif ($search eq '_default') { + $factoid = $message; + } else { + $factoid = "$search $message"; + } + ($count, $fauthor, $result) = &sqlSelect("factoids", + "requested_count,created_by,factoid_value", + { factoid_key => $factoid } + ); + last if ($result); + } + + if ($result) { $lhs = $message; $mhs = "is"; $rhs = $result; - return "$lhs $mhs $rhs" if ($literal); + return "\"$factoid\" $mhs \"$rhs\"" if ($literal); } else { return ''; } @@ -48,7 +73,6 @@ sub getReply { $result =~ s/^\s*//; } - my $fauthor = &dbGet("factoids", "created_by", "factoid_key=".&dbQuote($message) ); $result = &SARit($result); $reply = $result; @@ -57,25 +81,16 @@ sub getReply { ### FLOOD REPETION AND PROTECTION. -20000124 # stats code. - ### FIXME: old mysql doesn't support + ### FIXME: old mysql/sqlite doesn't support ### "requested_count=requested_count+1". - my $count = &getFactInfo($lhs,"requested_count") || 0; $count++; - ### BROKEN!!! - if (1) { # old code. - &setFactInfo($lhs,"requested_by", $nuh); - &setFactInfo($lhs,"requested_time", time()); - &setFactInfo($lhs,"requested_count", $count); - } else { - &dbReplace("factoids", "factoid_key", ( - factoid_key => $lhs, + &sqlSet("factoids", {'factoid_key' => $factoid}, { requested_by => $nuh, requested_time => time(), requested_count => $count - ) ); - } + } ); - # todo: rename $real to something else! + # TODO: rename $real to something else! my $real = 0; # my $author = &getFactInfo($lhs,"created_by") || ''; # $real++ if ($author =~ /^\Q$who\E\!/); @@ -120,8 +135,6 @@ sub getReply { } } - return $reply if ($literal); - # remove excessive beginning and end whitespaces. $reply =~ s/^\s+|\s+$//g; @@ -137,11 +150,11 @@ sub getReply { ### # don't evaluate if it has factoid arguments. - if ($message =~ /^CMD:/i) { - &status("Reply: not doing substVars (eval dollar vars)"); - } else { +# if ($message =~ /^cmd:/i) { +# &status("Reply: not doing substVars (eval dollar vars)"); +# } else { $reply = &substVars($reply,1); - } +# } $reply; } @@ -157,10 +170,7 @@ sub smart_replace { foreach (split //, $string) { if ($_ eq "(") { -### print "( l=>$l, r=>$r\n"; - if (!$l and !$r) { -# print "STARTING at $i\n"; $s = $i; $t = $i; } @@ -170,25 +180,21 @@ sub smart_replace { } if ($_ eq ")") { -### print ") l=>$l, r=>$r\n"; - $r++; $l--; if (!$l and !$r) { my $substr = substr($old,$s,$i-$s+1); -# print "STOP at $i $substr\n"; push(@rand, substr($old,$t+1,$i-$t-1) ); my $rand = $rand[rand @rand]; - &status("SARing '$substr' to '$rand'."); +# &status("SARing '$substr' to '$rand'."); $string =~ s/\Q$substr\E/$rand/; undef @rand; } } if ($_ eq "|" and $l+$r== 0 and $l==1) { -# print "| at $i (l=>$l,r=>$r)\n"; push(@rand, substr($old,$t+1,$i-$t-1) ); $t = $i; } @@ -244,19 +250,36 @@ sub SARit { } &status("Reply.pl: $done SARs done.") if ($done); + # type + # + while ($txt =~ /(.*)<\/URL>/){ + &status("we have to norm this stuff, SARing"); + my $foobar = $1; + if ($foobar =~ m/(http:\/\/[^?]+)\?(.*)/){ + my ($pig1,$pig2) = ($1,$2); + &status("SARing using URLencode"); + $pig2=~s/([^\w])/sprintf("%%%02x",ord($1))/gie; + $foobar=$pig1."?".$pig2; + } + $txt =~ s/(.*)<\/URL>/$foobar/; + } return $txt; } sub substVars { my($reply,$flag) = @_; - # $date, $time. - my $date = scalar(localtime()); - $date =~ s/\:\d+(\s+\w+)\s+\d+$/$1/; + # $date, $time, $day. + # TODO: support localtime. + my $date = strftime("%Y.%m.%d", gmtime()); $reply =~ s/\$date/$date/gi; - $date =~ s/\w+\s+\w+\s+\d+\s+//; - # todo: support UTC. - $reply =~ s/\$time/$date/gi; + my $time = strftime("%k:%M:%S", gmtime()); + $reply =~ s/\$time/$time/gi; + my $day = strftime("%A", gmtime()); + $reply =~ s/\$day/$day/gi; + + # support $ident when I have multiple nicks + my $mynick = $conn->nick() if $conn; # dollar variables. if ($flag) { @@ -287,28 +310,24 @@ sub substVars { } # eg: $rand100.3 - ### TODO: number of digits. 'x.y' - # too hard. if ($reply =~ /\$rand(\d+)(\.(\d+))?/) { my $max = $1; my $dot = $3 || 0; - &status("dot => $dot, max => $max, rand=>$rand"); - $rand = sprintf("%.*f", $dot, $rand*$max); my $orig = $&; + #&DEBUG("dot => $dot, max => $max, rand=>$rand"); + $rand = sprintf("%.*f", $dot, $rand*$max); - &status("swapping $orig to $rand"); - &status("reply => $reply"); - $reply =~ s/$orig/$rand/eg; - &status("reply => $reply"); + &DEBUG("swapping $orig to $rand"); + $reply =~ s/\Q$orig\E/$rand/eg; + } else { + $reply =~ s/\$rand/$rand/g; } - - $reply =~ s/\$rand/$rand/g; } - $reply =~ s/\$ident/$ident/g; + $reply =~ s/\$ident/$mynick/g; if ($reply =~ /\$startTime/) { - my $time = scalar(localtime $^T); + my $time = scalar(gmtime $^T); $reply =~ s/\$startTime/$time/; } @@ -318,7 +337,7 @@ sub substVars { } if ($reply =~ /\$factoids/) { - my $count = &countKeys("factoids"); + my $factoids = &countKeys("factoids"); $reply =~ s/\$factoids/$factoids/; }