X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=src%2FMisc.pl;h=76f11ebe0ad9de7502240a52bed3eccfa9e4db43;hb=60f70c7b333b01addddd62aeae64a8c576c3471d;hp=ffc6fb6467a5f19784abed4c9969873d57b82998;hpb=c53a047e7a5f63c954a2ce515687a937ca8720f3;p=infobot.git diff --git a/src/Misc.pl b/src/Misc.pl index ffc6fb6..76f11eb 100644 --- a/src/Misc.pl +++ b/src/Misc.pl @@ -5,18 +5,22 @@ # NOTE: Based on code by Kevin Lenzo & Patrick Cole (c) 1997 # -if (&IsParam("useStrict")) { use strict; } +use strict; + +use vars qw(%file %mask %param %cmdstats %myModules); +use vars qw($msgType $who $bot_pid $nuh $shm $force_public_reply + $no_timehires $bot_data_dir $addrchar); sub help { my $topic = shift; - my $file = $bot_misc_dir."/blootbot.help"; + my $file = $bot_data_dir."/blootbot.help"; my %help = (); # crude hack for pSReply() to work as expected. $msgType = "private" if ($msgType eq "public"); if (!open(FILE, $file)) { - &ERROR("FAILED loadHelp ($file): $!"); + &ERROR("Failed reading help file ($file): $!"); return; } @@ -66,7 +70,7 @@ sub help { if (exists $help{$topic}) { foreach (split /\n/, $help{$topic}) { - &performStrictReply($_); + &pSReply($_); } } else { &pSReply("no help on $topic. Use 'help' without arguments."); @@ -164,29 +168,31 @@ sub IJoin { ##### # Usage: &Time2String(seconds); sub Time2String { - my $time = shift; - my $retval; + my ($time) = @_; + my $prefix = ""; + my (@s, @t); - return("NULL s") if (!defined $time or $time !~ /\d+/); + return "NULL" if (!defined $time); + return $time if ($time !~ /\d+/); - my $prefix = ""; if ($time < 0) { $time = - $time; $prefix = "- "; } - my $s = int($time) % 60; - my $m = int($time / 60) % 60; - my $h = int($time / 3600) % 24; - my $d = int($time / 86400); + $t[0] = int($time) % 60; + $t[1] = int($time / 60) % 60; + $t[2] = int($time / 3600) % 24; + $t[3] = int($time / 86400); - my @data; - push(@data, sprintf("\002%d\002d", $d)) if ($d != 0); - push(@data, sprintf("\002%d\002h", $h)) if ($h != 0); - push(@data, sprintf("\002%d\002m", $m)) if ($m != 0); - push(@data, sprintf("\002%d\002s", $s)) if ($s != 0 or !@data); + push(@s, "$t[3]d") if ($t[3] != 0); + push(@s, "$t[2]h") if ($t[2] != 0); + push(@s, "$t[1]m") if ($t[1] != 0); + push(@s, "$t[0]s") if ($t[0] != 0 or !@s); - return $prefix.join(' ', @data); + my $retval = $prefix.join(' ', @s); + $retval =~ s/(\d+)/\002$1\002/g; + return $retval; } ### @@ -200,9 +206,9 @@ sub fixFileList { # generate a hash list. foreach (@files) { - if (/^(.*\/)(.*?)$/) { - $files{$1}{$2} = 1; - } + next unless /^(.*\/)(.*?)$/; + + $files{$1}{$2} = 1; } @files = (); # reuse the array. @@ -212,6 +218,11 @@ sub fixFileList { my @keys = sort keys %{ $files{$file} }; my $i = scalar(@keys); + if (scalar @keys > 3) { + pop @keys while (scalar @keys > 3); + push(@keys, "..."); + } + if ($i > 1) { $file .= "\002{\002". join("\002|\002", @keys) ."\002}\002"; } else { @@ -283,8 +294,6 @@ sub fixPlural { return $str; } - - ########## ### get commands. ### @@ -292,30 +301,27 @@ sub fixPlural { sub getRandomLineFromFile { my($file) = @_; - if (! -f $file) { - &WARN("gRLfF: file '$file' does not exist."); + if (!open(IN, $file)) { + &WARN("gRLfF: could not open ($file): $!"); return; } - if (open(IN,$file)) { - my @lines = ; + my @lines = ; + close IN; - if (!scalar @lines) { - &ERROR("GRLF: nothing loaded?"); - return; - } + if (!scalar @lines) { + &ERROR("GRLF: nothing loaded?"); + return; + } - while (my $line = &getRandom(@lines)) { - chop $line; + # could we use the filehandler instead and put it through getRandom? + while (my $line = &getRandom(@lines)) { + chop $line; - next if ($line =~ /^\#/); - next if ($line =~ /^\s*$/); + next if ($line =~ /^\#/); + next if ($line =~ /^\s*$/); - return $line; - } - } else { - &WARN("gRLfF: could not open file '$file'."); - return; + return $line; } } @@ -340,7 +346,7 @@ sub getLineFromFile { chop $line; return $line; } else { - &ERROR("getLineFromFile: could not open file '$file'."); + &ERROR("gLFF: Could not open file ($file): $!"); return 0; } } @@ -413,7 +419,10 @@ sub IsHostMatch { $local{'host'} = &makeHostMask(lc $3); } - if ($thisnuh =~ /^(\S+)!(\S+)@(\S+)/) { + if (!defined $thisnuh) { + &WARN("IHM: thisnuh == NULL."); + return 0; + } elsif ($thisnuh =~ /^(\S+)!(\S+)@(\S+)/) { $this{'nick'} = lc $1; $this{'user'} = lc $2; $this{'host'} = &makeHostMask(lc $3); @@ -461,6 +470,22 @@ sub isStale { return 0; } +sub isFileUpdated { + my ($file, $time) = @_; + + if (! -f $file) { + return 1; + } + + my $time_file = (stat $file)[9]; + + if ($time == $time_file) { + return 0; + } else { + return 1; + } +} + ########## ### make commands. ### @@ -472,6 +497,7 @@ sub makeHostMask { if ($host =~ s/^(\S+!\S+\@)//) { &DEBUG("mHM: detected nick!user\@ for host arg; fixing"); + &DEBUG("nu => $nu"); $nu = $1; } @@ -538,85 +564,6 @@ sub validExec { } } -# 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; - /^gives / and last; - /^h(is|er) / and last; - /^if / and last; - / is,/ and last; - / it$/ 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; -} - # Usage: &hasProfanity($string); sub hasProfanity { my ($string) = @_; @@ -704,13 +651,22 @@ sub closeStats { foreach (keys %cmdstats) { my $type = $_; - my $i = &dbGet("stats", "counter", "nick=".&dbQuote($type). - " AND type='cmdstats'"); + my $i = &sqlSelect("stats", "counter", { + nick => $type, + type => "cmdstats", + } ); + my $z = 0; + $z++ unless ($i); + $i += $cmdstats{$type}; - &dbReplace("stats", - (nick => $type, type => "cmdstats", counter => $i) - ); + + &sqlReplace("stats", { + nick => $type, + type => "cmdstats", + 'time' => time(), + counter => $i, + } ); } }