X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2Fcore.pl;h=3983f435e41d297006f69d4827e84ef1c779be6d;hb=HEAD;hp=c82c47e666f4e03d896247ab5038c16531d3cb03;hpb=b8c2d709664900b09f849e8b5e1afada0be580df;p=infobot.git diff --git a/src/core.pl b/src/core.pl index c82c47e..3983f43 100644 --- a/src/core.pl +++ b/src/core.pl @@ -10,119 +10,145 @@ use strict; # scalar. MUST BE REDUCED IN SIZE!!! ### TODO: reorder. use vars qw( - $bot_misc_dir $bot_pid $bot_base_dir $bot_src_dir - $bot_data_dir $bot_config_dir $bot_state_dir $bot_run_dir - $answer $correction_plausible $talkchannel $bot_release - $statcount $memusage $user $memusageOld $bot_version $dbh - $shm $host $msg $noreply $conn $irc $learnok $nick $ident - $force_public_reply $addrchar $userHandle $addressedother - $floodwho $chan $msgtime $server $firsttime $wingaterun - $flag_quit $msgType $no_syscall - $utime_userfile $wtime_userfile $ucount_userfile - $utime_chanfile $wtime_chanfile $ucount_chanfile - $pubsize $pubcount $pubtime - $msgsize $msgcount $msgtime - $notsize $notcount $nottime - $running + $bot_misc_dir $bot_pid $bot_base_dir $bot_src_dir + $bot_data_dir $bot_config_dir $bot_state_dir $bot_run_dir + $answer $correction_plausible $talkchannel $bot_release + $statcount $memusage $user $memusageOld $bot_version $dbh + $shm $host $msg $noreply $conn $irc $learnok $nick $ident + $force_public_reply $addrchar $userHandle $addressedother + $floodwho $chan $msgtime $server $firsttime $wingaterun + $flag_quit $msgType $no_syscall + $utime_userfile $wtime_userfile $ucount_userfile + $utime_chanfile $wtime_chanfile $ucount_chanfile + $pubsize $pubcount $pubtime + $msgsize $msgcount $msgtime + $notsize $notcount $nottime + $running ); # array. -use vars qw(@joinchan @ircServers @wingateBad @wingateNow @wingateCache +use vars qw(@ircServers @wingateBad @wingateNow @wingateCache ); ### hash. MUST BE REDUCED IN SIZE!!! -# +# use vars qw(%count %netsplit %netsplitservers %flood %dcc %orig - %nuh %talkWho %seen %floodwarn %param %dbh %ircPort - %topic %moduleAge %last %time %mask %file - %forked %chanconf %channels + %nuh %talkWho %seen %floodwarn %param %dbh %ircPort + %topic %moduleAge %last %time %mask %file + %forked %chanconf %channels %cache ); # Signals. -$SIG{'HUP'} = 'restart'; # 1. -$SIG{'INT'} = 'doExit'; # 2. -$SIG{'KILL'} = 'doExit'; # 9. DOES NOT WORK. 'man perlipc' for details. -$SIG{'TERM'} = 'doExit'; # 15. +$SIG{'HUP'} = 'restart'; # 1. +$SIG{'INT'} = 'doExit'; # 2. +$SIG{'KILL'} = 'doExit'; # 9. DOES NOT WORK. 'man perlipc' for details. +$SIG{'TERM'} = 'doExit'; # 15. $SIG{'__WARN__'} = 'doWarn'; # initialize variables. -$last{buflen} = 0; -$last{say} = ""; -$last{msg} = ""; -$userHandle = "_default"; -$wingaterun = time(); -$firsttime = 1; -$utime_userfile = 0; -$wtime_userfile = 0; +$last{buflen} = 0; +$last{say} = ''; +$last{msg} = ''; +$userHandle = '_default'; +$wingaterun = time(); +$firsttime = 1; +$utime_userfile = 0; +$wtime_userfile = 0; $ucount_userfile = 0; -$utime_chanfile = 0; -$wtime_chanfile = 0; +$utime_chanfile = 0; +$wtime_chanfile = 0; $ucount_chanfile = 0; -$running = 0; +$running = 0; + ### more variables... -$msgtime = time(); -$msgsize = 0; -$msgcount = 0; -$pubtime = 0; -$pubsize = 0; -$pubcount = 0; -$nottime = 0; -$notsize = 0; -$notcount = 0; + +# static scalar variables. +$mask{ip} = '(\d+)\.(\d+)\.(\d+)\.(\d+)'; +$mask{host} = '[\d\w\_\-\/]+\.[\.\d\w\_\-\/]+'; +$mask{chan} = '[\#\&]\S*|_default'; +my $isnick1 = 'a-zA-Z\[\]\{\}\_\`\^\|\\\\'; +my $isnick2 = '0-9\-'; +$mask{nick} = "[$isnick1]{1}[$isnick1$isnick2]*"; +$mask{nuh} = '\S*!\S*\@\S*'; +$msgtime = time(); +$msgsize = 0; +$msgcount = 0; +$pubtime = 0; +$pubsize = 0; +$pubcount = 0; +$nottime = 0; +$notsize = 0; +$notcount = 0; + ### -if ( -d "CVS" ) { - use POSIX qw(strftime); - $bot_release = strftime("cvs (%Y%m%d)", gmtime( (stat("CVS"))[9] ) ); -} else { - $bot_release = "1.0.10 (2001xxxx)"; -} -$bot_version = "blootbot $bot_release -- $^O"; -$noreply = "NOREPLY"; + +open( VERSION, ' || '(unknown version)'; +chomp($bot_release); +close(VERSION); +$bot_version = "infobot $bot_release -- $^O"; +$noreply = 'NOREPLY'; ########## ### misc commands. ### +sub whatInterface { + if ( !&IsParam('Interface') or $param{'Interface'} =~ /IRC/ ) { + return 'IRC'; + } + else { + return 'CLI'; + } +} + sub doExit { - my ($sig) = @_; - - if (defined $flag_quit) { - &WARN("doExit: quit already called."); - return; - } - $flag_quit = 1; - - if (!defined $bot_pid) { # independent. - exit 0; - } elsif ($bot_pid == $$) { # parent. - &status("parent caught SIG$sig (pid $$).") if (defined $sig); - - &status("--- Start of quit."); - $ident ||= "blootbot"; # lame hack. - - &status("Memory Usage: $memusage kB"); - - &closePID(); - &closeStats(); - # shutdown IRC and related components. - if (&whatInterface() =~ /IRC/) { - &closeDCC(); - &seenFlush(); - &quit($param{'quitMsg'}); - } - &writeUserFile(); - &writeChanFile(); - &uptimeWriteFile() if (&IsChanConf("uptime")); - &sqlCloseDB(); - &closeSHM($shm); - &dumpallvars() if (&IsParam("dumpvarsAtExit")); - &symdumpAll() if (&IsParam("symdumpAtExit")); - &closeLog(); - &closeSQLDebug() if (&IsParam("SQLDebug")); - - &status("--- QUIT."); - } else { # child. - &status("child caught SIG$sig (pid $$)."); + my ($sig) = @_; + + if ( defined $flag_quit ) { + &WARN('doExit: quit already called.'); + return; + } + $flag_quit = 1; + + if ( !defined $bot_pid ) { # independent. + exit 0; + } + elsif ( $bot_pid == $$ ) { # parent. + &status("parent caught SIG$sig (pid $$).") if ( defined $sig ); + + &status('--- Start of quit.'); + $ident ||= 'infobot'; # lame hack. + + &status("Memory Usage: $memusage KiB"); + + &closePID(); + &closeStats(); + + # shutdown IRC and related components. + if ( &whatInterface() =~ /IRC/ ) { + &closeDCC(); + &seenFlush(); + &quit( $param{'quitMsg'} ); + } + &writeUserFile(); + &writeChanFile(); + &uptimeWriteFile() if ( &IsParam('Uptime') ); + &sqlCloseDB(); + &closeSHM($shm); + + if ( &IsParam('dumpvarsAtExit') ) { + &loadMyModule('DumpVars'); + &dumpallvars(); + } + &symdumpAll() if ( &IsParam('symdumpAtExit') ); + &closeLog(); + &closeSQLDebug() if ( &IsParam('SQLDebug') ); + + &status('--- QUIT.'); + } + else { # child. + &status("child caught SIG$sig (pid $$)."); } exit 0; @@ -132,20 +158,20 @@ sub doWarn { $SIG{__WARN__} = sub { warn $_[0]; }; foreach (@_) { - &WARN("PERL: $_"); + &WARN("PERL: $_"); } - $SIG{__WARN__} = 'doWarn'; # ??? + $SIG{__WARN__} = 'doWarn'; # ??? } # Usage: &IsParam($param); -# blootbot.config specific. +# infobot.config specific. sub IsParam { my $param = $_[0]; - return 0 unless (defined $param); - return 0 unless (exists $param{$param}); - return 0 unless ($param{$param}); + return 0 unless ( defined $param ); + return 0 unless ( exists $param{$param} ); + return 0 unless ( $param{$param} ); return 0 if $param{$param} =~ /^false$/i; return 1; } @@ -155,14 +181,15 @@ sub IsParam { # About: gets channels with 'param' enabled. (!!!) # Return: array of channels sub ChanConfList { - my $param = $_[0]; - return unless (defined $param); - my %chan = &getChanConfList($param); + my $param = $_[0]; + return unless ( defined $param ); + my %chan = &getChanConfList($param); - if (exists $chan{_default}) { - return keys %chanconf; - } else { - return keys %chan; + if ( exists $chan{_default} ) { + return keys %chanconf; + } + else { + return keys %chan; } } @@ -171,27 +198,29 @@ sub ChanConfList { # About: gets channels with 'param' enabled, internal use only. # Return: hash of channels sub getChanConfList { - my $param = $_[0]; + my $param = $_[0]; my %chan; - return unless (defined $param); + return unless ( defined $param ); + + foreach ( keys %chanconf ) { + my $chan = $_; + my @array = grep /^$param$/, keys %{ $chanconf{$chan} }; - foreach (keys %chanconf) { - my $chan = $_; -# &DEBUG("chan => $chan"); - my @array = grep /^$param$/, keys %{ $chanconf{$chan} }; +#&DEBUG("gCCL param => $param, chan => $chan, keys => " . join(':',keys %{ $chanconf{$chan} }) . ' array => ' . join(':', @array)) if ($param eq 'whatever'); - next unless (scalar @array); + next unless ( scalar @array ); - if (scalar @array > 1) { - &WARN("multiple items found?"); - } + if ( scalar @array > 1 ) { + &WARN('multiple items found?'); + } - if ($array[0] eq "0") { - $chan{$chan} = -1; - } else { - $chan{$chan} = 1; - } + if ( $chanconf{$chan}{$param} eq '0' ) { + $chan{$chan} = -1; + } + else { + $chan{$chan} = 1; + } } return %chan; @@ -202,78 +231,74 @@ sub getChanConfList { # About: Check for 'param' on the basis of channel config. # Return: 1 for enabled, 0 for passive disable, -1 for active disable. sub IsChanConf { - my($param) = shift; - my $debug = 0; # knocked tons of bugs with this! :) + my ($param) = shift; + + # knocked tons of bugs with this! :) + my $debug = 0; # 1 if ($param eq 'whatever'); - if (!defined $param) { - &WARN("IsChanConf: param == NULL."); - return 0; + if ( !defined $param ) { + &WARN('IsChanConf: param == NULL.'); + return 0; } - # should we use IsParam() externally where needed or hack it in - # here just in case? fix it later. - if (&IsParam($param)) { - &DEBUG("ICC: found '$param' option in main config file."); - return 1; + # these should get moved to your .chan file instead of the .config + # .config items overide any .chan entries + if ( &IsParam($param) ) { + &WARN("ICC: found '$param' option in main config file."); + return 1; } - $chan ||= "_default"; + $chan ||= '_default'; my $old = $chan; - if ($chan =~ tr/A-Z/a-z/) { - &WARN("IsChanConf: lowercased chan. ($old)"); + if ( $chan =~ tr/A-Z/a-z/ ) { + &WARN("IsChanConf: lowercased chan. ($old)"); } ### TODO: VERBOSITY on how chanconf returned 1 or 0 or -1. - my %chan = &getChanConfList($param); + my %chan = &getChanConfList($param); my $nomatch = 0; - if (!defined $msgType) { - $nomatch++; - } else { - $nomatch++ if ($msgType eq ""); - $nomatch++ unless ($msgType =~ /^(public|private)$/i); + if ( !defined $msgType ) { + $nomatch++; + } + else { + $nomatch++ if ( $msgType eq '' ); + $nomatch++ unless ( $msgType =~ /^(public|private)$/i ); } +## Please see file perltidy.ERR ### debug purposes only. -# &DEBUG("param => $param, msgType => $msgType."); -# foreach (keys %chan) { -# &DEBUG(" $_ => $chan{$_}"); -# } + # if ($debug) { + # &DEBUG("param => $param, msgType => $msgType."); + # foreach (keys %chan) { + # &DEBUG(" $_ => $chan{$_}"); + # } + # } if ($nomatch) { - if ($chan{$chan}) { - &DEBUG("ICC: other: $chan{$chan} (_default/$param)") if ($debug); - } elsif ($chan{_default}) { - &DEBUG("ICC: other: $chan{_default} (_default/$param)") if ($debug); - } else { - &DEBUG("ICC: other: 0 ($param)") if ($debug); - } - - return $chan{$chan} || $chan{_default} || 0; + if ( $chan{$chan} ) { + &DEBUG("ICC: other: $chan{$chan} (_default/$param)") if ($debug); + } + elsif ( $chan{_default} ) { + &DEBUG("ICC: other: $chan{_default} (_default/$param)") if ($debug); + } + else { + &DEBUG("ICC: other: 0 ($param)") if ($debug); + } + return $chan{$chan} || $chan{_default} || 0; } - - if ($msgType eq "public") { - if ($chan{$chan}) { - &DEBUG("ICC: public: $chan{$chan} ($chan/$param)") if ($debug); - } elsif ($chan{_default}) { - &DEBUG("ICC: public: $chan{_default} (_default/$param)") if ($debug); - } else { - &DEBUG("ICC: public: 0 ($param)") if ($debug); - } - - return $chan{$chan} || $chan{_default} || 0; - } - - if ($msgType eq "private") { - if ($chan{_default}) { - &DEBUG("ICC: private: $chan{_default} (_default/$param)") if ($debug); - } elsif ($chan{$chan}) { - &DEBUG("ICC: private: $chan{$chan} ($chan/$param) (hack)") if ($debug); - } else { - &DEBUG("ICC: private: 0 ($param)") if ($debug); - } - - return $chan{$chan} || $chan{_default} || 0; + elsif ( $msgType =~ /^(public|private)$/i ) { + if ( $chan{$chan} ) { + &DEBUG("ICC: $msgType: $chan{$chan} ($chan/$param)") if ($debug); + } + elsif ( $chan{_default} ) { + &DEBUG("ICC: $msgType: $chan{_default} (_default/$param)") + if ($debug); + } + else { + &DEBUG("ICC: $msgType: 0 ($param)") if ($debug); + } + return $chan{$chan} || $chan{_default} || 0; } &DEBUG("ICC: no-match: 0/$param (msgType = $msgType)"); @@ -286,124 +311,137 @@ sub IsChanConf { # About: Retrieve value for 'param' value in current/default chan. # Return: scalar for success, undef for failure. sub getChanConf { - my($param,$c) = @_; + my ( $param, $c ) = @_; - if (!defined $param) { - &WARN("gCC: param == NULL."); - return 0; + if ( !defined $param ) { + &WARN('gCC: param == NULL.'); + return 0; } - # this looks evil... - if (0 and !defined $chan) { - &DEBUG("gCC: ok !chan... doing _default instead."); + # this looks evil... + if ( 0 and !defined $chan ) { + &DEBUG('gCC: ok !chan... doing _default instead.'); } - $c ||= $chan; - $c ||= "_default"; - $c = "_default" if ($c eq "*"); # fix! - my @c = grep /^$c$/i, keys %chanconf; + $c ||= $chan; + $c ||= '_default'; + $c = '_default' if ( $c eq '*' ); # FIXME + my @c = grep /^\Q$c\E$/i, keys %chanconf; if (@c) { - if (0 and $c[0] ne $c) { - &WARN("c ne chan ($c[0] ne $chan)"); - } - return $chanconf{$c[0]}{$param}; + if ( 0 and $c[0] ne $c ) { + &WARN("c ne chan ($c[0] ne $chan)"); + } + if ( !defined $chanconf{ $c[0] }{$param} and ( $c ne '_default' ) ) { + return &getChanConf( $param, '_default' ); + } + &DEBUG( "gCC: $param,$c \"" . $chanconf{ $c[0] }{$param} . '"' ); + return $chanconf{ $c[0] }{$param}; } -# &DEBUG("gCC: returning _default... "); - return $chanconf{"_default"}{$param}; + #&DEBUG('gCC: returning _default... ' . $chanconf{'_default'}{$param}); + return $chanconf{'_default'}{$param}; } sub getChanConfDefault { - my($what, $default, $chan) = @_; - - $chan ||= "_default"; - - if (exists $param{$what}) { - if (!exists $cache{config}{$what}) { - &status("Config ($chan): backward-compatible option: found param{$what} ($param{$what}) instead"); - $cache{config}{$what} = 1; - } - - return $param{$what}; + my ( $what, $default, $chan ) = @_; + $chan ||= '_default'; + + if ( exists $param{$what} ) { + if ( !exists $cache{config}{$what} ) { + &status( +"config ($chan): backward-compatible option: found param{$what} ($param{$what}) instead of chan option" + ); + $cache{config}{$what} = 1; + } + + return $param{$what}; } - my $val = &getChanConf($what, $chan); - return $val if (defined $val); + my $val = &getChanConf( $what, $chan ); + return $val if ( defined $val ); - $param{$what} = $default; - &status("Config ($chan): auto-setting param{$what} = $default"); + $param{$what} = $default; + &status("config ($chan): auto-setting param{$what} = $default"); $cache{config}{$what} = 1; return $default; } - ##### # Usage: &findChanConf($param); # About: Retrieve value for 'param' value from any chan. # Return: scalar for success, undef for failure. sub findChanConf { - my($param) = @_; + my ($param) = @_; - if (!defined $param) { - &WARN("param == NULL."); - return 0; + if ( !defined $param ) { + &WARN('param == NULL.'); + return 0; } my $c; - foreach $c (keys %chanconf) { - foreach (keys %{ $chanconf{$c} }) { - next unless (/^$param$/); + foreach $c ( keys %chanconf ) { + foreach ( keys %{ $chanconf{$c} } ) { + next unless (/^$param$/); - return $chanconf{$c}{$_}; - } + return $chanconf{$c}{$_}; + } } return; } sub showProc { - my ($prefix) = $_[0] || ""; - - if ($^O eq "linux") { - if (!open(IN, "/proc/$$/status")) { - &ERROR("cannot open '/proc/$$/status'."); - return; - } - - while () { - $memusage = $1 if (/^VmSize:\s+(\d+) kB/); - } - close IN; - - } elsif ($^O eq "netbsd") { - $memusage = int( (stat "/proc/$$/mem")[7]/1024 ); - - } elsif ($^O =~ /^(free|open)bsd$/) { - my @info = split /\s+/, `/bin/ps -l -p $$`; - $memusage = $info[20]; - - } else { - $memusage = "UNKNOWN"; - return; - } - - if (defined $memusageOld and &IsParam("DEBUG")) { - # it's always going to be increase. - my $delta = $memusage - $memusageOld; - my $str; - if ($delta == 0) { - return; - } elsif ($delta > 500) { - $str = "MEM:$prefix increased by $delta kB. (total: $memusage kB)"; - } elsif ($delta > 0) { - $str = "MEM:$prefix increased by $delta kB"; - } else { # delta < 0. - $delta = -$delta; - # never knew RSS could decrease, probably Size can't? - $str = "MEM:$prefix decreased by $delta kB."; - } - - &status($str); + my ($prefix) = $_[0] || ''; + + if ( $^O eq 'linux' ) { + if ( !open( IN, "/proc/$$/status" ) ) { + &ERROR("cannot open '/proc/$$/status'."); + return; + } + + while () { + $memusage = $1 if (/^VmSize:\s+(\d+) kB/); + } + close IN; + + } + elsif ( $^O eq 'netbsd' ) { + $memusage = int( ( stat "/proc/$$/mem" )[7] / 1024 ); + + } + elsif ( $^O =~ /^(free|open)bsd$/ ) { + my @info = split /\s+/, `/bin/ps -l -p $$`; + $memusage = $info[20]; + + } + else { + $memusage = 'UNKNOWN'; + return; + } + + if ( defined $memusageOld and &IsParam('DEBUG') ) { + + # it's always going to be increase. + my $delta = $memusage - $memusageOld; + my $str; + if ( $delta == 0 ) { + return; + } + elsif ( $delta > 500 ) { + $str = + "MEM:$prefix increased by $delta KiB. (total: $memusage KiB)"; + } + elsif ( $delta > 0 ) { + $str = "MEM:$prefix increased by $delta KiB"; + } + else { # delta < 0. + $delta = -$delta; + + # never knew RSS could decrease, probably Size can't? + $str = "MEM:$prefix decreased by $delta KiB."; + } + + &status($str); } $memusageOld = $memusage; } @@ -414,126 +452,135 @@ sub showProc { sub setup { &showProc(" (\&openLog before)"); - &openLog(); # write, append. - &status("--- Started logging."); + &openLog(); # write, append. + &status('--- Started logging.'); # read. - &loadLang($bot_data_dir. "/blootbot.lang"); + &loadLang( $bot_data_dir . '/infobot.lang' ); &loadIRCServers(); &readUserFile(); &readChanFile(); - &loadMyModulesNow(); # must be after chan file. + &loadMyModulesNow(); # must be after chan file. $shm = &openSHM(); - &openSQLDebug() if (&IsParam("SQLDebug")); - &sqlOpenDB($param{'DBName'}, $param{'DBType'}, $param{'SQLUser'}, - $param{'SQLPass'}); + &openSQLDebug() if ( &IsParam('SQLDebug') ); + &sqlOpenDB( + $param{'DBName'}, $param{'DBType'}, + $param{'SQLUser'}, $param{'SQLPass'} + ); &checkTables(); - &status("Setup: ". &countKeys("factoids") ." factoids."); - &getChanConfDefault("sendPrivateLimitLines", 3); - &getChanConfDefault("sendPrivateLimitBytes", 1000); - &getChanConfDefault("sendPublicLimitLines", 3); - &getChanConfDefault("sendPublicLimitBytes", 1000); - &getChanConfDefault("sendNoticeLimitLines", 3); - &getChanConfDefault("sendNoticeLimitBytes", 1000); + &status( 'Setup: ' . &countKeys('factoids') . ' factoids.' ); + &getChanConfDefault( 'sendPrivateLimitLines', 3, $chan ); + &getChanConfDefault( 'sendPrivateLimitBytes', 1000, $chan ); + &getChanConfDefault( 'sendPublicLimitLines', 3, $chan ); + &getChanConfDefault( 'sendPublicLimitBytes', 1000, $chan ); + &getChanConfDefault( 'sendNoticeLimitLines', 3, $chan ); + &getChanConfDefault( 'sendNoticeLimitBytes', 1000, $chan ); $param{tempDir} =~ s#\~/#$ENV{HOME}/#; - &status("Initial memory usage: $memusage kB"); - &status("-------------------------------------------------------"); + &status("Initial memory usage: $memusage KiB"); + &status('-------------------------------------------------------'); } sub setupConfig { $param{'VERBOSITY'} = 1; - &loadConfig($bot_config_dir."/blootbot.config"); + &loadConfig( $bot_config_dir . '/infobot.config' ); - foreach ( qw(ircNick ircUser ircName DBType tempDir) ) { - next if &IsParam($_); - &ERROR("Parameter $_ has not been defined."); - exit 1; + foreach (qw(ircNick ircUser ircName DBType tempDir)) { + next if &IsParam($_); + &ERROR("Parameter $_ has not been defined."); + exit 1; } - if ($param{tempDir} =~ s#\~/#$ENV{HOME}/#) { - &VERB("Fixing up tempDir.",2); + if ( $param{tempDir} =~ s#\~/#$ENV{HOME}/# ) { + &VERB( 'Fixing up tempDir.', 2 ); } - if ($param{tempDir} =~ /~/) { - &ERROR("parameter tempDir still contains tilde."); - exit 1; + if ( $param{tempDir} =~ /~/ ) { + &ERROR('parameter tempDir still contains tilde.'); + exit 1; } - if (! -d $param{tempDir}) { - &status("making $param{tempDir}..."); - mkdir $param{tempDir}, 0755; + if ( !-d $param{tempDir} ) { + &status("making $param{tempDir}..."); + mkdir $param{tempDir}, 0755; } # static scalar variables. - $file{utm} = "$bot_state_dir/$param{'ircUser'}.uptime"; - $file{PID} = "$bot_run_dir/$param{'ircUser'}.pid"; + $file{utm} = "$bot_state_dir/$param{'ircUser'}.uptime"; + $file{PID} = "$bot_run_dir/$param{'ircUser'}.pid"; } sub startup { - if (&IsParam("DEBUG")) { - &status("enabling debug diagnostics."); - ### I thought disabling this reduced memory usage by 1000 kB. - use diagnostics; + if ( &IsParam('DEBUG') ) { + &status('enabling debug diagnostics.'); + + # I thought disabling this reduced memory usage by 1000 KiB. + use diagnostics; } - $count{'Question'} = 0; - $count{'Update'} = 0; - $count{'Dunno'} = 0; - $count{'Moron'} = 0; + $count{'Question'} = 0; + $count{'Update'} = 0; + $count{'Dunno'} = 0; + $count{'Moron'} = 0; } sub shutdown { my ($sig) = @_; + # reverse order of &setup(). - &status("--- shutdown called."); + &status('--- shutdown called.'); - $ident ||= "blootbot"; # hack. + # hack. + $ident ||= 'infobot'; - if (!&isFileUpdated("$bot_state_dir/blootbot.users", $wtime_userfile)) { - &writeUserFile() + if ( !&isFileUpdated( "$bot_state_dir/infobot.users", $wtime_userfile ) ) { + &writeUserFile(); } - if (!&isFileUpdated("$bot_state_dir/blootbot.chan", $wtime_chanfile)) { - &writeChanFile(); + if ( !&isFileUpdated( "$bot_state_dir/infobot.chan", $wtime_chanfile ) ) { + &writeChanFile(); } &sqlCloseDB(); - &closeSHM($shm); # aswell. TODO: use this in &doExit? + + # aswell. TODO: use this in &doExit? + &closeSHM($shm); &closeLog(); } sub restart { my ($sig) = @_; - if ($$ == $bot_pid) { - &status("--- $sig called."); + if ( $$ == $bot_pid ) { + &status("--- $sig called."); - ### crappy bug in Net::IRC? - my $delta = time() - $msgtime; - &DEBUG("restart: dtime = $delta"); - if (!$conn->connected or time() - $msgtime > 900) { - &status("reconnecting because of uncaught disconnect \@ ".scalar(gmtime) ); + ### crappy bug in Net::IRC? + my $delta = time() - $msgtime; + &DEBUG("restart: dtime = $delta"); + if ( !$conn->connected or time() - $msgtime > 900 ) { + &status( "reconnecting because of uncaught disconnect \@ " + . scalar(gmtime) ); ### $irc->start; - &clearIRCVars(); - $conn->connect(); + &clearIRCVars(); + $conn->connect(); ### return; - } + } - &ircCheck(); # heh, evil! + &ircCheck(); # heh, evil! - &DCCBroadcast("-HUP called.","m"); - &shutdown($sig); - &loadConfig($bot_config_dir."/blootbot.config"); - &reloadAllModules() if (&IsParam("DEBUG")); - &setup(); + &DCCBroadcast( '-HUP called.', 'm' ); + &shutdown($sig); + &loadConfig( $bot_config_dir . '/infobot.config' ); + &reloadAllModules() if ( &IsParam('DEBUG') ); + &setup(); - &status("--- End of $sig."); - } else { - &status("$sig called; ignoring restart."); + &status("--- End of $sig."); + } + else { + &status("$sig called; ignoring restart."); } } @@ -541,30 +588,32 @@ sub restart { sub loadConfig { my ($file) = @_; - if (!open(FILE, $file)) { - &ERROR("Failed to read configuration file ($file): $!"); - &status("Please read the INSTALL file on how to install and setup this file."); - exit 0; + if ( !open( FILE, $file ) ) { + &ERROR("Failed to read configuration file ($file): $!"); + &status( +'Please read the INSTALL file on how to install and setup this file.' + ); + exit 0; } my $count = 0; while () { - chomp; - next if /^\s*\#/; - next unless /\S/; - my ($set,$key,$val) = split(/\s+/, $_, 3); + chomp; + next if /^\s*\#/; + next unless /\S/; + my ( $set, $key, $val ) = split( /\s+/, $_, 3 ); - if ($set ne "set") { - &status("loadConfig: invalid line '$_'."); - next; - } + if ( $set ne 'set' ) { + &status("loadConfig: invalid line '$_'."); + next; + } - # perform variable interpolation - $val =~ s/(\$(\w+))/$param{$2}/g; + # perform variable interpolation + $val =~ s/(\$(\w+))/$param{$2}/g; - $param{$key} = $val; + $param{$key} = $val; - ++$count; + ++$count; } close FILE; @@ -573,3 +622,5 @@ sub loadConfig { } 1; + +# vim:ts=4:sw=4:expandtab:tw=80