- if ($_ = &getFactoid($item)) {
- &msg($who, ":INFOBOT:REPLY $target $item =is=> $_");
- }
-
- return 'INFOBOT QUERY';
- } elsif ($message =~ /^REPLY <(.*?)> (.*)/) { # reply.
- my ($target,$item) = ($1,$2);
-
- &status(":INFOBOT:REPLY $who: $message");
-
- my ($lhs,$mhs,$rhs) = $item =~ /^(.*?) =(.*?)=> (.*)/;
-
- if ($param{'acceptUrl'} !~ /REQUIRE/ or $rhs =~ /(http|ftp|mailto|telnet|file):/) {
- &msg($target, "$who knew: $lhs $mhs $rhs");
-
- # "are" hack :)
- $rhs = "<REPLY> are" if ($mhs eq "are");
- &setFactInfo($lhs, "factoid_value", $rhs);
- }
-
- return 'INFOBOT REPLY';
- } else {
- &ERROR(":INFOBOT:UNKNOWN $who: $message");
- return 'INFOBOT UNKNOWN';
- }
- }
-
-
- # factoid forget.
- if ($message =~ s/^forget\s+//i) {
- return 'forget: no addr' unless ($addressed);
-
- my $faqtoid = $message;
- if ($faqtoid eq "") {
- &help("forget");
- return;
- }
-
- $faqtoid =~ tr/A-Z/a-z/;
- my $result = &getFactoid($faqtoid);
-
- if (defined $result) {
- my $author = &getFactInfo($faqtoid, "created_by");
- if (IsFlag("r") ne "r" && $author =~ /^\Q$who\E\!/i) {
- &msg($who, "you don't have access to remove that factoid");
- return;
- }
-
- return 'locked factoid' if (&IsLocked($faqtoid) == 1);
-
- &status("forget: <$who> '$faqtoid' =is=> '$result'");
- &delFactoid($faqtoid);
-
- &performReply("i forgot $faqtoid");
-
- $count{'Update'}++;
- } else {
- &performReply("i didn't have anything called '$faqtoid'");
- }
-
- return;
- }
-
- # factoid locking.
- if ($message =~ /^((un)?lock)(\s+(.*))?\s*?$/i) {
- return 'lock: no addr 2' unless ($addressed);
-
- my $function = lc $1;
- my $faqtoid = lc $4;
-
- if ($faqtoid eq "") {
- &help($function);
- return;
- }
-
- # strongly requested by #debian on 19991028. -xk
- 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;
- }
-
- if (&getFactoid($faqtoid) eq "") {
- &msg($who, "factoid \002$faqtoid\002 does not exist");
- return;
- }
-
- if ($function eq "lock") {
- &CmdLock($faqtoid);
- } else {
- &CmdUnLock($faqtoid);
- }
-
- return;
- }
-
- # factoid rename.
- if ($message =~ s/^rename(\s+|$)//) {
- return 'rename: no addr' unless ($addressed);
-
- if ($message eq "") {
- &help("rename");
- return;
- }
-
- if ($message =~ /^'(.*)'\s+'(.*)'$/) {
- my($from,$to) = (lc $1, lc $2);
-
- my $result = &getFactoid($from);
- if (defined $result) {
- my $author = &getFactInfo($from, "created_by");
- if (&IsFlag("m") and $author =~ /^\Q$who\E\!/i) {
- &msg($who, "It's not yours to modify.");
- return $noreply;
- }
-
- if ($_ = &getFactoid($to)) {
- &performReply("destination factoid already exists.");
- return;
- }
-
- &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'");
- }
- } else {
- &msg($who,"error: wrong format. ask me about 'help rename'.");
- }
-
- return;
- }
-
- # factoid substitution. (X =~ s/A/B/FLAG)
- if ($message =~ m|^(.*?)\s+=~\s+s([/,#])(.+?)\2(.*?)\2([a-z]*);?\s*$|) {
- my ($faqtoid,$delim,$op,$np,$flags) = (lc $1, $2, $3, $4, $5);
- return 'subst: no addr' unless ($addressed);
-
- # incorrect format.
- if ($np =~ /$delim/) {
- &msg($who,"looks like you used the delimiter too many times. You may want to use a different delimiter, like ':' or '#'.");
- return;
- }
-
- # success.
- if (my $result = &getFactoid($faqtoid)) {
- 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 (length $result > $param{'maxDataSize'}) {
- &performReply("that's too long");
- return;
- }
- &setFactInfo($faqtoid, "factoid_value", $result);
- &status("update: '$faqtoid' =is=> '$result'; was '$was'");
- &performReply("OK");
- } else {
- &performReply("that doesn't contain '$op'");
- }
- } else {
- &performReply("i didn't have anything called '$faqtoid'");
- }
-
- return;
- }
-
-
- # Fix up $message for question.
- for ($message) {
- # fix the string.
- s/^hey([, ]+)where/where/i;
- s/whois/who is/ig;
- s/where can i find/where is/i;
- s/how about/where is/i;
- s/ da / the /ig;
-
- # clear the string of useless words.
- s/^(stupid )?q(uestion)?:\s+//i;
- s/^(does )?(any|ne)(1|one|body) know //i;
-
- s/^[uh]+m*[,\.]* +//i;
-
- s/^well([, ]+)//i;
- s/^still([, ]+)//i;
- s/^(gee|boy|golly|gosh)([, ]+)//i;
- s/^(well|and|but|or|yes)([, ]+)//i;
-
- s/^o+[hk]+(a+y+)?([,. ]+)//i;
- s/^g(eez|osh|olly)([,. ]+)//i;
- s/^w(ow|hee|o+ho+)([,. ]+)//i;
- s/^heya?,?( folks)?([,. ]+)//i;