X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=blootbot%2Fsrc%2FUserExtra.pl;h=97fffc4b29a6c17ba07ddb7c7c924c68015fb2e7;hb=f4df88a364184f78780f37970e46711e2d05239d;hp=e38fa950b04a0495ff5fdadd765123d54564d028;hpb=322bfc67311e5e2e198b77a269a8b559fe72c05c;p=infobot.git diff --git a/blootbot/src/UserExtra.pl b/blootbot/src/UserExtra.pl index e38fa95..97fffc4 100644 --- a/blootbot/src/UserExtra.pl +++ b/blootbot/src/UserExtra.pl @@ -17,25 +17,26 @@ use vars qw(%channels %chanstats %cmdstats %count %ircstats %param &addCmdHook("main", 'chan(stats|info)', ('CODEREF' => 'chaninfo', ) ); &addCmdHook("main", 'cmd(stats|info)', ('CODEREF' => 'cmdstats', ) ); -&addCmdHook("main", 'factinfo', ('CODEREF' => 'factinfo', +&addCmdHook("main", 'sched(stats|info)', ('CODEREF' => 'scheduleList', ) ); +&addCmdHook("main", 'factinfo', ('CODEREF' => 'factinfo', 'Cmdstats' => 'Factoid Info', Module => 'factoids', ) ); -&addCmdHook("main", 'factstats?', ('CODEREF' => 'factstats', - 'Cmdstats' => 'Factoid Stats', Help => "factstats", +&addCmdHook("main", 'factstats?', ('CODEREF' => 'factstats', + 'Cmdstats' => 'Factoid Stats', Help => "factstats", Forker => 1, 'Identifier' => 'factoids', ) ); -&addCmdHook("main", 'help', ('CODEREF' => 'help', +&addCmdHook("main", 'help', ('CODEREF' => 'help', 'Cmdstats' => 'Help', ) ); &addCmdHook("main", 'karma', ('CODEREF' => 'karma', ) ); -&addCmdHook("main", 'i?spell', ('CODEREF' => 'ispell', +&addCmdHook("main", 'i?spell', ('CODEREF' => 'ispell', Help => 'spell', Identifier => 'spell', ) ); -&addCmdHook("main", 'd?nslookup', ('CODEREF' => 'DNS', +&addCmdHook("main", 'd?nslookup', ('CODEREF' => 'DNS', Help => 'nslookup', Identifier => 'allowDNS', Forker => "NULL", ) ); -&addCmdHook("main", 'tell|explain', ('CODEREF' => 'tell', +&addCmdHook("main", 'tell|explain', ('CODEREF' => 'tell', Help => 'tell', Identifier => 'allowTelling', Cmdstats => 'Tell') ); -&addCmdHook("main", 'news', ('CODEREF' => 'News::Parse', +&addCmdHook("main", 'news', ('CODEREF' => 'News::Parse', Module => 'news', 'Cmdstats' => 'News' ) ); -&addCmdHook("main", 'countrystats', ('CODEREF' => 'countryStats', +&addCmdHook("main", 'countrystats', ('CODEREF' => 'countryStats', # Forker => "NULL", ) ); @@ -58,14 +59,18 @@ sub chaninfo { ### line 1. foreach (sort keys %channels) { - if (/^\s*$/ or / /) { + if ( /^\s*$/ or / / ) { &status("chanstats: fe channels: chan == NULL."); - &ircCheck(); + #&ircCheck(); next; } - push(@array, "$_ (".scalar(keys %{ $channels{$_}{''} }).")"); + next if (/^_default$/); + + my $str = sprintf("%s (%d)", $_, scalar(keys %{ $channels{$_}{''} })); + push(@array, $str); } - &pSReply($reply.": ".join(' ', @array)); + &pSReply($reply.": ".join(', ', @array)); + &ircCheck(); ### total user count. foreach $chan (keys %channels) { @@ -81,7 +86,7 @@ sub chaninfo { push(@nicks, $_); } } - &DEBUG("nicks => '".scalar(@nicks)."'..."); + if (scalar @nicks != $uucount) { &DEBUG("nicks != uucount..."); } @@ -161,8 +166,8 @@ sub chaninfo { $new{$_} = $userstats{$_}{'Count'}; } - # todo: show top 3 with percentages? - my($count) = (sort { $new{$a} <=> $new{$b} } keys %new)[0]; + # TODO: show top 3 with percentages? + my($count) = (sort { $new{$b} <=> $new{$a} } keys %new)[0]; if ($count) { $reply .= ". \002$count\002 has said the most with a total of \002$new{$count}\002 messages"; } @@ -221,8 +226,8 @@ sub factstats { sub karma { my $target = lc( shift || $who ); - my $karma = &dbGet("stats", "counter", "nick=". - &dbQuote($target)." AND type='karma'") || 0; + my $karma = &sqlSelect("stats", "counter", + { nick => $target, type => "karma" }) || 0; if ($karma != 0) { &pSReply("$target has karma of $karma"); @@ -233,8 +238,21 @@ sub karma { sub ispell { my $query = shift; + my $binary; + my @binaries = ( + '/usr/bin/aspell', + '/usr/bin/ispell', + '/usr/bin/spell' + ); + + foreach (@binaries) { + if (-x $_) { + $binary=$_; + last; + } + } - if (! -x "/usr/bin/ispell") { + if (!$binary) { &msg($who, "no binary found."); return; } @@ -246,7 +264,7 @@ sub ispell { my $reply = "I can't find alternate spellings for '$query'"; - foreach (`/bin/echo '$query' | /usr/bin/ispell -a -S`) { + foreach (`/bin/echo '$query' | $binary -a -S`) { chop; last if !length; # end of query. @@ -327,7 +345,7 @@ sub tell { $target = $talkchannel if ($target =~ /^us$/i); $target = $who if ($target =~ /^(me|myself)$/i); - &status("tell: target = $target, query = $query"); + &status("tell: target = $target, query = $query"); # "intrusive". # if ($target !~ /^$mask{chan}$/ and !&IsNickInAnyChan($target)) { @@ -413,7 +431,7 @@ sub DNS { $result = $match." is ".$x unless ($x =~ /^\s*$/); } else { $result = "I can't seem to find that address in DNS"; - } + } } else { @@ -483,7 +501,7 @@ sub do_countrystats { push(@list, "$str ($_, $perc %)"); } - # todo: move this into a scheduler like nickometer + # TODO: move this into a scheduler like nickometer $msgType = "private"; &pSReply( &formListReply(0, "Country Stats ", @list) ); @@ -532,7 +550,7 @@ sub userCommands { } } - &performReply( sprintf("'%s' is ascii %s", $arg, ord $1) ); + &performReply( sprintf("'%s' is ascii %s", $arg, ord $arg) ); return; } @@ -619,8 +637,8 @@ sub userCommands { &status("USER reload $who"); &pSReply("reloading..."); - &reloadAllModules(); - &pSReply("reloaded."); + my $modules = &reloadAllModules(); + &pSReply("reloaded:$modules"); return; } @@ -784,7 +802,7 @@ sub userCommands { } &pSReply($reply); - + return; } @@ -792,8 +810,13 @@ sub userCommands { if ($message =~ /^statu?s$/i) { my $startString = scalar(gmtime $^T); my $upString = &Time2String(time() - $^T); + my ($puser,$psystem,$cuser,$csystem) = times; my $factoids = &countKeys("factoids"); - + my $forks = 0; + foreach (keys %forked) { + $forks += scalar keys %{ $forked{$_} }; + } + $forks /= 2; $count{'Commands'} = 0; foreach (keys %cmdstats) { $count{'Commands'} += $cmdstats{$_}; @@ -803,26 +826,27 @@ sub userCommands { "Since $startString, there have been". " \002$count{'Update'}\002 ". &fixPlural("modification", $count{'Update'}). - " and \002$count{'Question'}\002 ". + ", \002$count{'Question'}\002 ". &fixPlural("question",$count{'Question'}). - " and \002$count{'Dunno'}\002 ". + ", \002$count{'Dunno'}\002 ". &fixPlural("dunno",$count{'Dunno'}). - " and \002$count{'Moron'}\002 ". + ", \002$count{'Moron'}\002 ". &fixPlural("moron",$count{'Moron'}). " and \002$count{'Commands'}\002 ". &fixPlural("command",$count{'Commands'}). ". I have been awake for $upString this session, and ". "currently reference \002$factoids\002 factoids. ". "I'm using about \002$memusage\002 ". - "kB of memory." + "kB of memory. With \002$forks\002 active ". + &fixPlural("fork",$forks). + ". Process time user/system $puser/$psystem child $cuser/$csystem" ); return; - # todo: use dbGetColNiceHash(). my %hash = &sqlSelectColHash("stats", "nick,counter", { type => "cmdstats" }, 1); -# does ORDER matter when used with a hash? +# ORDER won't be retained in a hash # " ORDER BY counter DESC", 1); if (0) { @@ -839,22 +863,39 @@ if (0) { } # wantNick. xk++ - if ($message =~ /^wantNick$/i) { - if ($param{'ircNick'} eq $ident) { - &msg($who, "I hope you're right. I'll try anyway."); + # FIXME does not try to get nick "back", just switches nicks + if ($message =~ /^wantNick\s(.*)?$/i) { + return unless (&hasFlag("o")); + my $wantnick = lc $1; + my $mynick = $conn->nick(); + + if ($mynick eq $wantnick) { + &msg($who, "I hope you're right. I'll try anyway (mynick=$mynick, wantnick=$wantnick)."); } - &DEBUG("ircNick => $param{'ircNick'}"); - &DEBUG("ident => $ident"); - if (! &IsNickInAnyChan( $param{ircNick} ) ) { - my $str = "attempting to change nick to $param{'ircNick'}"; + # fallback check, I guess. needed? + if (! &IsNickInAnyChan( $wantnick ) ) { + my $str = "attempting to change nick from $mynick to $wantnick"; &status($str); &msg($who, $str); - &nick($param{'ircNick'}); - } else { - &msg($who, "hrm.. I shouldn't do it (BUG?) but doing it anyway!"); - &DEBUG("wN: nick is somewhere... should try later."); - &nick($param{'ircNick'}); + &nick($wantnick); + return; + } + + # idea from dondelecarlo :) + # TODO: use cache{nickserv} + if ($param{'nickServ_pass'}) { + my $str = "someone is using nick $wantnick; GHOSTing"; + &status($str); + &msg($who, $str); + &msg("NickServ", "GHOST $wantnick $param{'nickServ_pass'}"); + + $conn->schedule(5, sub { + &status("going to change nick from $mynick to $wantnick after GHOST."); + &nick($wantnick); + } ); + + return; } return;