- if (my $exists = &getFactoid($lhs)) { # factoid exists.
- if ($exists eq $rhs) {
- &performAddressedReply("i already had it that way");
- return $noreply;
- }
-
- if ($also) { # 'is also'.
- if ($also_or) { # 'is also ||'.
- $rhs = $exists.' || '.$rhs;
- } else {
-# if ($exists =~ s/\,\s*$/, /) {
- if ($exists =~ /\,\s*$/) {
- &DEBUG("current has trailing comma, just append as is");
- # $rhs =~ s/^\s+//;
- # $rhs = $exists." ".$rhs; # keep comma.
- }
-
- if ($exists =~ /\.\s*$/) {
- &DEBUG("current has trailing period, just append as is with 2 WS");
- # $rhs =~ s/^\s+//;
- # use ucfirst();?
- # $rhs = $exists." ".$rhs; # keep comma.
- }
-
- if ($rhs =~ /^[A-Z]/) {
- if ($rhs =~ /\w+\s*$/) {
- &status("auto insert period to factoid.");
- $rhs = $exists.". ".$rhs;
- } else { # '?' or '.' assumed at end.
- &status("orig factoid already had trailing symbol; not adding period.");
- $rhs = $exists." ".$rhs;
- }
- } elsif ($exists =~ /[\,\.\-]\s*$/) {
- &VERB("U: current has trailing symbols; inserting whitespace + new.",2);
- $rhs = $exists." ".$rhs;
- } elsif ($rhs =~ /^\./) {
- &VERB("U: new text has ^.; appending directly",2);
- $rhs = $exists.$rhs;
- } else {
- $rhs = $exists.', or '.$rhs;
- }
- }
-
- # max length check again.
- if (length($rhs) > $param{'maxDataSize'}) {
- &performAddressedReply("that's too long");
- return $noreply;
- }
-
- &performAddressedReply("okay");
-
- $count{'Update'}++;
- &status("update: <$who> \'$lhs\' =$mhs=> \'$rhs\'; was \'$exists\'");
- &AddModified($lhs,$nuh);
- &setFactInfo($lhs, "factoid_value", $rhs);
- } else { # not "also"
- if ($correction_plausible) { # "no, blah is ..."
- my $author = &getFactInfo($lhs, "created_by") || "";
-
- if (IsFlag("m") ne "m" and $author !~ /^\Q$who\E\!/i) {
- &msg($who, "you can't change that factoid.");
- return $noreply;
- }
-
- &performAddressedReply("okay");
-
- $count{'Update'}++;
- &status("update: <$who> \'$lhs\' =$mhs=> \'$rhs\'; was \'$exists\'");
-
- &delFactoid($lhs);
- &setFactInfo($lhs,"created_by", $nuh);
- &setFactInfo($lhs,"created_time", time());
- &setFactInfo($lhs,"factoid_value", $rhs);
- } else { # "blah is ..."
- if ($addressed) {
- &performStrictReply("...but \002$lhs\002 is already something else...");
- &status("FAILED update: <$who> \'$lhs\' =$mhs=> \'$rhs\'");
- }
- return $noreply;
- }
- }
- } else { # not exists.
-
- # nice 'are' hack (or work-around).
- if ($mhs =~ /^are$/i and $rhs !~ /<\S+>/) {
- &DEBUG("Update: 'are' hack detected.");
- $mhs = "is";
- $rhs = "<REPLY> are ". $rhs;
- }
-
- &status("enter: <$who> \'$lhs\' =$mhs=> \'$rhs\'");
- $count{'Update'}++;
-
- &performAddressedReply("okay");
-
- &setFactInfo($lhs,"created_by", $nuh);
- &setFactInfo($lhs,"created_time", time());
- &setFactInfo($lhs,"factoid_value", $rhs);