X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2FUserExtra.pl;h=7112f97a7d314ad2fee479a4d6f307cc2505672f;hb=f19b17248d1ba0fbf87f1a7d96015526b396b131;hp=5252b3dcee0acb2ff9a5d73855593778c73fc788;hpb=0a8baf5856034b8c44afcfd85b843e3a318ecb1b;p=infobot.git diff --git a/src/UserExtra.pl b/src/UserExtra.pl index 5252b3d..7112f97 100644 --- a/src/UserExtra.pl +++ b/src/UserExtra.pl @@ -17,24 +17,20 @@ 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", 'sched(stats|info)', ('CODEREF' => 'scheduleList', ) ); &addCmdHook("main", 'factinfo', ('CODEREF' => 'factinfo', - 'Cmdstats' => 'Factoid Info', Module => 'factoids', ) ); + 'Cmdstats' => 'Factoid Info', Module => 'Factoids', ) ); &addCmdHook("main", 'factstats?', ('CODEREF' => 'factstats', 'Cmdstats' => 'Factoid Stats', Help => "factstats", - Forker => 1, 'Identifier' => 'factoids', ) ); + Forker => 1, 'Identifier' => 'Factoids', ) ); &addCmdHook("main", 'help', ('CODEREF' => 'help', 'Cmdstats' => 'Help', ) ); &addCmdHook("main", 'karma', ('CODEREF' => 'karma', ) ); -&addCmdHook("main", 'i?spell', ('CODEREF' => 'ispell', - Help => 'spell', Identifier => 'spell', ) ); -&addCmdHook("main", 'd?nslookup', ('CODEREF' => 'DNS', - Help => 'nslookup', Identifier => 'allowDNS', - Forker => "NULL", ) ); &addCmdHook("main", 'tell|explain', ('CODEREF' => 'tell', Help => 'tell', Identifier => 'allowTelling', Cmdstats => 'Tell') ); -&addCmdHook("main", 'news', ('CODEREF' => 'News::Parse', - Module => 'news', 'Cmdstats' => 'News' ) ); +&addCmdHook("main", 'News', ('CODEREF' => 'News::Parse', + Module => 'News', 'Cmdstats' => 'News' ) ); &addCmdHook("main", 'countrystats', ('CODEREF' => 'countryStats', # Forker => "NULL", ) ); @@ -51,7 +47,7 @@ sub chaninfo { if ($chan eq "") { # all channels. my $i = keys %channels; - my $reply = "i am on \002$i\002 ".&fixPlural("channel",$i); + my $reply = "I'm on \002$i\002 ".&fixPlural("channel",$i); my $tucount = 0; # total user count. my $uucount = 0; # unique user count. my @array; @@ -65,11 +61,10 @@ sub chaninfo { } next if (/^_default$/); - my $str = sprintf("%s (%d)", $_, scalar(keys %{ $channels{$_}{''} })); + my $str = sprintf("%s/%d", $_, scalar(keys %{ $channels{$_}{''} })); push(@array, $str); } - &pSReply($reply.": ".join(', ', @array)); - &ircCheck(); + &performStrictReply($reply.": ".join(', ', @array)); ### total user count. foreach $chan (keys %channels) { @@ -77,26 +72,23 @@ sub chaninfo { } ### unique user count. - my @nicks; + my %nicks = (); foreach $chan (keys %channels) { - foreach (keys %{ $channels{$chan}{''} }) { - next if (grep /^\Q$_\E$/, @nicks); - $uucount++; - push(@nicks, $_); + my $nick; + foreach $nick (keys %{ $channels{$chan}{''} }) { + $nicks{$nick}++; } } - - if (scalar @nicks != $uucount) { - &DEBUG("nicks != uucount..."); - } + $uucount = scalar(keys %nicks); my $chans = scalar(keys %channels); - &pSReply( + &performStrictReply( "i've cached \002$tucount\002 ". &fixPlural("user",$tucount). ", \002$uucount\002 unique ". &fixPlural("user",$uucount). ", distributed over \002$chans\002 ". &fixPlural("channel", $chans)."." ); + &ircCheck(); return; } @@ -166,11 +158,11 @@ sub chaninfo { } # TODO: show top 3 with percentages? - my($count) = (sort { $new{$a} <=> $new{$b} } keys %new)[0]; + 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"; } - &pSReply("$reply."); + &performStrictReply("$reply."); } # Command statistics. @@ -195,7 +187,7 @@ sub cmdstats { push(@array, "\002$int\002 of $_"); } } - &pSReply("command usage include ". &IJoin(@array)."."); + &performStrictReply("command usage include ". &IJoin(@array)."."); } # Factoid extension info. xk++ @@ -219,7 +211,7 @@ sub factstats { my $type = shift(@_); &Forker("factoids", sub { - &pSReply( &CmdFactStats($type) ); + &performStrictReply( &CmdFactStats($type) ); } ); } @@ -229,62 +221,12 @@ sub karma { { nick => $target, type => "karma" }) || 0; if ($karma != 0) { - &pSReply("$target has karma of $karma"); + &performStrictReply("$target has karma of $karma"); } else { - &pSReply("$target has neutral karma"); + &performStrictReply("$target has neutral karma"); } } -sub ispell { - my $query = shift; - - if (! -x "/usr/bin/ispell") { - &msg($who, "no binary found."); - return; - } - - if (!&validExec($query)) { - &msg($who,"argument appears to be fuzzy."); - return; - } - - my $reply = "I can't find alternate spellings for '$query'"; - - foreach (`/bin/echo '$query' | /usr/bin/ispell -a -S`) { - chop; - last if !length; # end of query. - - if (/^\@/) { # intro line. - next; - } elsif (/^\*/) { # possibly correct. - $reply = "'$query' may be spelled correctly"; - last; - } elsif (/^\&/) { # possible correction(s). - s/^\& (\S+) \d+ \d+: //; - my @array = split(/,? /); - - $reply = "possible spellings for $query: @array"; - last; - } elsif (/^\+/) { - &DEBUG("spell: '+' found => '$_'."); - last; - } elsif (/^# (.*?) 0$/) { - # none found. - last; - } else { - &DEBUG("spell: unknown: '$_'."); - } - } - - &pSReply($reply); -} - -sub nslookup { - my $query = shift; - &status("DNS Lookup: $query"); - &DNS($query); -} - sub tell { my $args = shift; my ($target, $tell_obj) = ('',''); @@ -395,45 +337,6 @@ sub tell { &msg($target, $reply); } -sub DNS { - my $dns = shift; - my($match, $x, $y, $result); - my $pid; - $dns =~ s/^\s+|\s+$//g; - - if (!defined $dns or $dns =~ /^\s*$/ or $dns =~ / /) { - &help("dns"); - return; - } - - if ($dns =~ /(\d+\.\d+\.\d+\.\d+)/) { - $match = $1; - &status("DNS query by IP address: $match"); - - $y = pack('C4', split(/\./, $match)); - $x = (gethostbyaddr($y, &AF_INET)); - - if ($x !~ /^\s*$/) { - $result = $match." is ".$x unless ($x =~ /^\s*$/); - } else { - $result = "I can't seem to find that address in DNS"; - } - - } else { - - &status("DNS query by name: $dns"); - $x = join('.',unpack('C4',(gethostbyname($dns))[4])); - - if ($x !~ /^\s*$/) { - $result = $dns." is ".$x; - } else { - $result = "I can\'t find that machine name"; - } - } - - &performReply($result); -} - sub countryStats { if (exists $cache{countryStats}) { &msg($who,"countrystats is already running!"); @@ -487,9 +390,9 @@ sub do_countrystats { push(@list, "$str ($_, $perc %)"); } - # TODO: move this into a scheduler like nickometer + # TODO: move this into a scheduler $msgType = "private"; - &pSReply( &formListReply(0, "Country Stats ", @list) ); + &performStrictReply( &formListReply(0, "Country Stats ", @list) ); delete $cache{countryStats}; delete $cache{on_who_Hack}; @@ -503,7 +406,7 @@ sub userCommands { # conversion: ascii. if ($message =~ /^(asci*|chr) (\d+)$/) { &DEBUG("ascii/chr called ..."); - return unless (&hasParam("allowConv")); + return unless (&IsChanConfOrWarn("allowConv")); &DEBUG("ascii/chr called"); @@ -518,7 +421,7 @@ sub userCommands { # conversion: ord. if ($message =~ /^ord(\s+(.*))$/) { - return unless (&hasParam("allowConv")); + return unless (&IsChanConfOrWarn("allowConv")); $arg = $2; @@ -542,7 +445,7 @@ sub userCommands { # hex. if ($message =~ /^hex(\s+(.*))?$/i) { - return unless (&hasParam("allowConv")); + return unless (&IsChanConfOrWarn("allowConv")); my $arg = $2; if (!defined $arg) { @@ -560,7 +463,7 @@ sub userCommands { $retval .= sprintf(" %X", ord($_)); } - &pSReply("$arg is$retval"); + &performStrictReply("$arg is$retval"); return; } @@ -575,14 +478,15 @@ sub userCommands { } if (scalar @args == 2) { - if (length $args[0] != 2) { - &msg($who, "invalid format..."); - return; - } +# disable cause $1$ will use md5 +# if (length $args[0] != 2) { +# &msg($who, "invalid format..."); +# return; +# } - &pSReply( crypt($args[1], $args[0]) ); + &performStrictReply( crypt($args[1], $args[0]) ); } else { - &pSReply( &mkcrypt($args[0]) ); + &performStrictReply( &mkcrypt($args[0]) ); } return; @@ -622,9 +526,9 @@ sub userCommands { return unless (&hasFlag("n")); &status("USER reload $who"); - &pSReply("reloading..."); + &performStrictReply("reloading..."); my $modules = &reloadAllModules(); - &pSReply("reloaded:$modules"); + &performStrictReply("reloaded:$modules"); return; } @@ -690,7 +594,7 @@ sub userCommands { } $reply =~ y/A-Za-z/N-ZA-Mn-za-m/; - &pSReply($reply); + &performStrictReply($reply); return; } @@ -736,7 +640,7 @@ sub userCommands { } $ratio = sprintf("%.01f", 100*$perc/($perc+$perc2) ); - &pSReply("Total CPU usage: \002$cpu_usage\002 s ... ". + &performStrictReply("Total CPU usage: \002$cpu_usage\002 s ... ". "Total used: \002$total\002 % ". "(parent/child ratio: $ratio %)" ); @@ -787,7 +691,7 @@ sub userCommands { $reply .= ". I was last disconnected for '$reason'."; } - &pSReply($reply); + &performStrictReply($reply); return; } @@ -808,7 +712,7 @@ sub userCommands { $count{'Commands'} += $cmdstats{$_}; } - &pSReply( + &performStrictReply( "Since $startString, there have been". " \002$count{'Update'}\002 ". &fixPlural("modification", $count{'Update'}). @@ -849,38 +753,36 @@ if (0) { } # wantNick. xk++ - if ($message =~ /^wantNick(\+)?$/i) { - my ($force) = ($1) ? 1 : 0; - $force = 0 unless (&IsFlag("n")); + # 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(); - # cannot trust Net::IRC's nick() (TimRiker asks why?) - if ($param{'ircNick'} eq $ident) { - &msg($who, "I hope you're right. I'll try anyway."); - &DEBUG("ircNick => $param{'ircNick'}"); - &DEBUG("ident => $ident"); + if ($mynick eq $wantnick) { + &msg($who, "I hope you're right. I'll try anyway (mynick=$mynick, wantnick=$wantnick)."); } # fallback check, I guess. needed? - if (! &IsNickInAnyChan( $param{'ircNick'} ) ) { - my $str = "attempting to change nick to $param{'ircNick'}"; + if (! &IsNickInAnyChan( $wantnick ) ) { + my $str = "attempting to change nick from $mynick to $wantnick"; &status($str); &msg($who, $str); - &nick($param{ 'ircNick' }); + &nick($wantnick); return; } # idea from dondelecarlo :) # TODO: use cache{nickserv} if ($param{'nickServ_pass'}) { - return if ($param{'ircNick'} eq $ident or $force == 0); - - &status("someone is using our nick; GHOSTing"); - &msg($who, "using GHOST on $param{'ircNick'}."); - &msg("NickServ", "GHOST $param{'ircNick'} $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 after GHOST."); - &nick( $param{'ircNick'} ); + &status("going to change nick from $mynick to $wantnick after GHOST."); + &nick($wantnick); } ); return;