# dynamic scalar. MUST BE REDUCED IN SIZE!!!
### TODO: reorder.
use vars qw(
- $answer $correction_plausible $talkchannel
+ $bot_misc_dir $bot_pid $bot_base_dir $bot_src_dir
+ $answer $correction_plausible $talkchannel $bot_release
$statcount $memusage $user $memusageOld $bot_version $dbh
- $shm $host $msg $bot_misc_dir $bot_pid $bot_base_dir $noreply
- $bot_src_dir $conn $irc $learnok $nick $ident $no_syscall
+ $shm $host $msg $noreply $conn $irc $learnok $nick $ident
$force_public_reply $addrchar $userHandle $addressedother
$floodwho $chan $msgtime $server $firsttime $wingaterun
- $flag_quit $msgType
+ $flag_quit $msgType $no_syscall
$utime_userfile $wtime_userfile $ucount_userfile
$utime_chanfile $wtime_chanfile $ucount_chanfile
- $pubsize $pubcount $pubtime $pubsleep
- $msgsize $msgcount $msgtime $msgsleep
- $notsize $notcount $nottime $notsleep
+ $pubsize $pubcount $pubtime
+ $msgsize $msgcount $msgtime
+ $notsize $notcount $nottime
+ $running
);
# dynamic hash.
$utime_chanfile = 0;
$wtime_chanfile = 0;
$ucount_chanfile = 0;
+$running = 0;
### more variables...
$msgtime = time();
$msgsize = 0;
-$msgcount = $msgsleep = 0;
+$msgcount = 0;
$pubtime = 0;
$pubsize = 0;
-$pubcount = $pubsleep = 0;
+$pubcount = 0;
$nottime = 0;
$notsize = 0;
-$notcount = $notsleep = 0;
+$notcount = 0;
###
-$bot_version = "blootbot cvs (20010214) -- $^O";
+if ( -d "CVS" ) {
+ use POSIX qw(strftime);
+ $bot_release = strftime("cvs (%Y%m%d)", localtime( (stat("CVS"))[9] ) );
+} else {
+ $bot_release = "1.0.10 (2001xxxx)";
+}
+$bot_version = "blootbot $bot_release -- $^O";
$noreply = "NOREPLY";
##########
&status("parent caught SIG$sig (pid $$).") if (defined $sig);
&status("--- Start of quit.");
+ $ident ||= "blootbot"; # lame hack.
&closeDCC();
&closePID();
+ &closeStats();
&seenFlush();
&quit($param{'quitMsg'}) if (&whatInterface() =~ /IRC/);
&writeUserFile();
return 0;
}
+ $chan ||= "_default";
+
my $old = $chan;
if ($chan =~ tr/A-Z/a-z/) {
&WARN("IsChanConf: lowercased chan. ($old)");
# About: Retrieve value for 'param' value in current/default chan.
# Return: scalar for success, undef for failure.
sub getChanConf {
- my($param,$chan) = @_;
+ my($param,$c) = @_;
if (!defined $param) {
&WARN("param == NULL.");
return 0;
}
- $chan ||= "_default";
- my @c = grep /^$chan$/i, keys %chanconf;
+ # 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;
+
+ if (@c) {
+ if (0 and $c[0] ne $c) {
+ &WARN("c ne chan ($c[0] ne $chan)");
+ }
+ return $chanconf{$c[0]}{$param};
+ }
+
+# &DEBUG("gCC: returning _default... ");
+ return $chanconf{"_default"}{$param};
+}
- if (@c and $c[0] ne $chan) {
- &WARN("c ne chan ($c[0] ne $chan)");
+#####
+# Usage: &findChanConf($param);
+# About: Retrieve value for 'param' value from any chan.
+# Return: scalar for success, undef for failure.
+sub findChanConf {
+ my($param) = @_;
+
+ if (!defined $param) {
+ &WARN("param == NULL.");
+ return 0;
}
- return $chanconf{$c[0]}{$param} || $chanconf{"_default"}{$param};
+ my $c;
+ foreach $c (keys %chanconf) {
+ foreach (keys %{ $chanconf{$c} }) {
+ next unless (/^$param$/);
+
+ &DEBUG("chanconf{$c}{$_} ...");
+ return $chanconf{$c}{$_};
+ }
+ }
+
+ return;
}
sub showProc {
}
# read.
- &loadLang($bot_misc_dir. "/blootbot.lang");
+ &loadLang($bot_data_dir. "/blootbot.lang");
&loadIRCServers();
&readUserFile();
&readChanFile();
$shm = &openSHM();
&openSQLDebug() if (&IsParam("SQLDebug"));
&openDB($param{'DBName'}, $param{'SQLUser'}, $param{'SQLPass'});
+ &checkTables();
&status("Setup: ". &countKeys("factoids") ." factoids.");
&News::readNews() if (&ChanConfList("news"));
$param{tempDir} =~ s#\~/#$ENV{HOME}/#;
&status("Initial memory usage: $memusage kB");
+ &status("-------------------------------------------------------");
}
sub setupConfig {
$param{'VERBOSITY'} = 1;
- &loadConfig($bot_misc_dir."/blootbot.config");
+ &loadConfig($bot_config_dir."/blootbot.config");
foreach ("ircNick", "ircUser", "ircName", "DBType", "tempDir") {
next if &IsParam($_);
}
# static scalar variables.
- $file{utm} = "$bot_base_dir/$param{'ircUser'}.uptime";
- $file{PID} = "$bot_base_dir/$param{'ircUser'}.pid";
+ $file{utm} = "$bot_state_dir/$param{'ircUser'}.uptime";
+ $file{PID} = "$bot_run_dir/$param{'ircUser'}.pid";
}
sub startup {
sub shutdown {
# reverse order of &setup().
- &DEBUG("shutdown called.");
+ &status("--- shutdown called.");
+
+ $ident ||= "blootbot"; # hack.
# opened files must be written to on shutdown/hup/whatever
# unless they're write-only, like uptime.
### crappy bug in Net::IRC?
if (!$conn->connected and time - $msgtime > 900) {
- &status("reconnecting because of uncaught disconnect.");
+ &status("reconnecting because of uncaught disconnect \@ ".scalar(localtime) );
### $irc->start;
+ &clearIRCVars();
$conn->connect();
### return;
}
&DCCBroadcast("-HUP called.","m");
&shutdown();
- &loadConfig($bot_misc_dir."/blootbot.config");
+ &loadConfig($bot_config_dir."/blootbot.config");
&reloadAllModules() if (&IsParam("DEBUG"));
&setup();