X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2FModules%2Fbotmail.pl;h=846d611a3487adcbc7bde680e57847005d6abd78;hb=b02224ae78a46d2159b7eda886b5303ed4ea3169;hp=6d40cd9c3587a64095034b393c087db4e1cc7978;hpb=93106e7b0898d0e5c6dbf46eec99246a1375f844;p=infobot.git diff --git a/src/Modules/botmail.pl b/src/Modules/botmail.pl index 6d40cd9..846d611 100644 --- a/src/Modules/botmail.pl +++ b/src/Modules/botmail.pl @@ -3,7 +3,7 @@ # Author: dms # Version: v0.1 (20021122). # Created: 20021122 -# NOTE: Motivated by BZFlag. +# NOTE: Motivated by TimRiker. # TODO: full-fledged notes services (optional auth, etc) # @@ -14,21 +14,19 @@ use strict; sub parse { my($what) = @_; - if ($::param{'DBType'} =~ /^dbm/i) { - # FIXME multi field indexed tables not supported under dbm - &::msg($::who, "botmail disabled for $::param{'DBType'}"); - return; - } if (!defined $what or $what =~ /^\s*$/) { &::help("botmail"); return; } - if ($what =~ /^(for|add)\s+(.*)$/i) { + if ($what =~ /^(to|for|add)\s+(.*)$/i) { &add( split(/\s+/, $2, 2) ); - } elsif ($what =~ /^check(\s+(.*))?$/i) { - &check( split(/\s+/, $1, 2) ); + } elsif ($what =~ /^stats?$/i) { + &stats(); + + } elsif ($what =~ /^check?$/i) { + &check( $1, 1); } elsif ($what =~ /^(read|next)$/i) { # TODO: read specific items? nah, will make this too complex. @@ -37,22 +35,27 @@ sub parse { } } +sub stats { + my $botmail = &::countKeys("botmail"); + &::msg($::who, "I have \002$botmail\002 ". &::fixPlural("message", $botmail). "."); +} + ##### -# Usage: botmail::check($recipient) +# Usage: botmail::check($recipient, [$always]) sub check { - my($recipient) = @_; + my($recipient, $always) = @_; $recipient ||= $::who; - # todo: simplify this select (use a diff function) - my %from = &::dbGetCol("botmail", "srcwho", - "dstwho=".&::dbQuote(lc $recipient),2); + my %from = &::sqlSelectColHash("botmail", "srcwho,time", { + dstwho => lc $recipient + } ); my $t = keys %from; my $from = join(", ", keys %from); if ($t == 0) { - &::msg($recipient, "You have no botmail."); + &::msg($recipient, "You have no botmail.") if ($always); } else { - &::msg($recipient, "You have $t messages awaiting, from: $from"); + &::msg($recipient, "You have $t messages awaiting, from: $from (botmail read)"); } } @@ -61,17 +64,18 @@ sub check { sub next { my($recipient) = @_; - my %hash = &::dbGetColNiceHash("botmail", "*", - "dstwho=".&::dbQuote(lc $recipient) - ); + my %hash = &::sqlSelectRowHash("botmail", "*", { + dstwho => lc $recipient + } ); if (scalar (keys %hash) <= 1) { &::msg($recipient, "You have no botmail."); } else { + my $date = scalar(gmtime $hash{'time'}); my $ago = &::Time2String(time() - $hash{'time'}); - &::msg($recipient, "From $hash{srcwho} ($hash{srcuh}) on $hash{time} [$ago]:"); + &::msg($recipient, "From $hash{srcwho} ($hash{srcuh}) on $date ($ago ago):"); &::msg($recipient, $hash{'msg'}); - &::dbDel("botmail", { 'dstwho'=>$hash{dstwho}, 'srcwho'=>$hash{srcwho}}); + &::sqlDelete("botmail", { 'dstwho'=>$hash{dstwho}, 'srcwho'=>$hash{srcwho}}); } } @@ -81,30 +85,27 @@ sub add { my($recipient, $msg) = @_; &::DEBUG("botmail::add(@_)"); - if (lc $recipient eq $::who) { - &::msg($::who, "well... a botmail to oneself is stupid!"); - return; - } + # allow optional trailing : ie: botmail for foo[:] hello + $recipient =~ s/:$//; # only support 1 botmail with unique dstwho/srcwho to have same # functionality as botmail from infobot. - my %hash = &::dbGetColNiceHash("botmail", "*", - "srcwho=".&::dbQuote(lc $::who)." AND ". - "dstwho=".&::dbQuote(lc $recipient) - ); + my %hash = &::sqlSelectRowHash("botmail", "*", { + srcwho => &::sqlQuote(lc $::who), + dstwho => &::sqlQuote(lc $recipient) + } ); if (scalar (keys %hash) > 1) { &::msg($::who, "$recipient already has a message queued from you"); return; } - &::dbSet("botmail", { + &::sqlReplace("botmail", { 'dstwho' => lc $recipient, 'srcwho' => lc $::who, - }, { - 'srcuh' => $::nuh, # will this work? - 'time' => time(), - 'msg' => $msg, + 'srcuh' => $::nuh, + 'time' => time(), + 'msg' => $msg, } ); &::msg($::who, "OK, $::who, I'll let $recipient know.");