X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2FFactoids%2FQuestion.pl;h=39b5df2644fc7ca36e532233b2f697ceb4ce781b;hb=cb81fea9939f349b36e3b5a0cdc0343a6b781da1;hp=2338e4454cd58533d1e227a92915ff79c05d52df;hpb=5c81120242ffb06141da20d86380005cb075a118;p=infobot.git diff --git a/src/Factoids/Question.pl b/src/Factoids/Question.pl index 2338e44..39b5df2 100644 --- a/src/Factoids/Question.pl +++ b/src/Factoids/Question.pl @@ -20,7 +20,7 @@ sub doQuestion { # my doesn't allow variables to be inherinted, local does. # following is used in math()... local($query) = @_; - local($reply) = ""; + local($reply) = ''; local $finalQMark = $query =~ s/\?+\s*$//; $finalQMark += $query =~ s/\?\s*$//; $query =~ s/^\s+|\s+$//g; @@ -29,19 +29,19 @@ sub doQuestion { return ''; } - my $questionWord = ""; + my $questionWord = ''; if (!$addressed) { return '' unless ($finalQMark); - return '' if (&IsParam("minVolunteerLength") == 0); - return '' if (length $query < $param{'minVolunteerLength'}); + return '' unless &IsChanConf('minVolunteerLength') > 0; + return '' if (length $query < &::getChanConf('minVolunteerLength')); } else { ### TODO: this should be caught in Process.pl? return '' unless ($talkok); # there is no flag to disable/enable asking factoids... # so it was added... thanks zyxep! :) - if (&IsFlag("a") ne "a" && &IsFlag("o") ne "o") { + if (&IsFlag('a') ne 'a' && &IsFlag('o') ne 'o') { &status("$who tried to ask us when not allowed."); return; } @@ -65,7 +65,7 @@ sub doQuestion { # valid factoid. if ($query =~ s/[!.]$//) { - push(@query,$query); + push(@query, $query); } $x = &normquery($query); @@ -82,17 +82,18 @@ sub doQuestion { my $qregex = join '|', keys %{ $lang{'qWord'} }; - # what's whats => what is; who'?s => who is, etc - $query =~ s/ ($qregex)\'?s / $1 is /i; - if ($query =~ s/\s+($qregex)\s+//i) { # check for question word + # purge prefix question string. + if ($query =~ s/^ ($qregex)//i) { $questionWord = lc($1); } - if ($questionWord eq "" and $finalQMark and $addressed) { - $questionWord = "where"; + if ($questionWord eq '' and $finalQMark and $addressed) { + $questionWord = 'where'; } + $query =~ s/^\s+|\s+$//g; # bleh. hacked. + push(@query, $query) if ($query ne $x); - if (&IsChanConf("factoidArguments")) { + if (&IsChanConf('factoidArguments') > 0) { $result = &factoidArgs($query[0]); return $result if (defined $result); @@ -102,7 +103,7 @@ sub doQuestion { for (my$i=0; $i 0) { + &loadMyModule('Debian'); $result = &Debian::DebianFind($query); # ??? ### TODO: debian module should tell, through shm, that it went ### ok or not. ### return $result if (defined $result); } - if ($questionWord ne "" or $finalQMark) { + if ($questionWord ne '' or $finalQMark) { # if it has not been explicitly marked as a question - if ($addressed and $reply eq "") { + if ($addressed and $reply eq '') { &status("notfound: <$who> ".join(' :: ', @query)) if ($finalQMark); - return '' unless (&IsParam("friendlyBots")); + return '' unless (&IsParam('friendlyBots')); foreach (split /\s+/, $param{'friendlyBots'}) { &msg($_, ":INFOBOT:QUERY <$who> $query"); @@ -179,9 +185,13 @@ sub factoidArgs { # to make it eleeter, split each arg and use "blah OR blah or BLAH" # which will make it less than linear => quicker! - # todo: cache this, update cache when altered. !!! !!! !!! + # TODO: cache this, update cache when altered. !!! !!! !!! # my $t = &timeget(); - my @list = &searchTable("factoids", "factoid_key", "factoid_key", "^CMD: "); + my ($first) = split(/\s+/, $str); + + # ignore split to commands [dumb commands vs. factoids] (editing commands?) + return undef if $str =~ /\s+\=\~\s+s[\#\/\:]/; + my @list = &searchTable('factoids', 'factoid_key', 'factoid_key', "^cmd: $first "); # my $delta_time = &timedelta($t); # &DEBUG("factArgs: delta_time = $delta_time s"); # &DEBUG("factArgs: list => ".scalar(@list) ); @@ -193,13 +203,10 @@ sub factoidArgs { foreach (sort { length($b) <=> length($a) } @list) { next if (/#DEL#/); # deleted. - s/^CMD: //i; + s/^cmd: //i; # &DEBUG("factarg: '$str' =~ /^$_\$/"); my $arg = $_; - # todo: ~punish apt for (Eating) (Parentheses) - # how the hell do I fix the above? -dms. - # eval (evil!) code. cleaned up courtesy of lear. my @vals; eval { @@ -221,36 +228,35 @@ sub factoidArgs { # &DEBUG("vals => @vals"); &status("Question: factoid Arguments for '$str'"); - # todo: use getReply() - need to modify it :( + # TODO: use getReply() - need to modify it :( my $i = 0; - my $q = "CMD: $_"; + my $q = "cmd: $_"; my $r = &getFactoid($q); if (!defined $r) { &DEBUG("question: !result... should this happen?"); return; } - # update stats. - if (0) { # old. - my $count = &getFactInfo($q, "requested_count") || 0; - $count++; - &setFactInfo($q, "requested_by", $nuh); - &setFactInfo($q, "requested_time", time()); - &setFactInfo($q, "requested_count", $count); - } else { - &sqlUpdate("factoids", { factoid_key => $q }, { - requested_by => $nuh, - requested_time => time(), - -requested_count => "requested_count+1", - } ); - } + # update stats. old mysql/sqlite don't do +1 + my ($count) = &sqlSelect('factoids', 'requested_count', { factoid_key => $q }); + $count++; + &sqlSet('factoids', {'factoid_key' => $q}, { + requested_by => $nuh, + requested_time => time(), + requested_count => $count + } ); # end of update stats. $result = $r; + $result =~ s/^\((.*?)\): //; + my $vars = $1; + + # start nasty hack to get partial &getReply() functionality. + $result = &SARit($result); - foreach ( split(',', $1) ) { + foreach ( split(',', $vars) ) { my $val = $vals[$i]; # &DEBUG("val => $val"); @@ -263,7 +269,7 @@ sub factoidArgs { my $old = $result; while (1) { # &DEBUG("Q: result => $result (1before)"); - $result = &substVars($result); + $result = &substVars($result,1); # &DEBUG("Q: result => $result (1after)"); last if ($old eq $result); @@ -274,17 +280,16 @@ sub factoidArgs { # hack. $vals[$i] =~ s/^me$/$who/gi; - if (!$done) { +# if (!$done) { &status("factArgs: SARing '$_' to '$vals[$i]'."); $result =~ s/\Q$_\E/$vals[$i]/g; - } +# } $i++; } - # nasty hack to get partial &getReply() functionality. + # rest of nasty hack to get partial &getReply() functionality. $result =~ s/^\s*\s*(.*)/\cAACTION $1\cA/i; $result =~ s/^\s*\s*//i; - $result = &SARit($result); # well... lets go through all of them. not advisable if we have like # 1000 commands, heh. @@ -296,3 +301,5 @@ sub factoidArgs { } 1; + +# vim:ts=4:sw=4:expandtab:tw=80