]> git.donarmstrong.com Git - infobot.git/blobdiff - src/Factoids/Reply.pl
take a few more things literally
[infobot.git] / src / Factoids / Reply.pl
index 14f516ac8e448fed1984b99f805e0889ab23aaef..1ab437a7981b74dbe5265bc5f058ff1c8fdbddd9 100644 (file)
@@ -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($reply);
+    my($reply, $count, $fauthor, $result, $factoid, $search, @searches);
     $orig{message} = $message;
 
     if (!defined $message or $message =~ /^\s*$/) {
@@ -28,14 +29,36 @@ sub getReply {
 
     $message =~ tr/A-Z/a-z/;
 
-    my ($result, $fauthor, $count) = &dbGet("factoids", 
-       "factoid_value,created_by,requested_count", "factoid_key=".&dbQuote($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";
+       $mhs = 'is';
        $rhs = $result;
 
-       return "$lhs $mhs $rhs" if ($literal);
+       return "\"$factoid\" $mhs \"$rhs\"" if ($literal);
     } else {
        return '';
     }
@@ -53,25 +76,25 @@ sub getReply {
     $result    = &SARit($result);
 
     $reply     = $result;
-    if ($result ne "") {
+    if ($result ne '') {
        ### AT LAST, REPEAT PREVENTION CODE REMOVED IN FAVOUR OF GLOBAL
        ### 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".
        $count++;
-       &dbSet("factoids", {'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") || '';
+#      my $author = &getFactInfo($lhs,'created_by') || '';
 #      $real++ if ($author =~ /^\Q$who\E\!/);
-#      $real++ if (&IsFlag("n"));
+#      $real++ if (&IsFlag('n'));
        $real = 0 if ($msgType =~ /public/);
 
        ### fix up the reply.
@@ -94,7 +117,7 @@ sub getReply {
            ### bot->person reply.
            # result is random if separated by '||'.
            # rhs is full factoid with '||'.
-           if ($mhs eq "is") {
+           if ($mhs eq 'is') {
                $reply = &getRandom(keys %{ $lang{'factoid'} });
                $reply =~ s/##KEY/$lhs/;
                $reply =~ s/##VALUE/$result/;
@@ -112,8 +135,6 @@ sub getReply {
        }
     }
 
-    return $reply if ($literal);
-
     # remove excessive beginning and end whitespaces.
     $reply     =~ s/^\s+|\s+$//g;
 
@@ -129,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;
 }
@@ -149,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;
            }
@@ -162,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;
        }
@@ -236,19 +250,36 @@ sub SARit {
     }
     &status("Reply.pl: $done SARs done.") if ($done);
 
+    # <URL></URL> type
+    #
+    while ($txt =~ /<URL>(.*)<\/URL>/){
+       &status("we have to norm this <URL></URL> 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>(.*)<\/URL>/$foobar/;
+    }
     return $txt;
 }
 
 sub substVars {
     my($reply,$flag) = @_;
 
-    # $date, $time.
-    # todo: support localtime.
-    my $date   =  scalar(gmtime());
-    $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+//;
-    $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) {
@@ -293,7 +324,7 @@ sub substVars {
        }
     }
 
-    $reply     =~ s/\$ident/$ident/g;
+    $reply     =~ s/\$ident/$mynick/g;
 
     if ($reply =~ /\$startTime/) {
        my $time = scalar(gmtime $^T);
@@ -306,25 +337,25 @@ sub substVars {
     }
 
     if ($reply =~ /\$factoids/) {
-       my $factoids = &countKeys("factoids");
+       my $factoids = &countKeys('factoids');
        $reply =~ s/\$factoids/$factoids/;
     }
 
     if ($reply =~ /\$Fupdate/) {
        my $x = "\002$count{'Update'}\002 ".
-               &fixPlural("modification", $count{'Update'});
+               &fixPlural('modification', $count{'Update'});
        $reply =~ s/\$Fupdate/$x/;
     }
 
     if ($reply =~ /\$Fquestion/) {
        my $x = "\002$count{'Question'}\002 ".
-               &fixPlural("question", $count{'Question'});
+               &fixPlural('question', $count{'Question'});
        $reply =~ s/\$Fquestion/$x/;
     }
 
     if ($reply =~ /\$Fdunno/) {
        my $x = "\002$count{'Dunno'}\002 ".
-               &fixPlural("dunno", $count{'Dunno'});
+               &fixPlural('dunno', $count{'Dunno'});
        $reply =~ s/\$Fdunno/$x/;
     }