From: dms Date: Tue, 2 Oct 2001 12:49:51 +0000 (+0000) Subject: - renamed Factoids/Misc.pl to Factoids/Core.pl X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=3192b5c2d5d0f4218b2e4a41f81827bca445ee0c;p=infobot.git - renamed Factoids/Misc.pl to Factoids/Core.pl - removed db_sql.pl (basically moved to logger.pl) - seen is now case insensitive - missed one more instance of new dbReplace - moved factoid specific stuff out of db_*.sql to Factoids/DBCommon.pl - typo in pgsql.pl, kill me! - typo in dict --- thanks to lear! git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk/blootbot@516 c11ca15a-4712-0410-83d8-924469b57eb5 --- diff --git a/src/CommandStubs.pl b/src/CommandStubs.pl index 5e2754f..9b9eec5 100644 --- a/src/CommandStubs.pl +++ b/src/CommandStubs.pl @@ -564,7 +564,8 @@ sub uptime { # seen. sub seen { - my($person) = @_; + my($person) = lc shift; + $person =~ s/\?*$//; if (!defined $person or $person =~ /^$/) { &help("seen"); @@ -577,7 +578,6 @@ sub seen { } my @seen; - $person =~ s/\?*$//; &seenFlush(); # very evil hack. oh well, better safe than sorry. diff --git a/src/Factoids/Core.pl b/src/Factoids/Core.pl new file mode 100644 index 0000000..ec0addb --- /dev/null +++ b/src/Factoids/Core.pl @@ -0,0 +1,455 @@ +# +# Misc.pl: Miscellaneous stuff. +# Author: dms +# Version: v0.1 (20010906) +# Created: 20010906 +# + +if (&IsParam("useStrict")) { use strict; } + +# Usage: &validFactoid($lhs,$rhs); +sub validFactoid { + my ($lhs,$rhs) = @_; + my $valid = 0; + + for (lc $lhs) { + # allow the following only if they have been made on purpose. + if ($rhs ne "" and $rhs !~ /^/ and last; # '=>'. + /\;\;/ and last; # ';;'. + /\|\|/ and last; # '||'. + + /^\Q$ident\E[\'\,\: ]/ and last;# dupe addressed. + /^[\-\, ]/ and last; + /\\$/ and last; # forgot shift for '?'. + /^all / and last; + /^also / and last; + / also$/ and last; + / and$/ and last; + /^because / and last; + /^but / and last; + /^gives / and last; + /^h(is|er) / and last; + /^if / and last; + / is,/ and last; + / it$/ and last; + /^or / and last; + / says$/ and last; + /^should / and last; + /^so / and last; + /^supposedly/ and last; + /^to / and last; + /^was / and last; + / which$/ and last; + + # nasty bug I introduced _somehow_, probably by fixMySQLBug(). + /\\\%/ and last; + /\\\_/ and last; + + # weird/special stuff. also old blootbot or stock infobot bugs. + $rhs =~ /( \Q$ident\E's|\Q$ident\E's )/i and last; # ownership. + + # duplication. + $rhs =~ /^\Q$lhs /i and last; + last if ($rhs =~ /^is /i and / is$/); + + $valid++; + } + + return $valid; +} + +sub FactoidStuff { + # inter-infobot. + if ($msgType =~ /private/ and $message =~ s/^:INFOBOT://) { + ### identification. + &status("infobot <$nuh> identified") unless $bots{$nuh}; + $bots{$nuh} = $who; + + ### communication. + + # query. + if ($message =~ /^QUERY (<.*?>) (.*)/) { # query. + my ($target,$item) = ($1,$2); + $item =~ s/[.\?]$//; + + &status(":INFOBOT:QUERY $who: $message"); + + 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 = " 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"); + my $count = &getFactInfo($faqtoid, "requested_count") || 0; + my $limit = &getChanConfDefault("factoidPreventForgetLimit", + 0, $chan); + + &DEBUG("forget: limit = $limit"); + &DEBUG("forget: count = $count"); + + if (IsFlag("r") ne "r") { + &msg($who, "you don't have access to remove factoids"); + return; + } + + return 'locked factoid' if (&IsLocked($faqtoid) == 1); + + # factoidPreventForgetLimit: + if ($limit and $count > $limit and (&IsFlag("o") ne "o")) { + &msg($who, "will not delete '$faqtoid', count > limit ($count > $limit)"); + return; + } + + if (&IsParam("factoidDeleteDelay") or &IsChanConf("factoidDeleteDelay")) { + if ($faqtoid =~ / #DEL#$/ and !&IsFlag("o")) { + &msg($who, "cannot delete it ($faqtoid)."); + return; + } + + &status("forgot (safe delete): <$who> '$faqtoid' =is=> '$result'"); + ### TODO: check if the "backup" exists and overwrite it + my $check = &getFactoid("$faqtoid #DEL#"); + + if (!defined $check or $check =~ /^\s*$/) { + if ($faqtoid !~ / #DEL#$/) { + my $new = $faqtoid." #DEL#"; + + my $backup = &getFactoid($faqtoid); + # this looks weird but does it work? + if ($backup) { + &DEBUG("forget: not overwriting backup: $faqtoid"); + } else { + &status("forget: backing up '$faqtoid'"); + &setFactInfo($faqtoid, "factoid_key", $new); + &setFactInfo($new, "modified_by", $who); + &setFactInfo($new, "modified_time", time()); + } + + } else { + &status("forget: not backing up $faqtoid."); + } + + } else { + &status("forget: not overwriting backup!"); + } + + } else { + &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 unforget/undelete. + if ($message =~ s/^un(forget|delete)\s+//i) { + return 'unforget: no addr' unless ($addressed); + + my $i = 0; + $i++ if (&IsParam("factoidDeleteDelay")); + $i++ if (&IsChanConf("factoidDeleteDelay")); + if (!$i) { + &performReply("safe delete has been disable so what is there to undelete?"); + return; + } + + my $faqtoid = $message; + if ($faqtoid eq "") { + &help("undelete"); + return; + } + + $faqtoid =~ tr/A-Z/a-z/; + my $result = &getFactoid($faqtoid." #DEL#"); + my $check = &getFactoid($faqtoid); + + if (!defined $result) { + &performReply("i didn't have anything ('$faqtoid') to undelete."); + return; + } + + if (defined $check) { + &performReply("cannot undeleted '$faqtoid' because it already exists?"); + return; + } + + &setFactInfo($faqtoid." #DEL#", "factoid_key", $faqtoid); + + ### delete info. modified_ isn't really used. + &setFactInfo($faqtoid, "modified_by", ""); + &setFactInfo($faqtoid, "modified_time", 0); + + &performReply("Successfully recovered '$faqtoid'. Have fun now."); + + $count{'Undelete'}++; + + 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; + } + + if (&getFactoid($faqtoid) eq "") { + &msg($who, "factoid \002$faqtoid\002 does not exist"); + return; + } + + if ($function eq "lock") { + # 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; + } + + &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 (0 and !&IsFlag("m") or $author !~ /^\Q$who\E\!/i) { + &msg($who, "It's not yours to modify."); + return; + } + + 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. + my $question = $message; + for ($question) { + # fix the string. + s/^hey([, ]+)where/where/i; + s/\s+\?$/?/; + 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; + } + + if ($addressed and $message =~ s/^no([, ]+)(\Q$ident\E\,+)?\s*//i) { + $correction_plausible = 1; + &status("correction is plausible, initial negative and nick deleted ($&)") if ($param{VERBOSITY}); + } else { + $correction_plausible = 0; + } + + my $result = &doQuestion($question); + if (!defined $result or $result eq $noreply) { + return 'result from doQ undef.'; + } + + if (defined $result and $result !~ /^0?$/) { # question. + &status("question: <$who> $message"); + $count{'Question'}++; + } elsif (&IsChanConf("perlMath") > 0 and $addressed) { # perl math. + &loadMyModule("perlMath"); + my $newresult = &perlMath(); + + if (defined $newresult and $newresult ne "") { + $cmdstats{'Maths'}++; + $result = $newresult; + &status("math: <$who> $message => $result"); + } + } + + if ($result !~ /^0?$/) { + &performStrictReply($result); + return; + } + + # why would a friendly bot get passed here? + if (&IsParam("friendlyBots")) { + return if (grep lc($_) eq lc($who), split(/\s+/, $param{'friendlyBots'})); + } + + # do the statement. + if (!defined &doStatement($message)) { + return; + } + + return unless ($addressed); + + if (length $message > 64) { + &status("unparseable-moron: $message"); +# &performReply( &getRandom(keys %{ $lang{'moron'} }) ); + $count{'Moron'}++; + + &performReply("You are moron \002#". $count{'Moron'} ."\002"); + return; + } + + &status("unparseable: $message"); + &performReply( &getRandom(keys %{ $lang{'dunno'} }) ); + $count{'Dunno'}++; +} + +1; diff --git a/src/Factoids/DBCommon.pl b/src/Factoids/DBCommon.pl index 48b2eee..eddd7fa 100644 --- a/src/Factoids/DBCommon.pl +++ b/src/Factoids/DBCommon.pl @@ -16,6 +16,35 @@ sub setFactInfo { ); } +##### +# Usage: &getFactInfo($faqtoid, [$what]); +sub main::getFactInfo { + return &dbGet("factoids", $_[1], "factoid_key=".&dbQuote($_[0]) ); +} + +##### +# Usage: &getFactoid($faqtoid); +sub main::getFactoid { + return &getFactInfo($_[0], "factoid_value"); +} + +##### +# Usage: &setFactInfo($faqtoid, $type, $what); +sub main::setFactInfo { + &dbSet("factoids", "factoid_key", $_[0], $_[1], $_[2]); +} + +##### +# Usage: &delFactoid($faqtoid); +sub main::delFactoid { + my ($faqtoid) = @_; + + &dbDel("factoids", "factoid_key",$faqtoid); + &status("DELETED $faqtoid"); + + return 1; +} + ##### # Usage: &IsLocked($faqtoid); sub IsLocked { diff --git a/src/Factoids/Misc.pl b/src/Factoids/Misc.pl deleted file mode 100644 index ec0addb..0000000 --- a/src/Factoids/Misc.pl +++ /dev/null @@ -1,455 +0,0 @@ -# -# Misc.pl: Miscellaneous stuff. -# Author: dms -# Version: v0.1 (20010906) -# Created: 20010906 -# - -if (&IsParam("useStrict")) { use strict; } - -# Usage: &validFactoid($lhs,$rhs); -sub validFactoid { - my ($lhs,$rhs) = @_; - my $valid = 0; - - for (lc $lhs) { - # allow the following only if they have been made on purpose. - if ($rhs ne "" and $rhs !~ /^/ and last; # '=>'. - /\;\;/ and last; # ';;'. - /\|\|/ and last; # '||'. - - /^\Q$ident\E[\'\,\: ]/ and last;# dupe addressed. - /^[\-\, ]/ and last; - /\\$/ and last; # forgot shift for '?'. - /^all / and last; - /^also / and last; - / also$/ and last; - / and$/ and last; - /^because / and last; - /^but / and last; - /^gives / and last; - /^h(is|er) / and last; - /^if / and last; - / is,/ and last; - / it$/ and last; - /^or / and last; - / says$/ and last; - /^should / and last; - /^so / and last; - /^supposedly/ and last; - /^to / and last; - /^was / and last; - / which$/ and last; - - # nasty bug I introduced _somehow_, probably by fixMySQLBug(). - /\\\%/ and last; - /\\\_/ and last; - - # weird/special stuff. also old blootbot or stock infobot bugs. - $rhs =~ /( \Q$ident\E's|\Q$ident\E's )/i and last; # ownership. - - # duplication. - $rhs =~ /^\Q$lhs /i and last; - last if ($rhs =~ /^is /i and / is$/); - - $valid++; - } - - return $valid; -} - -sub FactoidStuff { - # inter-infobot. - if ($msgType =~ /private/ and $message =~ s/^:INFOBOT://) { - ### identification. - &status("infobot <$nuh> identified") unless $bots{$nuh}; - $bots{$nuh} = $who; - - ### communication. - - # query. - if ($message =~ /^QUERY (<.*?>) (.*)/) { # query. - my ($target,$item) = ($1,$2); - $item =~ s/[.\?]$//; - - &status(":INFOBOT:QUERY $who: $message"); - - 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 = " 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"); - my $count = &getFactInfo($faqtoid, "requested_count") || 0; - my $limit = &getChanConfDefault("factoidPreventForgetLimit", - 0, $chan); - - &DEBUG("forget: limit = $limit"); - &DEBUG("forget: count = $count"); - - if (IsFlag("r") ne "r") { - &msg($who, "you don't have access to remove factoids"); - return; - } - - return 'locked factoid' if (&IsLocked($faqtoid) == 1); - - # factoidPreventForgetLimit: - if ($limit and $count > $limit and (&IsFlag("o") ne "o")) { - &msg($who, "will not delete '$faqtoid', count > limit ($count > $limit)"); - return; - } - - if (&IsParam("factoidDeleteDelay") or &IsChanConf("factoidDeleteDelay")) { - if ($faqtoid =~ / #DEL#$/ and !&IsFlag("o")) { - &msg($who, "cannot delete it ($faqtoid)."); - return; - } - - &status("forgot (safe delete): <$who> '$faqtoid' =is=> '$result'"); - ### TODO: check if the "backup" exists and overwrite it - my $check = &getFactoid("$faqtoid #DEL#"); - - if (!defined $check or $check =~ /^\s*$/) { - if ($faqtoid !~ / #DEL#$/) { - my $new = $faqtoid." #DEL#"; - - my $backup = &getFactoid($faqtoid); - # this looks weird but does it work? - if ($backup) { - &DEBUG("forget: not overwriting backup: $faqtoid"); - } else { - &status("forget: backing up '$faqtoid'"); - &setFactInfo($faqtoid, "factoid_key", $new); - &setFactInfo($new, "modified_by", $who); - &setFactInfo($new, "modified_time", time()); - } - - } else { - &status("forget: not backing up $faqtoid."); - } - - } else { - &status("forget: not overwriting backup!"); - } - - } else { - &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 unforget/undelete. - if ($message =~ s/^un(forget|delete)\s+//i) { - return 'unforget: no addr' unless ($addressed); - - my $i = 0; - $i++ if (&IsParam("factoidDeleteDelay")); - $i++ if (&IsChanConf("factoidDeleteDelay")); - if (!$i) { - &performReply("safe delete has been disable so what is there to undelete?"); - return; - } - - my $faqtoid = $message; - if ($faqtoid eq "") { - &help("undelete"); - return; - } - - $faqtoid =~ tr/A-Z/a-z/; - my $result = &getFactoid($faqtoid." #DEL#"); - my $check = &getFactoid($faqtoid); - - if (!defined $result) { - &performReply("i didn't have anything ('$faqtoid') to undelete."); - return; - } - - if (defined $check) { - &performReply("cannot undeleted '$faqtoid' because it already exists?"); - return; - } - - &setFactInfo($faqtoid." #DEL#", "factoid_key", $faqtoid); - - ### delete info. modified_ isn't really used. - &setFactInfo($faqtoid, "modified_by", ""); - &setFactInfo($faqtoid, "modified_time", 0); - - &performReply("Successfully recovered '$faqtoid'. Have fun now."); - - $count{'Undelete'}++; - - 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; - } - - if (&getFactoid($faqtoid) eq "") { - &msg($who, "factoid \002$faqtoid\002 does not exist"); - return; - } - - if ($function eq "lock") { - # 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; - } - - &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 (0 and !&IsFlag("m") or $author !~ /^\Q$who\E\!/i) { - &msg($who, "It's not yours to modify."); - return; - } - - 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. - my $question = $message; - for ($question) { - # fix the string. - s/^hey([, ]+)where/where/i; - s/\s+\?$/?/; - 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; - } - - if ($addressed and $message =~ s/^no([, ]+)(\Q$ident\E\,+)?\s*//i) { - $correction_plausible = 1; - &status("correction is plausible, initial negative and nick deleted ($&)") if ($param{VERBOSITY}); - } else { - $correction_plausible = 0; - } - - my $result = &doQuestion($question); - if (!defined $result or $result eq $noreply) { - return 'result from doQ undef.'; - } - - if (defined $result and $result !~ /^0?$/) { # question. - &status("question: <$who> $message"); - $count{'Question'}++; - } elsif (&IsChanConf("perlMath") > 0 and $addressed) { # perl math. - &loadMyModule("perlMath"); - my $newresult = &perlMath(); - - if (defined $newresult and $newresult ne "") { - $cmdstats{'Maths'}++; - $result = $newresult; - &status("math: <$who> $message => $result"); - } - } - - if ($result !~ /^0?$/) { - &performStrictReply($result); - return; - } - - # why would a friendly bot get passed here? - if (&IsParam("friendlyBots")) { - return if (grep lc($_) eq lc($who), split(/\s+/, $param{'friendlyBots'})); - } - - # do the statement. - if (!defined &doStatement($message)) { - return; - } - - return unless ($addressed); - - if (length $message > 64) { - &status("unparseable-moron: $message"); -# &performReply( &getRandom(keys %{ $lang{'moron'} }) ); - $count{'Moron'}++; - - &performReply("You are moron \002#". $count{'Moron'} ."\002"); - return; - } - - &status("unparseable: $message"); - &performReply( &getRandom(keys %{ $lang{'dunno'} }) ); - $count{'Dunno'}++; -} - -1; diff --git a/src/IRC/Schedulers.pl b/src/IRC/Schedulers.pl index 1a2d48c..cde5537 100644 --- a/src/IRC/Schedulers.pl +++ b/src/IRC/Schedulers.pl @@ -553,7 +553,7 @@ sub seenFlush { if ($param{'DBType'} =~ /^(mysql|pgsql)$/i) { foreach $nick (keys %seencache) { my $retval = &dbReplace("seen", "nick", ( - "nick" => $seencache{$nick}{'nick'}, + "nick" => lc $seencache{$nick}{'nick'}, "time" => $seencache{$nick}{'time'}, "host" => $seencache{$nick}{'host'}, "channel" => $seencache{$nick}{'chan'}, diff --git a/src/Misc.pl b/src/Misc.pl index 0b39297..6edda5f 100644 --- a/src/Misc.pl +++ b/src/Misc.pl @@ -642,7 +642,7 @@ sub closeStats { ); $hash{time} = time() if ($z); - &dbReplace("stats", %hash); + &dbReplace("stats", "nick", %hash); } } diff --git a/src/Modules/Dict.pl b/src/Modules/Dict.pl index 3212b62..22b6422 100644 --- a/src/Modules/Dict.pl +++ b/src/Modules/Dict.pl @@ -43,7 +43,7 @@ sub Dict { $socket->autoflush(1); # required. my $num; - if ($query =~ /^(\d+)\s+/) { + if ($query =~ s/^(\d+)\s+//) { $num = $1; } @@ -58,7 +58,7 @@ sub Dict { my $total = scalar @results; if (defined $num and ($num > $total or $num < 1)) { - &msg($::who, "error: choice in definition is out of range."); + &::msg($::who, "error: choice in definition is out of range."); return; } diff --git a/src/db_mysql.pl b/src/db_mysql.pl index b8fa2c2..cb7b136 100644 --- a/src/db_mysql.pl +++ b/src/db_mysql.pl @@ -270,7 +270,7 @@ sub dbInsert { } ##### -# Usage: &dbReplace($table, $key %hash); +# Usage: &dbReplace($table, $key, %hash); # Note: dbReplace does optional dbQuote. sub dbReplace { my ($table, $key, %hash) = @_; @@ -455,34 +455,6 @@ sub searchTable { return @results; } -#################################################################### -##### Factoid related stuff... -##### - -##### -# Usage: &getFactInfo($faqtoid, $type); -# Note: getFactInfo does dbQuote -sub getFactInfo { - return &dbGet("factoids", $_[1], "factoid_key=".&dbQuote($_[0]) ); -} - -##### -# Usage: &getFactoid($faqtoid); -sub getFactoid { - return &getFactInfo($_[0], "factoid_value"); -} - -##### -# Usage: &delFactoid($faqtoid); -sub delFactoid { - my ($faqtoid) = @_; - - &dbDel("factoids", "factoid_key",$faqtoid); - &status("DELETED '$faqtoid'"); - - return 1; -} - sub dbCreateTable { my($table) = @_; my(@path) = (".","..","../.."); diff --git a/src/db_pgsql.pl b/src/db_pgsql.pl index e32d0b7..7d025f9 100644 --- a/src/db_pgsql.pl +++ b/src/db_pgsql.pl @@ -282,7 +282,7 @@ sub dbReplace { } $uquery .= "$keys[-1] = $vals[-1], "; } - $uquery = ~s/, $/ $where;/; + $uquery =~ s/, $/ $where;/; $iquery .= "(". join(',',@keys) .") VALUES (". join(',',@vals) .");"; &DEBUG($squery) if (0); @@ -451,34 +451,6 @@ sub searchTable { return @results; } -#################################################################### -##### Factoid related stuff... -##### - -##### -# Usage: &getFactInfo($faqtoid, $type); -# Note: getFactInfo does dbQuote -sub getFactInfo { - return &dbGet("factoids", $_[1], "factoid_key=".&dbQuote($_[0]) ); -} - -##### -# Usage: &getFactoid($faqtoid); -sub getFactoid { - return &getFactInfo($_[0], "factoid_value"); -} - -##### -# Usage: &delFactoid($faqtoid); -sub delFactoid { - my ($faqtoid) = @_; - - &dbDel("factoids", "factoid_key",$faqtoid); - &status("DELETED '$faqtoid'"); - - return 1; -} - ##### # sub checkTables { diff --git a/src/db_sql.pl b/src/db_sql.pl deleted file mode 100644 index e13c41b..0000000 --- a/src/db_sql.pl +++ /dev/null @@ -1,20 +0,0 @@ -# -# db_mysql.pl: {my,pg}SQL database frontend. -# Author: dms -# Version: v0.1 (20010908) -# Created: 20010908 -# - -package main; - -if (&IsParam("useStrict")) { use strict; } - -sub SQLDebug { - return unless (&IsParam("SQLDebug")); - - return unless (fileno SQLDEBUG); - - print SQLDEBUG $_[0]."\n"; -} - -1; diff --git a/src/logger.pl b/src/logger.pl index 5601b91..f550962 100644 --- a/src/logger.pl +++ b/src/logger.pl @@ -373,4 +373,12 @@ sub closeSQLDebug { &status("Closed SQL Debug file: $param{'SQLDebug'}"); } +sub SQLDebug { + return unless (&IsParam("SQLDebug")); + + return unless (fileno SQLDEBUG); + + print SQLDEBUG $_[0]."\n"; +} + 1; diff --git a/src/modules.pl b/src/modules.pl index e0c881a..e55f015 100644 --- a/src/modules.pl +++ b/src/modules.pl @@ -87,20 +87,19 @@ sub loadDBModules { &showProc(" (DBI // mysql)"); &status(" using MySQL support."); - require "$bot_src_dir/db_sql.pl"; require "$bot_src_dir/db_mysql.pl"; $moduleAge{"$bot_src_dir/db_mysql.pl"} = time(); } elsif ($param{'DBType'} =~ /^pgsql$/i) { - eval "use Pg"; +# eval "use Pg"; + eval "use DBI"; if ($@) { &ERROR("libpgperl is not installed!"); exit 1; } - &showProc(" (Pg // postgreSQLl)"); + &showProc(" (pgsql)"); - &status(" using PostgreSQL support."); - require "$bot_src_dir/db_sql.pl"; + &status(" using pgsql support."); require "$bot_src_dir/db_pgsql.pl"; } elsif ($param{'DBType'} =~ /^dbm$/i) {