X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2FCommandStubs.pl;h=7df2c73220e89ad2f1dbb873a593557f9e0ae56a;hb=cb81fea9939f349b36e3b5a0cdc0343a6b781da1;hp=63879713f9ce91abce5d7f5b7af73ba4a3ae7148;hpb=5577874f30b88d6d4e3f6d34d1f36295d5e95380;p=infobot.git diff --git a/src/CommandStubs.pl b/src/CommandStubs.pl index 6387971..7df2c73 100644 --- a/src/CommandStubs.pl +++ b/src/CommandStubs.pl @@ -331,7 +331,7 @@ sub seen { &seenFlush(); # very evil hack. oh well, better safe than sorry. # TODO: convert to &sqlSelectRowHash(); - my $select = 'nick,time,channel,host,message'; + my $select = 'nick,time,channel,host,message,messagecount'; if ($person eq 'random') { @seen = &randKey('seen', $select); } else { @@ -363,11 +363,12 @@ sub seen { if (&IsChanConf('seenStats') > 0) { my $i; - $i = $userstats{lc $seen[0]}{'Count'}; - $reply .= ". Has said a total of \002$i\002 messages" if (defined $i); + $i = $seen[6] || $userstats{lc $seen[0]}{'Count'}; + $reply .= ". Has said a total of \002$i\002 messages" if (defined $i); $i = $userstats{lc $seen[0]}{'Time'}; - $reply .= '. Is idling for '.&Time2String(time() - $i) if (defined $i); + $reply .= '. Is idling for '.&Time2String(time() - $i) if (defined $i); } + $reply .= ", last said\002:\002 '$seen[4]'."; } else { my $howlong = &Time2String(time() - $seen[1]); $reply = "$seen[0] <$seen[3]> was last seen on IRC ". @@ -462,6 +463,7 @@ sub lart { my $extra = 0; my $chan = $talkchannel; my ($for); + my $mynick = $conn->nick(); if ($msgType eq 'private') { if ($target =~ /^($mask{chan})\s+(.*)$/) { @@ -479,9 +481,9 @@ sub lart { $for = $2; } - my $line = &getRandomLineFromFile($bot_data_dir. '/blootbot.lart'); + my $line = &getRandomLineFromFile($bot_data_dir. '/infobot.lart'); if (defined $line) { - if ($target =~ /^(me|you|itself|\Q$ident\E)$/i) { + if ($target =~ /^(me|you|itself|\Q$mynick\E)$/i) { $line =~ s/WHO/$who/g; } else { $line =~ s/WHO/$target/g; @@ -642,11 +644,6 @@ sub do_text_counters { $chan = $1; } - if ($message =~ /^_stats(\s+(\S+))$/i) { - &textstats_main($2); - return 1; - } - my ($type,$arg); if ($message =~ /^($z)stats(\s+(\S+))?$/i) { $type = $1; @@ -655,27 +652,21 @@ sub do_text_counters { return 0; } - # even more uglier with channel/time arguments. - my $c = $chan; -# my $c = $chan || 'PRIVATE'; - my $where = 'type='.&sqlQuote($type); - if (defined $c) { - &DEBUG("c => $c"); - $where .= ' AND channel='.&sqlQuote($c) if (defined $c); - } else { - &DEBUG('not using chan arg'); - } + my $c = $chan || 'PRIVATE'; - my $sum = (&sqlRawReturn('SELECT SUM(counter) FROM stats' - .' WHERE '.$where ))[0]; + # Define various types of stats in one place. + # Note: sqlSelectColHash has built in sqlQuote + my $where_chan_type = { channel => $c, type => $type }; + my $where_chan_type_nick = { channel => $c, type => $type, nick => $arg}; + + my $sum = (&sqlSelect('stats', 'SUM(counter)', $where_chan_type))[0]; if (!defined $arg or $arg =~ /^\s*$/) { - # this is way ugly. - # TODO: convert $where to hash + # get top 3 stats of $type in $chan my %hash = &sqlSelectColHash('stats', 'nick,counter', - { }, - $where.' ORDER BY counter DESC LIMIT 3', 1 + $where_chan_type, + 'ORDER BY counter DESC LIMIT 3', 1 ); my $i; my @top; @@ -700,34 +691,32 @@ sub do_text_counters { &performStrictReply("zero counter for \037$type\037."); } } else { - # TODO: convert $where to hash and use a sqlSelect - my $x = (&sqlRawReturn('SELECT SUM(counter) FROM stats'. - " WHERE $where AND nick=".&sqlQuote($arg) ))[0]; + my $x = (&sqlSelect('stats', 'SUM(counter)', $where_chan_type_nick))[0]; - if (!defined $x) { # !defined. + if (!defined $x) { # If no stats were found &performStrictReply("$arg has not said $type yet."); return 1; } - # defined. - # TODO: convert $where to hash - my @array = &sqlSelect('stats', 'nick', undef, - $where.' ORDER BY counter', 1 + # Get list of all nicks for channel $c and $type + my @array = &sqlSelectColArray('stats', 'nick', + $where_chan_type, + 'ORDER BY counter DESC' ); - my $good = 0; - my $i = 0; - for ($i=0; $i $c } : ''; - my $sum = &sqlSelect('stats', 'SUM(counter)', $where_href); - - if (!defined $arg or $arg =~ /^\s*$/) { - # this is way ugly. - &DEBUG('_stats: !arg'); - - my %hash = &sqlSelectColHash('stats', 'nick,counter', - $where_href, - ' ORDER BY counter DESC LIMIT 3', 1 - ); - my $i; - my @top; - - # unfortunately we have to sort it again! - my $tp = 0; - foreach $i (sort { $b <=> $a } keys %hash) { - foreach (keys %{ $hash{$i} }) { - my $p = sprintf("%.01f", 100*$i/$sum); - $tp += $p; - push(@top, "\002$_\002 -- $i ($p%)"); - } - } - - my $topstr = ''; - if (scalar @top) { - $topstr = '. Top '.scalar(@top).': '.join(', ', @top); - } - - if (defined $sum) { - &performStrictReply("total count of \037$type\037 on \002$c\002: $sum$topstr"); - } else { - &performStrictReply("zero counter for \037$type\037."); - } - - return; - } - - # TODO: add nick to where_href - my %hash = &sqlSelectColHash('stats', 'type,counter', - $where_href, ' AND nick='.&sqlQuote($arg) - ); - - # this is totally messed up... needs to be fixed... and cleaned up. - my $total; - my $good; - my $ii; - my $x; - - foreach (keys %hash) { - &DEBUG("_stats: hash{$_} => $hash{$_}"); - # ranking. - # TODO: convert $where to hash - my $where = ''; - my @array = &sqlSelect('stats', 'nick', undef, $where.' ORDER BY counter', 1); - $good = 0; - $ii = 0; - for(my $i=0; $i $i, good => $good, total => $total"); - $x .= ' '.$total.'blah blah'; - } - -# return; - - if (!defined $x) { # !defined. - &performStrictReply("$arg has not said $type yet."); - return; - } - - my $xtra = ''; - if ($total and $good) { - my $pct = sprintf("%.01f", 100*(1+$total-$ii)/$total); - $xtra = ", ranked $ii\002/\002$total (percentile: \002$pct\002 %)"; - } - - my $pct1 = sprintf("%.01f", 100*$x/$sum); - &performStrictReply("\002$arg\002 has said \037$type\037 \002$x\002 times (\002$pct1\002 %)$xtra"); -} - sub nullski { my ($arg) = @_; return unless (defined $arg); @@ -858,6 +752,7 @@ sub nullski { &addCmdHook('d?bugs', ('CODEREF' => 'DebianExtra::Parse', 'Forker' => 1, 'Identifier' => 'DebianExtra', 'Cmdstats' => 'Debian Bugs') ); &addCmdHook('d?contents', ('CODEREF' => 'Debian::searchContents', 'Forker' => 1, 'Identifier' => 'Debian', 'Cmdstats' => 'Debian Contents Search', 'Help' => 'contents' ) ); &addCmdHook('d?find', ('CODEREF' => 'Debian::DebianFind', 'Forker' => 1, 'Identifier' => 'Debian', 'Cmdstats' => 'Debian Search', 'Help' => 'find' ) ); +&addCmdHook('dice', ('CODEREF' => 'dice::dice', 'Identifier' => 'dice', 'Cmdstats' => 'dice', 'Forker' => 1, 'Module' => 'dice') ); &addCmdHook('Dict', ('CODEREF' => 'Dict::Dict', 'Identifier' => 'Dict', 'Help' => 'dict', 'Forker' => 1, 'Cmdstats' => 'Dict') ); &addCmdHook('dincoming', ('CODEREF' => 'Debian::generateIncoming', 'Forker' => 1, 'Identifier' => 'Debian' ) ); &addCmdHook('dnew', ('CODEREF' => 'DebianNew', 'Identifier' => 'Debian' ) ); @@ -874,23 +769,28 @@ sub nullski { &addCmdHook('karma', ('CODEREF' => 'karma', ) ); &addCmdHook('kernel', ('CODEREF' => 'Kernel::Kernel', 'Forker' => 1, 'Identifier' => 'Kernel', 'Cmdstats' => 'Kernel', 'NoArgs' => 1) ); &addCmdHook('lart', ('CODEREF' => 'lart', 'Identifier' => 'lart', 'Help' => 'lart') ); +&addCmdHook('lc', ('CODEREF' => 'case::lower', 'Identifier' => 'case', 'Cmdstats' => 'case', 'Forker' => 1, 'Module' => 'case') ); &addCmdHook('listauth', ('CODEREF' => 'CmdListAuth', 'Identifier' => 'Search', Module => 'Factoids', 'Help' => 'listauth') ); &addCmdHook('md5(sum)?', ('CODEREF' => 'md5::md5', 'Identifier' => 'md5', 'Cmdstats' => 'md5', 'Forker' => 1, 'Module' => 'md5') ); &addCmdHook('metar', ('CODEREF' => 'Weather::Metar', 'Identifier' => 'Weather', 'Help' => 'weather', 'Cmdstats' => 'Weather', 'Forker' => 1) ); -&addCmdHook('News', ('CODEREF' => 'News::Parse', Module => 'News', 'Cmdstats' => 'News' ) ); +&addCmdHook('News', ('CODEREF' => 'News::Parse', Module => 'News', 'Cmdstats' => 'News', 'Identifier' => 'News' ) ); &addCmdHook('(?:nick|lame)ometer(?: for)?', ('CODEREF' => 'nickometer::query', 'Identifier' => 'nickometer', 'Cmdstats' => 'nickometer', 'Forker' => 1) ); &addCmdHook('nullski', ('CODEREF' => 'nullski', ) ); &addCmdHook('page', ('CODEREF' => 'pager::page', 'Identifier' => 'pager', 'Cmdstats' => 'pager', 'Forker' => 1, 'Help' => 'page') ); &addCmdHook('piglatin', ('CODEREF' => 'piglatin::piglatin', 'Identifier' => 'piglatin', 'Cmdstats' => 'piglatin', 'Forker' => 1) ); &addCmdHook('Plug', ('CODEREF' => 'Plug::Plug', 'Identifier' => 'Plug', 'Forker' => 1, 'Cmdstats' => 'Plug') ); &addCmdHook('quote', ('CODEREF' => 'Quote::Quote', 'Forker' => 1, 'Identifier' => 'Quote', 'Help' => 'quote', 'Cmdstats' => 'Quote') ); +&addCmdHook('reverse', ('CODEREF' => 'reverse::reverse', 'Identifier' => 'reverse', 'Cmdstats' => 'reverse', 'Forker' => 1, 'Module' => 'reverse') ); &addCmdHook('RootWarn', ('CODEREF' => 'CmdrootWarn', 'Identifier' => 'RootWarn', 'Module' => 'RootWarn') ); +&addCmdHook('OnJoin', ('CODEREF' => 'Cmdonjoin', 'Identifier' => 'OnJoin', 'Module' => 'OnJoin') ); &addCmdHook('Rss', ('CODEREF' => 'Rss::Rss', 'Identifier' => 'Rss', 'Cmdstats' => 'Rss', 'Forker' => 1, 'Help' => 'rss') ); +&addCmdHook('RSSFeeds',('CODEREF' => 'RSSFeeds::RSS', 'Identifier' => 'RSSFeeds', 'Forker' => 1, 'Help' => 'rssfeeds', 'Cmdstats' => 'RSSFeeds', 'Module' => 'RSSFeeds') ); &addCmdHook('sched(stats|info)', ('CODEREF' => 'scheduleList', ) ); &addCmdHook('scramble', ('CODEREF' => 'scramble::scramble', 'Identifier' => 'scramble', 'Cmdstats' => 'scramble', 'Forker' => 1, 'Module' => 'scramble') ); &addCmdHook('seen', ('CODEREF' => 'seen', 'Identifier' => 'seen') ); &addCmdHook('slashdot', ('CODEREF' => 'Slashdot::Slashdot', 'Identifier' => 'slashdot', 'Forker' => 1, 'Cmdstats' => 'slashdot') ); &addCmdHook('tell|explain', ('CODEREF' => 'tell', Help => 'tell', Identifier => 'allowTelling', Cmdstats => 'Tell') ); +&addCmdHook('uc', ('CODEREF' => 'case::upper', 'Identifier' => 'case', 'Cmdstats' => 'case', 'Forker' => 1, 'Module' => 'case') ); &addCmdHook('Uptime', ('CODEREF' => 'uptime', 'Identifier' => 'Uptime', 'Cmdstats' => 'Uptime') ); &addCmdHook('u(ser)?info', ('CODEREF' => 'userinfo', 'Identifier' => 'UserInfo', 'Help' => 'userinfo', 'Module' => 'UserInfo') ); &addCmdHook('verstats', ('CODEREF' => 'do_verstats' ) ); @@ -904,6 +804,8 @@ sub nullski { ### END OF ADDING HOOKS. ### -&status('CMD: loaded '.scalar(keys %cmdhooks).' command hooks.'); +&status('loaded '.scalar(keys %cmdhooks).' command hooks.'); 1; + +# vim:ts=4:sw=4:expandtab:tw=80